三十八、大数据技术之Kafka(1)
🌻🌻 目录
- 一、Kafka 概述
- 1.1 定义
- 1.2 消息队列
- 1.2.1 消息队列内部实现原理
- 1.2.2 传统消息队列的应用场景
- 1.2.3 消息队列的两种模式
- 1.3 Kafka 基础架构
- 二、 Kafka 快速入门
- 2.1 安装前的准备
- 2.2 安装部署
- 2.2.1 集群规划
- 2.2.2 单节点或集群部署
- 2.2.3 集群启停脚本
- 2.3 Kafka命令行操作
- 2.3.1 主题命令行操作
- 2.3.2 生产者命令行操作
- 2.3.3 消费者命令行操作
- 2.3.4 生产者生产消费者消费
学习本文技术需要已经有如下的基础要求:
- 熟悉
Javase基础- 熟悉
Linux常用命令- 熟悉
ldea开发工具
一、Kafka 概述
1.1 定义

Kafka是由Apache软件基金会开发的一个开源流处理平台,由Scala和Java编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

1.2 消息队列
- 目前企业中比较常见的消息队列产品主要有
Kafka、ActiveMQ、RabbitMQ、RocketMQ等。- 在大数据场景主要采用Kafka作为消息队列。
在JavaEE开发中主要采用ActiveMQ、RabbitMQ、RocketMQ 作为消息队列。
1.2.1 消息队列内部实现原理
消息队列(非kafka)内部实现原理

1.2.2 传统消息队列的应用场景
传统的消息队列的主要应用场景包括:
缓存/消峰(消去峰值)、解耦和异步通信。
- 消息队列的应用场景——
缓存/消峰

- 消息队列的应用场景——
解耦

- 消息队列的应用场景——
异步通信

1.2.3 消息队列的两种模式

1.3 Kafka 基础架构

- (1)
Producer:消息生产者,就是向Kafka broker发消息的客户端。- (2)
Consumer:消息消费者,向Kafka broker取消息的客户端。- (3)
Consumer Group(CG):消费者组,由多个consumer组成。消费者组内每个消费者负责消费不同分区的数据,一个分区只能由一个组内消费者消费;消费者组之间互不影响。所有的消费者都属于某个消费者组,即消费者组是逻辑上的一个订阅者。- (4)
Broker:一台Kafka服务器就是一个broker。一个集群由多个broker组成。一个broker可以容纳多个topic。- (5)
Topic:可以理解为一个队列,生产者和消费者面向的都是一个topic。- (6)
Partition:为了实现扩展性,一个非常大的topic可以分布到多个broker(即服务器)上,一个topic可以分为多个partition,每个partition是一个有序的队列。- (7)
Replica:副本。一个topic的每个分区都有若干个副本,一个Leader和若干个Follower。- (8)
Leader:每个分区多个副本的“主”,生产者发送数据的对象,以及消费者消费数据的对象都是Leader。- (9)
Follower:每个分区多个副本中的“从”,实时从Leader中同步数据,保持和Leader数据的同步。Leader发生故障时,某个Follower会成为新的Leader。
抽象理解 (生产者消费者):
- 生产者消费者,生产者生产鸡蛋,消费者消费鸡蛋,生产者生产一个鸡蛋,消费者就消费一个鸡蛋,假设消费者消费鸡蛋的时候噎住了(系统宕机了),生产者还在生产鸡蛋,那新生产的鸡蛋就丢失了。
- 再比如生产者很强劲(大交易量的情况),生产者1秒钟生产100个鸡蛋,消费者1秒钟只能吃50个鸡蛋,那要不了一会,消费者就吃不消了(消息堵塞,最终导致系统超时),消费者拒绝再吃了,”鸡蛋“又丢失了。
- 这个时候我们放个篮子在它们中间,生产出来的鸡蛋都放到篮子里,消费者去篮子里拿鸡蛋,这样鸡蛋就不会丢失了,都在篮子里。
上面的例子里面:
1.篮子就是kafka,鸡蛋其实就是数据流,系统之间的交互都是通过数据流来传输的(就是tcp、https什么的),也称为报文,或者消息。
2. 消息队列满了,其实就是篮子满了,鸡蛋放不下了,那赶紧多放几个篮子,其实就是kafka的扩容。
producer:生产者,就是它来生产“鸡蛋”的。consumer:消费者,生出的“鸡蛋”它来消费。broker:就是篮子了,鸡蛋生产出来后放在篮子里。topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,有的只吃草鸡蛋,有的吃洋鸡蛋,篮子中分为一个个小盒子,草鸡蛋放一个盒子里,洋鸡蛋放另一个盒子里。这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。
大家一定要学会抽象的去思考,上面只是属于业务的角度,如果从技术角度,
topic标签实际就是队列,生产者把所有“鸡蛋(消息)”都放到对应的队列里了,消费者到指定的队列里取。
二、 Kafka 快速入门
2.1 安装前的准备
- 先搭建一台虚拟机,再克隆三台出来
- 步骤在这里(三台上面仅需安装jdk,hadoop(可不装),zookeeper(必须装))
2.2 安装部署
安装前的准备:
资源获取:
通过百度网盘分享的文件获取:
kafka软件大全 提取码:yyds

