Kafka学习笔记01【2024最新版】

news/2024/5/21 4:41:40

一、Kafka-课程介绍

官网地址:Apache KafkaApache Kafka: A Distributed Streaming Platform.icon-default.png?t=N7T8https://kafka.apache.org/

kafka 3.6.1版本,作为经典分布式订阅、发布的消息传输中间件,kafka在实时数据处理、消息队列、流处理等领域具有广泛的应用场景。高性能、高可靠、高吞吐,被数千家公司应用于高性能的数据管道、流分析和数据集成等不同场景,在海量实时数据传输和事件驱动的微服务架构中也被广泛地使用。

学习步骤:

1、kafka集群启动

2、主题创建

3、生产消息

4、存储消息

5、消费消息

大数据场景中,我们将kafka和Flume、Spark和Flink等软件进行集成,那么kafka依然用作数据传输的消息中间件,那Flume就作为producer生产者来生产数据,而我们的Spark和Flink分布式计算引擎就作为consumer消费者来消费数据

三、Kafka-软件介绍

为什么分布式系统之间它需要使用一个软件来完成数据交换的这个过程?那说到我们数据交换啊,在java开发的这个普通场景中,主要指的就是线程和线程之间的数据交换以及呢进程和进程之间的数据交换。我们线程和线程之间是如何做数据交换的,其实呢我们主要是用内存来完成这个操作的。

首先我们的java虚拟机当中,每个线程呢其实是有它独立的这个栈内存空间的,每个线程是独立的,那么这两个我们的线程它们是如何交互的呢?首先它们两块内存是独立的,不过呢java虚拟机还有一块内存是它们共享的,这块内存呢我们称之为堆内存,咱们这个堆内存呢,其实就是我们所有线程共享的,那既然是所有线程共享的,那么是不是就可以将线程的数据发送到这块内存当中呢?这个肯定是没有问题的,那我们另外一个线程啊,其实就可以想办法呢,从这个堆内存当中把数据给我获取过来,因为你是共享的吗?你共享的话,你的数据放进去,我这边应该是可以获取到的,这个应该是没有问题的,那么为了数据的操作方便,java还提供了专门的数据模型Q来作为数据的缓冲区进行数据的传输,就是我们通过一种队列的方式来完成,比较常见的呢就是阻塞队列啊BlockingQueue或者那个双端队列DQ啊等等。其实我们通过内存就可以实现我们数据的传输了,那么根本也不需要额外的第三方软件来完成。(缺点会导致内存不够用了,内存溢出)

接下来再说说进程和进程之间的数据交互,我们在执行java程序的时候,就会启动一个java虚拟机的进程,那这个时候呢如果你想启用第二个进程的话,那它们两个能不能共享内存来完成我们的数据交互呢?其实是不行的,为什么呢?因为我们的java虚拟机啊,它在启动的时候会向操作系统申请内存,意味着两个不同的进程它们申请的内存其实是不一样的,那也就是说每个进程的内存空间是独立的,它们无法共享,因此我们进程之间传递数据呢都是采用网络数据流来进行传输的,比如我们使用java提供的基础的socket、ServerSocket这样的接口来实现网络的数据传输(数据需要重复发送)

缓冲区【消息中间件】

四、Kafka-JMS介绍

Java Message Service【JMS】

P2P模型

PS模型

五、Kafka-组件

六、Kafka-安装与启动

windows安装步骤:

1、解压 kafka_2.12-3.7.0.tgz

2、kafka_2.12-3.7.0目录下新建data目录

3、修改config目录下的zookeeper.properties

dataDir=D:/xxx/kafka_2.12-3.7.0/data/zk

4、在kafka_2.12-3.7.0目录下新建zk.cmd文件

call bin/windows/zookeeper-server-start.bat config/zookeeper.properties

5、双击zk.cmd,启动zookeeper

6、修改config目录下的server.properties

log.dirs=D:/gitee/kafka_2.12-3.7.0/data/kafka

7、在kafka_2.12-3.7.0目录下新建kfk.cmd文件

call bin/windows/kafka-server-start.bat config/server.properties

8、双击kfk.cmd,启动kafka

十三、Kafka-基础架构图形推演

数据只保存在内存中是不安全的,我们需要把数据保存到日志文件中。为什么是日志文件呢?就是因为kafka早期就是做日志数据传输的,所以它的文件就叫做.log

架构

kafka采用生产者消费者的模型,所以它是允许多个生产者来生产数据,同时呢它也允许多个消费者来消费数据

有没有发现什么问题?我们当前的这个Kafka Broker 有很多的生产者和消费者对它进行访问,这个频繁的数据请求访问呢?大概率就会因为吞吐量过大产生IO热点问题,从而导致这个单一的这个节点成为整个分布式系统的性能瓶颈,进行就会降低系统的可用性和稳定性,一旦我们当前的Broker它宕掉了,那我们的数据其实就无法访问了,你连服务都没有了,怎么可能访问数据呢?

横向扩展:增加服务节点,搭建服务器集群,降低单点故障带来的风险(增加多个Broker节点,把Topic划分为多个数据块【添加编号进行区分】,放在多个Broker节点,消费者添加消费者组)

纵向扩展:增加系统的资源配置,比如使用IO效率更好的固态硬盘以及更大的内存、更多的CPU核,还有更快的网络(其实无法从根本上解决问题的,咱们的资源是有限的,一旦单机的吞吐量超过阈值,无论你增加什么样的资源都是无法解决问题的)


