【DevDojo】Kafka实操 ·一文快速搞懂kafka版本选型和避坑参数配置

文章详细介绍了Kafka的版本号结构,强调了理解版本差异对选择合适版本的重要性。内容涵盖Kafka不同版本的功能改进,如副本机制、安全性、流处理等。此外,文章深入讨论了Broker参数配置,包括log.dirs、listeners、unclean.leader.election.enable等关键参数,并提到了Zookeeper的相关设置。文章还提及了Topic级别参数和JVM参数的调整,以及OS参数如文件描述符限制和文件系统类型对Kafka性能的影响。

【DevDojo】
@you: “Stay focused and work hard!

05. 版本号

05.1 如何看懂 Kafka 版本号?

如果你不了解各个版本之间的差异和功能变化,你怎么能够准确地评判某 Kafka 版本是不是满足你的业务需求呢?因此在深入学习 Kafka 之前,花些时间搞明白版本演进,实际上是非常划算的一件事。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHv4DHcs-1678850793624)(./assets/image-20230314195614124.png)]

前面的版本号是编译 Kafka 源代码的 Scala 编译器版本。

对于 kafka-2.11-2.1.1 的解读,真正的 Kafka 版本号实际上是 2.1.1。那么这个 2.1.1 又表示什么呢?前面的 2 表示大版本号,即 Major Version;中间的 1 表示小版本号或次版本号,即 Minor Version;最后的 1 表示修订版本号,也就是 Patch 号。

Kafka 服务器端的代码完全由 Scala 语言编写,Scala 同时支持面向对象编程和函数式编程,用 Scala 写成的源代码编译之后也是普通的“.class”文件,因此我们说 Scala 是 JVM 系的语言,它的很多设计思想都是为人称道的。

可以认为Kafka版本号从来都是由 3 个部分构成,即“大版本号 - 小版本号 - Patch 号”。这种视角可以统一所有的 Kafka 版本命名

假设碰到的 Kafka 版本是 0.10.2.2,你现在就知道了它的大版本是 0.10,小版本是 2,总共打了两个大的补丁,Patch 号是 2。

05.2 kafka版本演进? 哪些版本引入了哪些重大的功能改进?

关于这个问题,我建议你最好能做到如数家珍,因为这样不仅令你在和别人交谈 Kafka 时显得很酷,而且如果你要向架构师转型或者已然是架构师,那么这些都是能够帮助你进行技术选型、架构评估的重要依据。

Kafka 目前总共演进了 7 个大版本,分别是 0.7、0.8、0.9、0.10、0.11、1.0 和 2.0.

版本 功能 备注
0.7 只提供了最基础的消息队列功能,甚至连副本机制都没有 不推荐
0.8 引入副本机制, 成了真正意义上完备的分布式高可靠消息队列解决方案 (老版本客户端api)需要需要指定 ZooKeeper 的地址而非 Broker 的地址; 生产者api默认使用同步方式; 推荐最低版本v0.8.2.0, 搭配old client api(此时虽有了New produder api, 但bug还很多)
0.9(2015.11) 增加了基础的安全认证 / 权限功能,用 Java 重写了新版本消费者 API,还引入了 Kafka Connect 组件用于实现高性能的数据抽取 此时V0.9以上new producer api已经算比较稳定了, 线上可以使用了; 但new consumer api还有很多bug, 千万不要用
0.10(里程碑) 引入Kafka streams, 正式成为分布式流处理平台 推荐至少V0.10.2.2再使用new consumer api, 而且修复了一个可能导致producer性能降低的bug
0.11(重量级变更) 一个是提供幂等性 Producer API 以及事务(Transaction) API;另一个是对 Kafka 消息格式做了重构。 Producer 实现幂等性以及支持事务都是 Kafka 实现流处理结果正确性的基石。此时的事务 API 有一些 Bug,不算十分稳定. 如果线上不敢用V1.0, 推荐至少V0.11.0.3(3个补丁版本之后), 此时功能已经非常完善(最主流版本之一)!
1.0&2.0 Kafka Streams 的各种改进 如果你是 Kafka Streams 的用户,至少选择 V2.0.0 版本

不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致,否则你将损失很多 Kafka 为你提供的性能优化收益。

每个 Kafka 版本都有它恰当的使用场景和独特的优缺点,切记不要一味追求最新版本。

学员反例举例:

(1)讲一下我在生产环境中遇到的Kafka版本带来的坑。我参与到项目中一年,运行的版本是0.10.0.1,前半年还算稳定,偶尔出现进程假死问题。但是慢慢的生产环境数据量增加,假死频发,导致客户数据丢失,问题很严重。但是一直又没有证据证明这个版本确实存在问题;

(2)目前用的是hdp2.4.2内嵌版本。应该是apache版本的0.8.2.0。遇到很多问题都很难找到解决方法。比如前几天遇到了replicaFetcherThread oom的问题,网上根本找不到什么正经的解释。–70 QQQQQ 可以查一下ZooKeeper中是否存在大量session超时的情况。不过还是建议升级吧,听着很像是一个已知的bug。如果暂时不能升级,可以尝试调低replica.fetch.max.bytes的值试试。

(3)的确在工作中遇到了kafka版本不同导致消息格式不兼容问题,后来服务端和客户端统一版本号才解决;

07 | 最最最重要的集群参数配置(上)

因为有些配置的重要性并未体现在官方文档中,并且从实际表现看,很多参数对系统的影响要

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值