- 1.VMware的安装:VMware-workstation-full-15.5.0
- 2.镜像的安装:CentOS-7.5-x86_64-DVD-1804.iso
- 3.JDK的安装: jdk-8u212-linux-x64.tar.gz
- 4.Hadoop的安装: hadoop-3.1.3.tar.gz
2.2.1 集群规划
| linux-102 | linux-103 | linux-104 |
|---|---|---|
| zk | zk | zk |
| kafka | kafka | kafka |
2.2.2 单节点或集群部署
- 0)官方下载 获取


- 1)本地资源下载获取(上面网盘获取)
- 2)上传压缩包到服务器 /usr/local下面并且进行解压

tar -zxvf kafka_2.12-3.0.0.tgz

3)修改解压后的文件名称到当前目录下
mv kafka_2.12-3.0.0 kafka

4)进入到/usr/local/kafka/config目录,修改配置文件 server.properties 如下③ 处地方,并保存。
vi server.properties

①

②

③

创建文件夹 datas

5)分发安装包(针对上述集群配置,注:分发后配置里面的这个需要依次改动 broker.id=0,broker.id不得重复,整个集群中唯一。)
scp -r /usr/local/kafka root@linux-103:/usr/local/


6)配置环境变量
(1)在/etc/profile 文件中增加kafka环境变量配置

增加如下内容:
#kafka
export KAFKA_HOME=/usr/local/kafka
export PATH=$PATH:$KAFKA_HOME/bin

(2)刷新一下环境变量。

(3)分发环境(只针对集群)变量文件到其他节点,并source。

7)启动集群
(1)先启动Zookeeper集群,然后启动Kafka。
cd /usr/local/zookeeper/bin/./zkServer.sh start./zkServer.sh statuscd /usr/local/kafka/bin/./kafka-server-start.sh -daemon /usr/local/kafka/config/server.propertiesjps


(2)依次在linux-102、linux-103、linux-104节点上启动Kafka。(针对集群)(如同上述启动)
注意:配置文件的路径要能够到server.properties。
8)关闭(集群)
./kafka-server-stop.sh

2.2.3 集群启停脚本
1)在/home/bin目录下创建文件kf.sh脚本文件(没有bin文件夹则创建文件夹)

脚本如下:
#! /bin/bashcase $1 in
"start"){#集群#for i in linux-102 linux-103 linux-104#单节点for i in linux-102 doecho " --------启动 $i Kafka-------"ssh $i "/usr/local/kafka/bin/kafka-server-start.sh -daemon /usr/local/kafka/config/server.properties"done
};;
"stop"){#集群#for i in linux-102 linux-103 linux-104#单节点for i in linux-102doecho " --------停止 $i Kafka-------"ssh $i "/usr/local/kafka/bin/kafka-server-stop.sh "done
};;
esac

2)添加执行权限
chmod +x kf.sh

3)启动集群命令
kf.sh start

4)停止集群命令
./kf.sh stop

注意:停止Kafka集群时,一定要等Kafka所有节点进程全部停止后再停止Zookeeper集群。因为Zookeeper集群当中记录着Kafka集群相关信息,Zookeeper集群一旦先停止,Kafka集群就没有办法再获取停止进程的信息,只能手动杀死Kafka进程了。
2.3 Kafka命令行操作
2.3.1 主题命令行操作
1)查看操作主题命令参数
./kafka-topics.sh

| 参数 | 描述 |
|---|---|
| - -bootstrap-server <String: server toconnect to> | 连接的Kafka Broker主机名称和端口号。 |
| - -topic <String: topic> | 操作的topic名称。 |
| - - create | 创建主题。 |
| - - delete | 删除主题。 |
| - - alter | 修改主题。 |
| - - list | 查看所有主题。 |
| - - describe | 查看主题详细描述。 |
| - - partitions <Integer: # of partitions> | 设置分区数。 |
| - - replication-factor<Integer: replication factor> | 设置分区副本。 |
| - - config <String: name=value> | 更新系统默认的配置。 |
2)查看当前服务器中的所有 topic(其中 9092 是kafka的默认端口)
./kafka-topics.sh --bootstrap-server linux-102:9092 --list
#一般是生产环境
./kafka-topics.sh --bootstrap-server linux-102:9092,linux-103:9092 --list

