Kafka 核心技术与实战
胡夕
Apache Kafka Committer,老虎证券技术总监
52815 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 47 讲
开篇词 (1讲)
结束语 (1讲)
Kafka 核心技术与实战
15
15
1.0x
00:00/00:00
登录|注册

05 | 聊聊Kafka的版本号

主要改进在Kafka Streams
0.11.0.3版本的完善功能
消息格式重构
幂等性Producer API和事务API
0.10.2.2版本的稳定性
引入Kafka Streams
Kafka Connect组件
使用Java重写新版本消费者API
基础的安全认证/权限功能
新版本Producer API
引入副本机制
基础消息队列功能
团队的独特见解
如何评估Kafka版本升级
保持服务器端版本和客户端版本一致
不要一味追求最新版本
每个版本的使用场景和优缺点
1.0和2.0版本
0.11版本
0.10版本
0.9版本
0.8版本
0.7版本
大版本号、小版本号、修订版本号
Scala编译器版本与Kafka版本号
评判Kafka版本是否满足业务需求
了解版本差异和功能变化
开放讨论
小结
Kafka版本演进
Kafka版本命名
选择Kafka版本号的重要性
聊聊Kafka的版本号

该思维导图由 AI 生成,仅供参考

你好,我是胡夕。今天我想和你聊聊如何选择 Kafka 版本号这个话题。今天要讨论的内容实在是太重要了,我觉得它甚至是你日后能否用好 Kafka 的关键。
上一期我介绍了目前流行的几种 Kafka 发行版,其实不论是哪种 Kafka,本质上都内嵌了最核心的 Apache Kafka,也就是社区版 Kafka,那今天我们就来说说 Apache Kafka 版本号的问题。在开始之前,我想强调一下后面出现的所有“版本”这个词均表示 Kafka 具体的版本号,而非上一篇中的 Kafka 种类,这一点切记切记!
那么现在你可能会有这样的疑问:我为什么需要关心版本号的问题呢?直接使用最新版本不就好了吗?当然了,这的确是一种有效的选择版本的策略,但我想强调的是这种策略并非在任何场景下都适用。如果你不了解各个版本之间的差异和功能变化,你怎么能够准确地评判某 Kafka 版本是不是满足你的业务需求呢?因此在深入学习 Kafka 之前,花些时间搞明白版本演进,实际上是非常划算的一件事。

Kafka 版本命名

当前 Apache Kafka 已经迭代到 2.2 版本,社区正在为 2.3.0 发版日期进行投票,相信 2.3.0 也会马上发布。但是稍微有些令人吃惊的是,很多人对于 Kafka 的版本命名理解存在歧义。比如我们在官网上下载 Kafka 时,会看到这样的版本:
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

