05 | 聊聊Kafka的版本号
05 | 聊聊Kafka的版本号
讲述:胡夕
时长11:53大小10.85M
Kafka 版本命名
Kafka 版本演进
小结
开放讨论
赞 29
提建议
精选留言(64)
- 木卫六2019-06-14版本号: 大 + 小 + 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; 江湖经验:不要成为最新版本的小白鼠 谢谢老师的讲解,收工。展开共 1 条评论118
- 小头针2019-06-13胡老师讲的这个版本,一下戳到我的痛处。讲一下我在生产环境中遇到的Kafka版本带来的坑。我参与到项目中一年,运行的版本是0.10.0.1,前半年还算稳定,偶尔出现进程假死问题。但是慢慢的生产环境数据量增加,假死频发,导致客户数据丢失,问题很严重。但是一直又没有证据证明这个版本确实存在问题,虽然官网上有提到,但是我们老大的意思还是要找到根本原因。妥所以开始对生产环境的进程进程监控,确实监控出此版本存在线程死锁问题。(妥从一个开发转变为现场运维人员)然后研究官网bug列表,选出0.11.0.3这个版本,至今稳定运行。 再顺便讲一下选择这门课的原因,虽然项目已经高一段落,但是在整个项目过程中,一直处于哪里不会点哪里的状态,感觉一直还是没有真正的掀开Kafka的面纱。所以想系统的学习一下,听了几节课,之前有些知其然而不知其所以然的内容,似乎开始有点茅塞顿开了。展开共 1 条评论103
- QQ怪2019-06-13的确在工作中遇到了kafka版本不同导致消息格式不兼容问题,后来服务端和客户端统一版本号才解决,👍👍👍22
- Chloe2019-06-14只想简单点赞👍,看了标题觉得版本号没有什么好聊了,看到才知道Kaka一路走来充满荆棘啊。感谢感谢!20
- 风中花2019-06-17每次看完就想打卡,以表示我还在坚持学习,如此看来,这个版本真不能忽视
作者回复: 嗯嗯,之前在做咨询的时候发现过两个问题:1. 很多人碰到的问题实际上已经是新版本解决的bug;2. 客户端/服务器端版本不一致导致的性能问题 因此觉得写一篇版本的文章还是有点必要的。
共 2 条评论15 - 开水2019-06-13目前用的是hdp2.4.2内嵌版本。应该是apache版本的0.8.2.0。遇到很多问题都很难找到解决方法。比如前几天遇到了replicaFetcherThread oom的问题,网上根本找不到什么正经的解释。但又不能一味的调高jvm参数。老大说现在生产稳定就行了,暂时不要升级了,改代码耗时切面对的问题未知。期待老大能看到这篇文章,升级到0.11.0.3。
作者回复: 嗯嗯,可以查一下ZooKeeper中是否存在大量session超时的情况。不过还是建议升级吧,听着很像是一个已知的bug。如果暂时不能升级,可以尝试调低replica.fetch.max.bytes的值试试。
12 - King Yao2019-06-13我是一名运维,在维护工作环境维护几十台Kafka。最近打算扩容。我有三个问题请教: 1.kafka如何做压力测试,它的参考主要指标是什么,比如QPS,最大连接数,延迟等等。 2.扩容如何做到平滑扩容,不影响原业务 3.kafka有什么好的监控软件。
作者回复: 1. Kafka提供了命令行脚本可以执行producer和consumer的性能测试,主要指标还是TPS,延时 2. 增加broker很简单,也不会对现有业务有影响。关键是做好迁移计划——比如避开业务高峰时刻,如果迁移对业务影响最小
共 3 条评论11 - 平叔叔2019-09-22不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致 另外即使你升到了 0.8.2.2,也不要使用新版本 Producer api 不是互相矛盾吗?
作者回复: 不矛盾。保持版本一致是任何时候都要尽力保持的。如果你依然使用0.8.x版本,那么最好使用Scala producer,而不是java producer
共 2 条评论7 - 南辕北辙2019-06-13记得在刚开始学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展开
作者回复: 嗯嗯,请求版本号偏底层的设计了,一般用户用不到。其实客户端和服务器端版本的差异很大一部分也是请求版本号的差异
6 - 莫问流年2019-06-13目前公司kafka都是由运维团队统一维护的,开发人员需要时向运维人员申请kafka服务器端实例。加上Spring Boot项目对Kafka客户端的自动配置机制,导致大部分开发人员对Kfka的版本缺乏足够的了解。这种对开发人员完全透明的方式,虽然一定程度上减轻了开发人员的负担,但是也为开发人员深入理解Kafka设置了一定障碍。作为开发团的一员,我希望结合老师的课程和Kafka在公司项目的实践,更深入的理解Kafka的核心原理和设计思想。展开7
- 少林寺三毛2019-06-13👍6
- 疯琴2019-06-13美音最正的老师没有之一。有两个问题:1 文章前面说某些旧版本的服务端不适用新版本的客户端,文末又说二者应该保持一致,感觉是矛盾的,应该是我没理解清楚,还请说明 2 服务端版本靠编号就可以识别,而客户端是怎么定义新旧版本的呢?谢谢。
作者回复: 1. 其实我也没太明白您的意思:) “旧版本的服务端不适用新版本的客户端 所以建议保持一致”,不是挺自然的结论吗。。。。 2. 客户端也有版本号,和broker端是一样的。比如Java客户端,如果我们使用Gradle的话,就类似于这样: compile group: 'org.apache.kafka', name: 'kafka-clients', version: '2.2.1'
共 2 条评论6 - 木偶人King2019-07-03找到0.10.2.2 和0.11.0.3 http://mirrors.hust.edu.cn/apache/kafka/3
- bee2019-06-13请问胡老师, RESTful的幂等性是无论调用多少次都不会有不同结果的HTTP 方法。也就是说不会去改变资源。这里的幂等性虽然是确保了单个partition的数据不会重复,但是更改了资源。这样说会有冲突吗?
作者回复: 这里的幂等性也没有你所谓的更改资源。当producer发送了一条重复消息时Broker端会拒绝接收,而不是在后面自己做去重
共 2 条评论3 - 火力全开2020-02-14“最后还有个建议,不论你用的是哪个版本,都请尽量保持服务器端版本和客户端版本一致,否则你将损失很多 Kafka 为你提供的性能优化收益。” —— KIP-35 - Retrieving protocol version 这个特性不是可以让支持的client适配多个不同版本的broker吗?
作者回复: 兼容性是一方面。因版本差异导致消息格式转换会丧失Zero Copy
共 2 条评论3 - miwucc2019-09-14版本号坑多的很啊,比如心跳是否采用业务线程,是否支持发送者ack机制啊等等,坑了我很多当时。。2
- jacke2019-06-22胡老师,问下: "如果你不能升级大版本,我也建议你至少要升级到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。我是这个意思。。。。
3 - 刘朋2019-06-13升级Kafka版本, 首先,看业务在使用当前Kafka版本是否有问题,是否有性能问题, 其次,当前版本特性是否满足业务需求,是否需要新的Kafka特性 然后,查看该当前版本是否还在迭代更新,以及迭代周期 最后,升级Kafka版开发人员所付出的人工成本和时间成本 在升级版本时,不是一味的追求最新版本,而是在满足业务需求为前提条件下的还在社区维护更新的稳定版本.展开2
- 云&龙2019-06-13既然新版本的老功能更加完善,而老版本又没有新版本的新功能,那为什么不无脑用最新的版本呢???反正用老版本也没有新功能。
作者回复: 如果是新环境,也许可以采用最新版本。但如果是要升级的话就要考虑这些问题了
3 - 布兰特2020-09-01胡老师,如果使用kafka 0.11, Flink 1.10版本的前提下, kafka -> Flink -> kafka stream -> HBase 这样的一个数据流向,是不是可以实现 exactly once ??
作者回复: Flink -> Kafka Streams? 一般没有这样的通路吧,另外Kafka Streams也没法到HBase
1