【Kafka】| 总结/Edison Zhou

1新的KRaft架构

在Kafka 2.8之前,Kafka重度依赖于Zookeeper集群做元数据管理和集群的高可用(即所谓的共识服务)。

在Kafka 2.8之后,引入了基于Raft协议的KRaft模式,支持取消对Zookeeper的依赖。在此模式下,一部分Kafka Broker被指定为Controller,另一部分则为Broker。这些Controller的作用就是以前由Zookeeper提供的共识服务,并且所有的元数据都将存储在Kafka主题中并在内部进行管理。

总体而言,使用KRaft的好处如下:

  • Kafka不用再依赖外部框架,能够做到独立运行。类似于Redis的Sentinel,它的本质仍然是一个Kafka实例。

  • Controller管理集群时,不再需要从Zookeeper中先读取数据,因此集群的性能得到一定的提升。

  • 由于不再依赖Zookeeper,Kafka集群扩展时不用再受到Zookeeper读写能力的限制。

  • Controller不再动态选举,而是由配置文件规定。这样可以有针对性的加强Controller节点的配置,而不是像以前一样对随机Controller节点的高负载束手无策。

2KRaft架构部署实战

本次我们采用物理宿主机部署,本集群三个Kafka实例均在一台主机上。

下载Kafka安装包

从Apache Kafka官方社区下载最新版3.2.0的安装包(.tgz),然后将其拷贝到服务器上并解压。

这里我使用一台Linux主机,启动三个Kafka实例,分别绑定9092,19092,29092端口来模拟三台服务器的集群效果。

由于只有三个实例,因此它们既是Controller节点,也是Broker节点

修改KRaft必要配置

和基于Zookeeper的模式不同,KRaft模式下的配置需要进入Kraft目录,找到server.properties文件:

cd config/kraft

依次修改每个服务器下的kraft目录下的server.properties文件:

(1)kafka01

process.roles=broker,controller
node.id=1
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
advertised.listeners=PLAINTEXT://kakfa01:9092
log.dirs=/usr/local/modules/kakfa01/logs

(2)kafka02

process.roles=broker,controller
node.id=2
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:19092,CONTROLLER://:19093
advertised.listeners=PLAINTEXT://kakfa02:19092
log.dirs=/usr/local/modules/kakfa02/logs

(3)kafka03

process.roles=broker,controller
node.id=2
controller.quorum.voters=1@kafka01:9093,2@kafka02:19093,3@kafka03:29093
listeners=PLAINTEXT://:29092,CONTROLLER://:29093
advertised.listeners=PLAINTEXT://kakfa03:29092
log.dirs=/usr/local/modules/kakfa03/logs

初始化集群数据目录

(1)生成存储目录唯一ID(UUID)

bin/kafka-storage.sh random-uuid
uTTIHcpoQSeiGlItgLau0A

(2)用这个唯一ID格式化Kafka存储目录

# kafka01
/usr/local/modules/kafka01/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka01/config/kraft/server.properties
# kafka02
/usr/local/modules/kafka02/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka02/config/kraft/server.properties
# kafka03
/usr/local/modules/kafka03/bin/kafka-storage.sh format -t uTTIHcpoQSeiGlItgLau0A -c /usr/local/modules/kafka03/config/kraft/server.properties

(3)启动Kafka KRaft集群节点服务

# kafka01
/usr/local/modules/kafka01/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka01/config/kraft/server.properties
# kakfa02
/usr/local/modules/kafka02/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka02/config/kraft/server.properties
# kafka03
/usr/local/modules/kafka03/bin/kafka-server-start.sh -daemon /usr/local/modules/kafka03/config/kraft/server.properties

(4)验证Kafka集群节点服务

# jps
1207 Kafka
2137 Jps
2013 Kafka
1614 Kafka

快速测试生产消费

(1)创建测试topic

kafka01/bin/kafka-topics.sh --create --bootstrap-server kafka01:9092,kafka02:19092,kafka03:29092 --replication-factor 2 --partitions 3 --topic test
Created topic test.

(2)模拟Producer

kafka01/bin/kafka-console-producer.sh --broker-list kafka01:9092,kafka02:19092,kafka03:29092 --topic test
>hello
>world
>edison
>zhou

(3)模拟Consumer

kafka02/bin/kafka-console-consumer.sh --bootstrap-server kafka01:9092,kafka02:19092,kafka03:29092 --from-beginning --topic test
hello
world
edison
zhou

可以看到,已经可以正常的生产和消费数据。

End总结

本文总结了Kafka KRaft模式的基本概念和优点,介绍了Kafka KRaft模式的部署过程。基于KRaft模式,我们不再需要依赖Zookeeper进行元数据管理和共识服务,在技术选型时不再需要引入额外的组件,对于Kafka来说,实在是个好消息。

至此,Kafka学习征途系列已经有了11篇推文,目前已经走到了结尾,总结这个系列既是我对自己学习的总结,也是系统地梳理所学知识,相信它对我有帮助,也一定对你有所帮助

参考资料

深度感谢以下参考教程!