Kafka版本选择对于使用Kafka的关键性很重要。文章首先解释了Kafka版本号的命名规则,强调了理解版本号的重要性。作者指出,Kafka版本号实际上由三个部分构成,即“大版本号 - 小版本号 - Patch号”,并对此进行了详细解释。此外,文章还介绍了Kafka的版本命名存在的歧义,解释了版本号中Scala编译器版本的含义。作者还提到了Kafka客户端代码由Java语言编写的转变,以及Scala语言的特点。总的来说,文章强调了理解Kafka版本号的重要性,以及对版本号命名规则的解释和建议。 Kafka版本演进自0.7至2.0,每个版本都带来了重大的功能改进。0.7版本是最早开源的版本,功能基础,不建议使用。从0.8版本开始引入了副本机制,使Kafka成为完备的分布式高可靠消息队列解决方案。0.9版本增加了基础的安全认证/权限功能,使用Java重写了新版本消费者API,并引入了Kafka Connect组件。0.10.0.0版本引入了Kafka Streams,正式升级成分布式流处理平台。0.11.0.0版本引入了幂等性Producer API、事务API和对Kafka消息格式的重构。1.0和2.0版本主要改进了Kafka Streams。作者建议选择适合自身情况的Kafka版本,而不是一味追求最新版本。 总的来说,了解各个Kafka版本的差异,根据实际情况做出最正确的选择是至关重要的。文章还提到了保持服务器端版本和客户端版本一致的重要性。最后,作者鼓励读者分享自己的思考或疑问,并欢迎开放讨论。 文章内容涵盖了Kafka版本演进的重要里程碑和功能改进,以及选择合适版本的建议,对于Kafka用户来说具有很高的参考价值。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《Kafka 核心技术与实战》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(64)

  • 最新
  • 精选
  • 风中花
    每次看完就想打卡,以表示我还在坚持学习,如此看来,这个版本真不能忽视

    作者回复: 嗯嗯,之前在做咨询的时候发现过两个问题:1. 很多人碰到的问题实际上已经是新版本解决的bug;2. 客户端/服务器端版本不一致导致的性能问题 因此觉得写一篇版本的文章还是有点必要的。

    2019-06-17
    2
    16
  • 开水
    目前用的是hdp2.4.2内嵌版本。应该是apache版本的0.8.2.0。遇到很多问题都很难找到解决方法。比如前几天遇到了replicaFetcherThread oom的问题,网上根本找不到什么正经的解释。但又不能一味的调高jvm参数。老大说现在生产稳定就行了,暂时不要升级了,改代码耗时切面对的问题未知。期待老大能看到这篇文章,升级到0.11.0.3。

    作者回复: 嗯嗯,可以查一下ZooKeeper中是否存在大量session超时的情况。不过还是建议升级吧,听着很像是一个已知的bug。如果暂时不能升级,可以尝试调低replica.fetch.max.bytes的值试试。

    2019-06-13
    12
  • King Yao
    我是一名运维,在维护工作环境维护几十台Kafka。最近打算扩容。我有三个问题请教: 1.kafka如何做压力测试,它的参考主要指标是什么,比如QPS,最大连接数,延迟等等。 2.扩容如何做到平滑扩容,不影响原业务 3.kafka有什么好的监控软件。

    作者回复: 1. Kafka提供了命令行脚本可以执行producer和consumer的性能测试,主要指标还是TPS,延时 2. 增加broker很简单,也不会对现有业务有影响。关键是做好迁移计划——比如避开业务高峰时刻,如果迁移对业务影响最小

    2019-06-13
    3
    11
  • 平叔叔
    不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致 另外即使你升到了 0.8.2.2,也不要使用新版本 Producer api 不是互相矛盾吗?

    作者回复: 不矛盾。保持版本一致是任何时候都要尽力保持的。如果你依然使用0.8.x版本,那么最好使用Scala producer,而不是java producer

    2019-09-22
    2
    7
  • 南辕北辙
    记得在刚开始学kafka写demo时,找到了kafka.producer.Producer,以及apache.kafka...KafkaProducer,还以为只是2种不同的实现方式,后来在老师的书上才得知这完全是2个版本。针对今天讨论的版本差异,书上也做了很好了总结。 现在看来比较难理解的就是客户端的版本与服务端版本的兼容问题,与之前的各种技术还是有点差异的,并不是一味的较新客户端就完事,kafka中还有一种请求版本号的存在。 图片为书中版本对比 https://raw.githubusercontent.com/DarkerPWQ/picgo/master/img/Kafka%E7%89%88%E6%9C%AC%E5%8F%98%E8%BF%81.png

    作者回复: 嗯嗯,请求版本号偏底层的设计了,一般用户用不到。其实客户端和服务器端版本的差异很大一部分也是请求版本号的差异

    2019-06-13
    6
  • 疯琴
    美音最正的老师没有之一。有两个问题:1 文章前面说某些旧版本的服务端不适用新版本的客户端,文末又说二者应该保持一致,感觉是矛盾的,应该是我没理解清楚,还请说明 2 服务端版本靠编号就可以识别,而客户端是怎么定义新旧版本的呢?谢谢。

    作者回复: 1. 其实我也没太明白您的意思:) “旧版本的服务端不适用新版本的客户端 所以建议保持一致”,不是挺自然的结论吗。。。。 2. 客户端也有版本号,和broker端是一样的。比如Java客户端,如果我们使用Gradle的话,就类似于这样: compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.2.1'

    2019-06-13
    2
    6
  • 火力全开
    “最后还有个建议,不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致,否则你将损失很多 Kafka 为你提供的性能优化收益。” —— KIP-35 - Retrieving protocol version 这个特性不是可以让支持的client适配多个不同版本的broker吗?

    作者回复: 兼容性是一方面。因版本差异导致消息格式转换会丧失Zero Copy

    2020-02-14
    2
    4
  • bee
    请问胡老师, RESTful的幂等性是无论调用多少次都不会有不同结果的HTTP 方法。也就是说不会去改变资源。这里的幂等性虽然是确保了单个partition的数据不会重复,但是更改了资源。这样说会有冲突吗?

    作者回复: 这里的幂等性也没有你所谓的更改资源。当producer发送了一条重复消息时Broker端会拒绝接收,而不是在后面自己做去重

    2019-06-13
    2
    4
  • jacke
    胡老师,问下: "如果你不能升级大版本,我也建议你至少要升级到0.8.2.2+这个版本,因为该版本中老版本消费者API是比较稳定的。另外即使你升到了0.8.2.2,也不要使用新版本+Producer+API,此时它的Bug还非常多" == 不是很明白 这段话的意思升级到0.8.2.2,使用0.8.2.2的consumer api, 但是不要0.8.2.2的 producer api? 使用0.8大版本号下的producer api 是这个意思吗

    作者回复: 如果使用0.8.2.2,那么使用老版本的consumer和producer,不要使用新版本的客户端。它们此时还有很多bug。我是这个意思。。。。

    2019-06-22
    3
  • 云&龙
    既然新版本的老功能更加完善,而老版本又没有新版本的新功能,那为什么不无脑用最新的版本呢???反正用老版本也没有新功能。

    作者回复: 如果是新环境,也许可以采用最新版本。但如果是要升级的话就要考虑这些问题了

    2019-06-13
    3
收起评论
显示
设置
留言
64
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部