kafka 的全球流行让程序员的圈子里多了一项装逼的手段, 如果对 kafka 的各种冷门细节知识都了如指掌, 一起聊天的人一定会认为你是一个浸淫 kafka 多年的老司机, 钦佩之情油然而生!
为了装逼, 再琐碎的细节都要在这篇文章里一起吃掉, 更何况这个过程本身也充满乐趣呢!
kafka 重要版本演进时间线
版本 | 发布时间 | 主要功能 | 主要缺点 | |
---|---|---|---|---|
0.7 | 2011.07 | 第一个对外版本, 以新型高性能 mq 的角色亮相 | 没有副本机制, 无法在生产环境使用 | |
0.8 | 2013.11 | (1) 增加了副本机制, 实现了真正意义上的高可用 mq (2) 进入了 Apache 顶级项目 |
只能使用老版本的 API, 需要指定 zk 地址 | |
0.8.2 | 2015.01 | (1) 使用 java 重写了新版的 producer api, 指定 broker 地址而非 zk 地址 (2) producer 与 broker 代码解耦, 独立出依赖包 |
新版本 producer api bug 非常多 | |
0.9 | 2015.11 | (1) 安全认证 / 权限功能 (2) 租户配额限制 (3) 使用 java 重写了新版 consumer api (4) 引入了 kafka connect (5) consumer commit offset 从 zk 迁移到 topic:__consumer_offsets |
新版本 consumer api bug 非常多 | |
0.10 | 2016.05 | (1) 引入了 kafka streams (2) 消息格式中增加了 timestamp |
暂无 | |
0.11 | 2017.06 | (1) 引入了幂等 producer api (2) 引入了事务 api (3) 优化重构了消息格式: V2 版本, 之前的则称为 V1 版本 |
暂无 | |
1.0 | 2017.11 | (1) 标志 kafka 各组件已经稳定的里程碑 (2) 对 kafka streams 作功能升级 |
暂无 | |
2.0 | 2018.06 | kafka streams 的各种功能改进 | 暂无 | |
2.8 | 2021.04 | 全新引入了 KRaft, 可以不再依赖 zookeeper | 暂无 | |
4.0 | 2025.03 | (1) 用 KRaft 彻底替代了 zookeeper, 移除了对 zk 的依赖 (2) 引入增量式消费者重平衡逻辑 |
暂无 |
kafka 各个大版本下的推荐版本号
- 0.7: 不推荐使用, 没有副本机制, 无法做到高可用, 不能线上部署;
- 0.8: 推荐使用 0.8.2.2, 推荐使用该版本下的老版 producer api, 但不推荐使用该版本下的新版 producer api;
- 0.9: 推荐使用 0.9.0.1, 推荐使用该版本下的新版 producer api, 但是不推荐使用该版本下的新版 consumer api;
- 0.10: 推荐使用 0.10.2.2, 推荐使用该版本下的新版 producer api 与新版 consumer api, 同时该版本修复了一个可能导致 producer 性能降低的 bug;
- 0.11: 推荐使用 0.11.0.3, 该版本是 1.0 正式版本之前比较稳定完善的版本了, 不想使用正式版本的推荐使用该版本号;
- 1.0 / 2.0: 推荐使用 2.0, kafka streams 功能更完善强大;
kafka 运维管理工具
- kafka manager: 雅虎开源的 kafka 集群管理工具;
- kafka eagle: 号称是比 kafka manager 更好用的集群管理工具;
- metrics reporter: nl.techop.kafka.KafkaHttpMetricsReporter;
- kafka monitor
最想问 kafka 作者的几个问题
kafka 为什么叫 kafka?
kafka 的主要作者 Jay Kreps 曾提到, 因为 Kafka 系统的写性能很强, 所以以一个作家的名字命名该系统应该挺酷的; Jay 当时正好读过奥匈帝国作家 (今捷克) Franz Kafka 的《变形记》, 很是喜欢, 遂以 kafka 命名该系统, 也是作为对这位命运凄惨的作家的一个纪念;
kafka 为什么用 scala 实现?
因为 Jay Kreps 当年正在学习 scala, 所以顺手就用 scala 实现了 kafka; 另外, 因为其是一个 scala 新手, 所以写出来的代码风格依然偏向于 java, 导致 java 程序员都能比较轻松得看懂 kafka 源码;
kafka 为什么没有引入 netty 作为网络框架而是自己做了封装?
这与 kafka 的历史有一定关联: kafka 在 0.8.2 推出独立的新 producer client api 之前, server 与 client 是绑在一起的一个大的 jar 包, 为了避免使用者增加不必要的依赖, 导致可能发生的令人头痛的版本冲突处理, kafka 的作者尽可能得减少了第三方工具的依赖, 包括 netty, curator 等流行的框架, 转而全部由自己原生实现;
听说 kafka 的主要作者里有华人的身影?
kakfa 早期的三位作者中, 有一个叫饶军的中国人, 2014 年和另外两位 kafka 大佬一起从 linkdin 离职创办了 Confluent 公司, 是 kafka 的元老级人物;