http://www.mrgr.cn/p/13427545

相关文章

论文解读(MAML)《Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks》

Note:[ wechat:Y466551 | 可加勿骚扰,付费咨询 ] 论文信息论文标题:Model-Agnostic Meta-Learning for Fast Adaptation of Deep Networks论文作者:Chelsea Finn、Pieter Abbeel、Sergey Levine论文来源:2017 论文地址:download 论文代码:download视屏讲解:click1-摘要…

【网络原理】TCP协议的连接管理机制(三次握手和四次挥手)

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序(万字博文) 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制(CRC算法、MD5算法) 【网络…

实验24-基于LSTM的实体提取

版本python3.6 tensorflow版本为tensorflow==1.14 运行结果:

实验25-基于sklearn构建One-hot词向量

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

实验26-1基于gensim构建word2vec词向量

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

什么是 Antimalware Service Executable,为什么它会在我的 PC 上运行?

Microsoft Defender Antivirus 是一种反恶意软件工具,其后台进程是“Antimalware Service Executable”。 两者都默认安装在 Windows 10 中。 这个软件,有时称为 MsMpEng.exe,是 Windows 操作系统的一部分。 在本文中,我们将深入并解释有关此 Windows 进程的所有信息。 什么…

实验22-4-jieba常用方法

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6 运行结果:

后端开发的学习路线

所谓的后端开发,一般指的是后端服务器开发。针对服务器开发,可以用各种语言 Java、C++、PHP、Python、Go 都可以。 学习方向和路线很重要,比起具体的技术细节,可复制的经验、清晰的学习路线,是大部分人更加需要的东西。 朝着正确的方向努力,否则只会离目标越来越远,不是…

WPF 资源基础

动态资源/静态资源 UI代码 <Window x:Class"WpfApp1.MainWindow"xmlns"http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x"http://schemas.microsoft.com/winfx/2006/xaml"xmlns:d"http://schemas.microsoft.com/ex…

m考虑时偏影响的根升余弦滤波器matlab仿真

1.算法仿真效果 matlab2022a仿真结果如下: 2.算法涉及理论知识概要根升余弦滤波器(Root-Raised Cosine Filter, RRC Filter)是一种广泛应用在通信系统中的脉冲整形滤波器,特别是在数字调制传输系统中,用于消除码间干扰(Inter-Symbol Interference, ISI),确保符号边界清…

Java线程池让使用线程变得更加高效

使用一个线程需要经过创建、运行、销毁三大步骤&#xff0c;如果业务系统每个线程都要经历这个过程&#xff0c;那势必带来过多不必要的资源消耗。线程池就是为了解决这个问题而生&#xff0c;需要时就从池中拿取&#xff0c;使用完毕就放回去&#xff0c;池化思想通过复用对象…

EDevourer风险分析报告及典型用户

1.风险分析人: 客户/用户反馈多样性:由于用户群体可能包括不同年龄段、英语水平和游戏喜好的人群,因此他们的反馈可能多样化,需要花费更多精力去理解和整合这些反馈。 团队成员经验和技能:团队成员在游戏开发的时侯有可能会遇到许多bug或者遇到设想的功能无法实现,可能导…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

C# 环境变量,在不同目录运行返回不同的值

why? System.Environment.GetEnvironmentVariable("SESSIONNAME");本文由 trykle 发布联系方式:QQ 294986636本文地址:https://www.cnblogs.com/trykle/p/18162480

实验20-智能换脸

版本python3.7 tensorflow版本为tensorflow-gpu版本2.6: 运行结果:

Xcode for Mac:强大易用的集成开发环境

Xcode for Mac是一款专为苹果开发者打造的集成开发环境&#xff08;IDE&#xff09;&#xff0c;它集成了代码编辑器、编译器、调试器等一系列开发工具&#xff0c;让开发者能够在同一界面内完成应用的开发、测试和调试工作。 Xcode for Mac v15.2正式版下载 Xcode支持多种编程…

Ubuntu+Systemd服务+实现开机自启/关机启动脚本

开机自启 1.创建一个新的 systemd 服务文件 现在随便一个地方创建txt文档 如果想要启动sh脚本&#xff0c;就把下面的代码输入到txt文档中 [Unit] DescriptionRun Python script on specific executable run Afternetwork.target[Service] Typesimple ExecStart/home/tech/…

DRF源码汇总

三大认证源码分析 simple-jwt源码分析 还差一个序列化类源码分析(在做了,会补的)DRF源码汇总 【一】三大认证【1】认证【2】权限【3】频率【3.1】SimpleRateThrottle源码分析【二】JWT 【1】simple-jwt 【1.1】登录【1.2】认证

docker部署SonarQube流程及相关问题汇总

环境说明:  sonarqube版本:10.4.1-community PostgreSql版本:14.1 系统环境:centos7.6(x86_64) 1、PostgreSql的安装部署 在docker中拉取最新版本镜像,命令如下:docker pull postgres 镜像拉取成功后执行如下命令创建PostgreSql容器:docker run --name postgres -e PO…

《HCIP-openEuler实验指导手册》1.4 Apache MPM工作模式调整

MPM介绍 二、配置步骤 查看MPM当前工作模式 方法一&#xff1a; httpd -M | grep mpm方法二&#xff1a; 浏览器访问&#xff1a;http://IP:端口/server-status 方法三&#xff1a; cat /etc/httpd/conf.modules.d/00-mpm.conf查看 LoadModule mpm_event_module modules/mo…