极客时间,胡夕《Kafka核心技术与实战》

B站,尚硅谷《Kafka 3.x入门到精通教程》

年终总结:Edison的2021年终总结

数字化转型:我在传统企业做数字化转型

C#刷题:C#刷剑指Offer算法题系列文章目录

.NET面试:.NET开发面试知识体系

.NET大会:2020年中国.NET开发者大会PDF资料

Kafka学习征途:不再依赖ZK的KRaft相关推荐

  1. Kafka学习征途:.NET Core操作Kafka

    [Kafka]| 总结/Edison Zhou 1可用的Kafka .NET客户端 作为一个.NET Developer,自然想要在.NET项目中集成Kafka实现发布订阅功能.那么,目前可用的Kaf ...

  2. 大数据 -- kafka学习笔记:知识点整理(部分转载)

    一 为什么需要消息系统 1.解耦 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许多 ...

  3. J1angの小白式kafka学习总结(1)

    kafka学习阶段性总结(1) kafka概述 基本概念:什么是kafka 消息队列的两种模式 为什么要使用kafka kafka的基本架构组成 kafka架构 kafka组成 集群配置 jar包下载 ...

  4. Kafka学习【1】

    Kafka学习[1] Kafka的用途有哪些?使用场景如何?### 消息系统: Kafka 和传统的消息系统(也称作消息中间件)都具备系统解耦.冗余存储.流量削峰.缓冲.异步通信.扩展性.可恢复性等功 ...

  5. [Big Data - Kafka] kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余:消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险.许 ...

  6. SpringMVC:学习笔记(11)——依赖注入与@Autowired

    SpringMVC:学习笔记(11)--依赖注入与@Autowired 使用@Autowired 从Spring2.5开始,它引入了一种全新的依赖注入方式,即通过@Autowired注解.这个注解允许 ...

  7. kafka学习笔记:知识点整理

    一.为什么需要消息系统 1.解耦: 允许你独立的扩展或修改两边的处理过程,只要确保它们遵守同样的接口约束. 2.冗余: 消息队列把数据进行持久化直到它们已经被完全处理,通过这一方式规避了数据丢失风险. ...

  8. 当我不再依赖你的时候说说_不要依赖任何人说说 不要指望别人的经典话

    1.静下心慢慢变得沉稳,不再依赖任何人, 珍惜身边人 ,不强求不勉强每天都要很开心. 2.的确没什么人可以陪你一辈子,所以在那些难熬的日子过去之后,将会不再依赖任何人成长. 3.自己一个人走在路上,才 ...

  9. 华为自研5G关键芯片PA:明年量产不再依赖美国;1999元!苹果发布AirPods Pro ;腾讯云勇推自研服务器“星星海”……...

    关注并标星星CSDN云计算 极客头条:速递.最新.绝对有料.这里有企业新动.这里有业界要闻,打起十二分精神,紧跟fashion你可以的! 每周两次,打卡即read   更快.更全了解泛云圈精彩news ...

  10. kafka学习知识点总结(三)

    Kafka Kafka是最初由Linkedin公司开发,是一个分布式.支持分区的(partition).多副本的(replica),基于zookeeper协调的分布式消息系统,它的最大的特性就是可以实 ...

最新文章

  1. LINUX:PS命令详解与使用!
  2. 机器学习:使用分形维数快速选择特征
  3. python api开发用什么框架_python+requests接口自动化框架
  4. LaTeX Test
  5. redhat安装wine教程_可能是最漂亮的国产Linux,U盘安装DeepinLinux 深度操作系统
  6. STM32M CUBE实现printf打印调试信息以及实现单字节接收
  7. PAT、PMT、SDT详解
  8. NULL、nil、Nil、NSNull的区别
  9. 面试官是怎样高效面试的(面试官的“套路”
  10. DI / CDI –基础
  11. vue动态生成下拉框_vue+elementui 动态创建下拉框
  12. c++中outtextxy_第12章 坚持一百秒(《C和C++游戏趣味编程》配套教学视频)
  13. python网络爬虫学习笔记(七):正则表达式
  14. 剑指offer——面试题38:数字在排序数组中出现的次数
  15. Mac屏幕截图软件SnapNDrag激活教程分享
  16. 【RNA-seq】表达矩阵的归一化处理(RPKM,TPM,FPKM,RPM(CPM))
  17. 航空公司客户流失分析
  18. Oracle --- 表空间
  19. CF898D. Alarm Clock(贪心 双指针)
  20. PAT_1078 Hashing

热门文章

  1. 142Echarts - 矩形树图(Disk Usage)
  2. TCP 糊涂窗口综合症
  3. 图片识别word c#
  4. 360度评估反馈实施的注意事项
  5. 30线性空间04——子空间的直和、n个子空间的直和、直和分解、直和补
  6. java jimi_绝对经典Java开源工具Jimi处理图片大小及格式转换及打水印(源码)
  7. 物联网应用技术竞赛——单片机笔记
  8. Quorum企业以太坊搭建区块链记录系列
  9. 用 SwiftUI 编写真正的 app
  10. windows系统桌面壁纸软件推荐名称