Kafka核心技术与实战
胡夕
人人贷计算平台部总监,Apache Kafka Contributor
立即订阅
8408 人已学习
课程目录
已完结 46 讲
0/4登录后,你可以任选4讲全文学习。
开篇词 (1讲)
开篇词 | 为什么要学习Kafka?
免费
Kafka入门 (5讲)
01 | 消息引擎系统ABC
02 | 一篇文章带你快速搞定Kafka术语
03 | Kafka只是消息引擎系统吗?
04 | 我应该选择哪种Kafka?
05 | 聊聊Kafka的版本号
Kafka的基本使用 (3讲)
06 | Kafka线上集群部署方案怎么做?
07 | 最最最重要的集群参数配置(上)
08 | 最最最重要的集群参数配置(下)
客户端实践及原理剖析 (14讲)
09 | 生产者消息分区机制原理剖析
10 | 生产者压缩算法面面观
11 | 无消息丢失配置怎么实现?
12 | 客户端都有哪些不常见但是很高级的功能?
13 | Java生产者是如何管理TCP连接的?
14 | 幂等生产者和事务生产者是一回事吗?
15 | 消费者组到底是什么?
16 | 揭开神秘的“位移主题”面纱
17 | 消费者组重平衡能避免吗?
18 | Kafka中位移提交那些事儿
19 | CommitFailedException异常怎么处理?
20 | 多线程开发消费者实例
21 | Java 消费者是如何管理TCP连接的?
22 | 消费者组消费进度监控都怎么实现?
深入Kafka内核 (5讲)
23 | Kafka副本机制详解
24 | 请求是怎么被处理的?
25 | 消费者组重平衡全流程解析
26 | 你一定不能错过的Kafka控制器
27 | 关于高水位和Leader Epoch的讨论
管理与监控 (12讲)
28 | 主题管理知多少?
29 | Kafka动态配置了解下?
30 | 怎么重设消费者组位移?
31 | 常见工具脚本大汇总
32 | KafkaAdminClient:Kafka的运维利器
33 | Kafka认证机制用哪家?
34 | 云环境下的授权该怎么做?
35 | 跨集群备份解决方案MirrorMaker
36 | 你应该怎么监控Kafka?
37 | 主流的Kafka监控框架
38 | 调优Kafka,你做到了吗?
39 | 从0搭建基于Kafka的企业级实时日志流处理平台
高级Kafka应用之流处理 (3讲)
40 | Kafka Streams与其他流处理平台的差异在哪里?
41 | Kafka Streams DSL开发实例
42 | Kafka Streams在金融领域的应用
结束语 (1讲)
结束语 | 以梦为马,莫负韶华!
特别放送 (2讲)
加餐 | 搭建开发环境、阅读源码方法、经典学习资料大揭秘
用户故事 | 黄云:行百里者半九十
Kafka核心技术与实战
登录|注册

05 | 聊聊Kafka的版本号

胡夕 2019-06-13
你好,我是胡夕。今天我想和你聊聊如何选择 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/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《Kafka核心技术与实战》,如需阅读全部文章,
请订阅文章所属专栏。
立即订阅
登录 后留言