3)创建 first topic
./kafka-topics.sh --bootstrap-server linux-102:9092 --topic first --create --partitions 1 --replication-factor 1./kafka-topics.sh --bootstrap-server linux-102:9092 --list

选项说明:
--topic 定义topic名
--partitions 定义分区数
--replication-factor 定义副本数
4)查看first主题的详情
./kafka-topics.sh --bootstrap-server linux-102:9092 --describe --topic first

5)修改分区数(注意:分区数只能增加,不能减少)
6)再次查看first主题的详情
./kafka-topics.sh --bootstrap-server linux-102:9092 --alter --topic first --partitions 2./kafka-topics.sh --bootstrap-server linux-102:9092 --describe --topic first

7)删除 topic,删除后再次查看还有没有 topic
./kafka-topics.sh --bootstrap-server linux-102:9092 --delete --topic first./kafka-topics.sh --bootstrap-server linux-102:9092 --list

2.3.2 生产者命令行操作
操作:开两个窗口,一个作为生产者,一个作为消费者,当在生产者窗口命令输入的时候,消费者窗口就会自动输出(附截图最后)。
1)查看操作生产者命令参数
kafka-console-producer.sh

| 参数 | 描述 |
|---|---|
| - -bootstrap-server <String: server toconnect to> | 连接的Kafka Broker主机名称和端口号。 |
| - -topic <String: topic> | 操作的topic名称。 |
2)发送消息
2.3.3 消费者命令行操作
1)查看操作消费者命令参数
./kafka-console-consumer.sh

| 参数 | 描述 |
|---|---|
| - -bootstrap-server <String: server toconnect to> | 连接的Kafka Broker主机名称和端口号。 |
| - -topic <String: topic> | 操作的topic名称。 |
| - -from-beginning | 从头开始消费。 |
| - -group <String: consumer group id> | 指定消费者组名称。 |
2)消费消息
(1)消费first主题中的数据。
./kafka-console-consumer.sh --bootstrap-server linux-102:9092 --topic first

(2)把主题中所有的数据都读取出来(包括历史数据)。
./kafka-console-consumer.sh --bootstrap-server linux-102:9092 --from-beginning --topic first

2.3.4 生产者生产消费者消费

