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 的元老级人物;

参考链接