精选留言(43)

  • 榣山樵客™
    版本号:
    大 + 小 + patch

    0.7版本:
    只有基础消息队列功能,无副本;打死也不使用

    0.8版本:
    增加了副本机制,新的producer API;建议使用0.8.2.2版本;不建议使用0.8.2.0之后的producer API

    0.9版本:
    增加权限和认证,新的consumer API,Kafka Connect功能;不建议使用consumer API;

    0.10版本:
    引入Kafka Streams功能,bug修复;建议版本0.10.2.2;建议使用新版consumer API

    0.11版本:
    producer API幂等,事物API,消息格式重构;建议版本0.11.0.3;谨慎对待消息格式变化

    1.0和2.0版本:
    Kafka Streams改进;建议版本2.0;

    江湖经验:不要成为最新版本的小白鼠

    谢谢老师的讲解,收工。
    2019-06-14
    45
  • 小头针
    胡老师讲的这个版本,一下戳到我的痛处。讲一下我在生产环境中遇到的Kafka版本带来的坑。我参与到项目中一年,运行的版本是0.10.0.1,前半年还算稳定,偶尔出现进程假死问题。但是慢慢的生产环境数据量增加,假死频发,导致客户数据丢失,问题很严重。但是一直又没有证据证明这个版本确实存在问题,虽然官网上有提到,但是我们老大的意思还是要找到根本原因。妥所以开始对生产环境的进程进程监控,确实监控出此版本存在线程死锁问题。(妥从一个开发转变为现场运维人员)然后研究官网bug列表,选出0.11.0.3这个版本,至今稳定运行。

    再顺便讲一下选择这门课的原因,虽然项目已经高一段落,但是在整个项目过程中,一直处于哪里不会点哪里的状态,感觉一直还是没有真正的掀开Kafka的面纱。所以想系统的学习一下,听了几节课,之前有些知其然而不知其所以然的内容,似乎开始有点茅塞顿开了。
    2019-06-13
    38
  • QQ怪
    的确在工作中遇到了kafka版本不同导致消息格式不兼容问题,后来服务端和客户端统一版本号才解决,👍👍👍
    2019-06-13
    6
  • 少林寺三毛
    👍
    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
    3
  • 风中花
    每次看完就想打卡,以表示我还在坚持学习,如此看来,这个版本真不能忽视

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

    因此觉得写一篇版本的文章还是有点必要的。

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

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

    2019-06-13
    1
    2
  • 南辕北辙
    记得在刚开始学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
    2
  • 开水
    目前用的是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
    2
  • 一天到晚游泳的鱼
    清晰透彻的讲解
    2019-07-08
    1
  • 木偶人King
    找到0.10.2.2 和0.11.0.3
    http://mirrors.hust.edu.cn/apache/kafka/
    2019-07-03
    1
  • Chloe
    只想简单点赞👍,看了标题觉得版本号没有什么好聊了,看到才知道Kaka一路走来充满荆棘啊。感谢感谢!
    2019-06-14
    1
  • 燕子上
    一般的,版本都会选择比最新低一个minor version的版本。除非团队有人精通最新版(解决了旧版本的哪些痛点,没有增加其他新问题),才会使用。当然我说的是所有的版本选择。
    2019-06-14
    1
  • Geek_89bbab
    原来kafka在演进过程中这么坑啊
    2019-06-13
    1
  • 刘朋
    升级Kafka版本,
    首先,看业务在使用当前Kafka版本是否有问题,是否有性能问题,
    其次,当前版本特性是否满足业务需求,是否需要新的Kafka特性
    然后,查看该当前版本是否还在迭代更新,以及迭代周期
    最后,升级Kafka版开发人员所付出的人工成本和时间成本

    在升级版本时,不是一味的追求最新版本,而是在满足业务需求为前提条件下的还在社区维护更新的稳定版本.
    2019-06-13
    1
  • 云&龙
    既然新版本的老功能更加完善,而老版本又没有新版本的新功能,那为什么不无脑用最新的版本呢???反正用老版本也没有新功能。

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

    2019-06-13
    1
  • 高志强
    老师kafka的版本号,可以用程序代码输出么?怎么写的呢

    作者回复: 目前使用clients端API无法获取。。。。

    2019-12-06
  • 蜗牛
    "如果你依然在使用 0.10 大版本,我强烈建议你至少升级到 0.10.2.2 然后使用新版本 Consumer API。", 关于这句话有点疑问,如何使用新版本 consumer api呢? 比如 golang版的kafka 客户端库, 是我只需要更改一下调用方式就好了? 还是说我需要 更新这个golang 客户端库使其里面支持 新版consumer api呢?

    作者回复: golang的客户端到底使用的是新版本consumer还是老版本的consumer需要去到对应的官网上确定:)

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

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

    2019-09-22
  • miwucc
    版本号坑多的很啊,比如心跳是否采用业务线程,是否支持发送者ack机制啊等等,坑了我很多当时。。
    2019-09-14
收起评论
43
返回
顶部