相关文章:
三十八、大数据技术之Kafka(1)
🌻🌻 目录 一、Kafka 概述1.1 定义1.2 消息队列1.2.1 消息队列内部实现原理1.2.2 传统消息队列的应用场景1.2.3 消息队列的两种模式 1.3 Kafka 基础架构 二、 Kafka 快速入门2.1 安装前的准备2.2 安装部署2.2.1 集群规划2.2.2 单节点或集群部署2.2.3 集群…...
将 Tcpdump 输出内容重定向到 Wireshark
在 Linux 系统中使用 Tcpdump 抓包后分析数据包不是很方便。 通常 Wireshark 比 tcpdump 更容易分析应用层协议。 一般的做法是在远程主机上先使用 tcpdump 抓取数据并写入文件,然后再将文件拷贝到本地工作站上用 Wireshark 分析。 还有一种更高效的方法…...
【Python蓝屏程序(管理员)】
说明:该程序为临摹(😀)作品,源地址C蓝屏程序(非管理员) 我试图使用Python调用 NtRaiseHardError API ,实现类似的蓝屏效果。可惜我发现Python在普通权限下,直接调用 NtRaiseHardError API 是不被允许的,因为…...
OpenGL ES->GLSurfaceView绘制图形的流程
自定义View代码 class MyGLSurfaceView(context: Context, attrs: AttributeSet) : GLSurfaceView(context, attrs), GLSurfaceView.Renderer {var mProgrem 0init {// 设置 OpenGL ES 3.0 版本setEGLContextClientVersion(3)// 设置当前类为渲染器, 注册回调接口的实现类set…...
Linux OOM Killer详解
Linux OOM Killer详解 一、概述二、OOM Killer的技术原理1. 内存区域划分2. 内存耗尽与OOM Killer触发3. 选择被杀进程的策略4. 内存回收机制5. 内存分配策略 三、OOM Killer的工作机制1. 内存压力监测2. 触发条件3. 选择被杀进程4. 终止进程 四、实际场景举例场景一࿱…...
2024rk(案例二)
试题二(25分) 阅读以下关于数据库缓存的叙述,在答题纸上回答问题1至问题3。 【说明】 某大型电商平台建立了一个在线 B2B 商店系统,并在全国多地建设了货物仓储中心,通过提前备货的方式来提高货物的运送效率。但是在运营过程中,发现会出现很多跨仓储中心调货从而延误货物…...
小红书爆文秘籍:ChatGPT助你从0到1创造热门内容!
在小红书打造爆款文案的策略中,以下是一些调整和同义词替换的建议,以便达到文章去重的要求: 了解目标受众: 在撰写文案前,先深入分析目标读者的属性,如年龄层次、性别、爱好和购买行为。通过ChatGPT, 你能迅…...
django快速实现个人博客(附源码)
文章目录 一、工程目录组织结构二、模型及管理实现1、模型2、admin管理 三、博客展现实现1、视图实现2、模板实现 四、部署及效果五、源代码 Django作为一款成熟的Python Web开发框架提供了丰富的内置功能,如ORM(对象关系映射)、Admin管理界面…...
K8s部署篇之手动部署二进制高可用集群架构
一、系统环境初始化 一)架构设计 所有节点都操作:3个master(etcd集群三个节点)和2个node 1、K8s服务调用如图 2、各组件说明 1、API Server 供Kubernetes API接口,主要处理 REST操作以及更新ETCD中的对象所有资源增删…...
【Unity/XLua】xlua自带教程示例分析(6)—— lua协程
文章目录 工具准备协程测试 工具准备 首先是工具脚本,一个Coroutine_Runner.cs和一个cs_coroutine.lua 前者定义了一个继承自Monobehavior的脚本组件,后者则使用lua去在Unity中实例化一个挂载该组件的GameObject,并将其设置为DontDestroyOn…...
CV目标检测概述
文章目录 目标检测概述目标检测图像分割目标检测和图像分割的区别 目标检测概述 目标检测和图像分割是计算机视觉中的两个重要任务,它们有着不同的目的和应用。以下是它们的简要介绍和区别: 目标检测 目标检测(Object Detection࿰…...
如何在notebook中运行nodejs
在 Python 生态系统的推动下,机器学习和人工智能日益流行,这带来了计算笔记本的概念。这些交互式计算平台主要是为以 Python 为中心的数据科学应用而开发的,它们将代码、计算输出、解释性文本和多媒体合并成一个有内聚力的文档。 作为 JavaS…...
Mybatis学习-day19
Mybatis学习-day19 1. resultMap resultMap 是 MyBatis 中最复杂的元素,主要用于解决实体类属性名与数据库表中字段名不一致的情况,可以将查询结果映射成实体对象。 <resultMap id"staffAndDep" type"com.easy.bean.Staff">…...
IDEA构建SpringBoot多模块项目
前言 最近一直在思考一个问题,springboot的多模块项目到底是怎么运行和运作的? 一般我们大部分的springboot项目都是单模块的项目,但是如果后续有要求开发多模块的项目应该怎么处理?于是基于这点进行了研究。 本次文章将会带大…...
【前端】NodeJS:nvm
文章目录 1 介绍2 使用2.1 下载安装2.2 常用命令 1 介绍 nvm全称:Node Version Manager,顾名思义它是用来管理node版本的工具,方便切换不同版本的Node.js。 2 使用 nvm的使用非常的简单,跟npm的使用方法类似。 2.1 下载安装 …...
Docker网络模式及通信
一、Docker默认的网络通信 1.1 Docker安装后默认的网络设置 Docker服务器安装完成之后,默认在每个宿主机会生成一个名称为docker0的网卡,其IP地址都是172.17.0.1/16 [rootubuntu1804 ~]#apt -y install bridge-utils [rootubuntu1804 ~]#brctl show 另…...
类模板实现实现Qt click/hover自定义操作
一、场景 常常会需要实现点击/hover时修改图片,可能是一个QPushButton、QLabel、QToolButton…… 由于Qt bug,QIcon/QSS只能实现常规态、按下态的图标切换,hover态的图片设置无效。 解决思路无非是安装事件过滤器、自定义类并重实现事件。 …...
Arco Design:引领未来的Vue 3创意先锋,一键开启高效与美感并重的Web开发之旅!
Arco Design 是一个基于 Vue 3 的 UI 框架,它提供了丰富的组件和样式,可以帮助开发者快速构建高质量的 Web 应用程序。以下是 Arco Design 的一些详细特点: 完整的设计系统:Arco Design 提供了一套完整的设计系统,包括…...
【MySQL】Linux下用C/C++链接MySQL数据库
文章目录 一、准备工作二、验证库和接口的使用三、链接数据库四、对数据库进行增删查改增删改查 五、结尾 一、准备工作 要使用C链接数据库, 首先要去MySQL官网下载官网提供的库, MySQL 社区下载. 如图所示: 接着选择: 按需选择版本: 如果用的是云服务器, 那么在安装mysql时…...
Python金融量化专栏简介
量化分析实战 - 专栏大纲 👉👉👉 《玩转Python金融量化专栏》👈👈👈 订阅本专栏的可以下载对应的代码和数据集 专栏目标 本专栏旨在帮助读者全面掌握使用Python进行金融技术指标的计算与应用,从基础到高级,涵盖各种技术指标的实现、策略开发与回测等内容。通过…...
Kandinsky-5.0-I2V-Lite-5s保姆级教程:从访问https://gpu-1pm4kagkou-7860.web.gpu.csdn.net/开始
Kandinsky-5.0-I2V-Lite-5s保姆级教程:从访问https://gpu-1pm4kagkou-7860.web.gpu.csdn.net/开始 1. 认识Kandinsky-5.0-I2V-Lite-5s Kandinsky-5.0-I2V-Lite-5s是一款轻量级的图生视频模型,它能将静态图片转化为动态视频。你只需要上传一张图片&…...
MIKE URBAN中如何添加污水管水质
管网中的水质一直是管网模型中的一个难题,很多群友也要求小编更新水质方面的内容,一方面,其实水质相关的内容官方资料已经很多了, 觉得没必要重复更新。另一方面,管道水质率定实在太难以率定,很难算的准确。…...
102. 在控制平面主机名更改后恢复 Rancher 配置的 RKE2 集群
Environment 环境 Rancher provisioned RKE2 downstream cluster control plane node hostname changed, without removing the node from the cluster. Rancher 配置了 RKE2 下游集群控制平面节点的主机名更改,但未将该节点从集群中移除。 Procedure 程序It is …...
效率提升:基于快马AI生成vmware虚拟机自动化部署脚本,告别手动配置
在开发过程中,虚拟机环境的搭建往往是耗时又容易出错的环节。特别是当需要频繁创建不同配置的虚拟机时,手动操作不仅效率低下,还容易遗漏关键步骤。最近尝试用自动化脚本解决这个问题,效果出乎意料地好,分享下具体实现…...
基于OpenCASCADE7.4+OSG3.6.3+Qt5.12.7的多文档初级CAD/CAE...
基于opencascade7.4osg3.6.3qt5.12.7的多文档初级Cad/cae平台,支持十几种格式文件,包括step,igs,stl,obj,3ds,osg等,支持视角切换,显示模式切换,仿Cad命令注册机制,装配体显示,模型高…...
面相对象高级(static)
##静态(static)1.static修饰成员变量:类变量:有static修饰,属于类,在计算机里只有一份,会被类的全部对象共享因为属于类,需要通过类名就可以调用:类名.静态变量##### 实际…...
保姆级教程:在Ubuntu 20.04上搞定Montreal Forced Aligner (MFA) 2.0安装与验证
保姆级教程:在Ubuntu 20.04上搞定Montreal Forced Aligner (MFA) 2.0安装与验证 语音对齐技术正在成为语音处理领域的基础工具,而Montreal Forced Aligner(MFA)作为当前最流行的开源解决方案,其2.0版本带来了显著的性…...
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤
PyTorch 2.8深度学习镜像入门必看:RTX 4090D环境验证与快速上手步骤 1. 镜像概述与核心优势 PyTorch 2.8深度学习镜像专为RTX 4090D显卡优化设计,提供开箱即用的深度学习开发环境。这个镜像最显著的特点是免去了复杂的环境配置过程,让开发者…...
WPF进阶:Canvas动态图形绘制与交互实现
1. Canvas动态图形绘制基础 WPF中的Canvas就像一块无限延伸的画布,我们可以在这块画布上自由地绘制各种图形元素。与静态绘制不同,动态绘制的魅力在于图形能够根据用户操作实时变化。我刚开始接触Canvas时,最让我兴奋的就是看到鼠标移动时能实…...
隐私保护×效率提升:开源OCR工具如何重构3大行业文本处理流程
隐私保护效率提升:开源OCR工具如何重构3大行业文本处理流程 【免费下载链接】Umi-OCR OCR software, free and offline. 开源、免费的离线OCR软件。支持截屏/批量导入图片,PDF文档识别,排除水印/页眉页脚,扫描/生成二维码。内置多…...
