Kafka 版本该怎么选择总结

买了极客时间胡夕老师的课,上面讲到kafka各版本之间的差异,在这里总结一下,时机应用的时候该如何去选择kafka版本。

Kafka 版本命名

kafka版本已经更新到2.5了

我们看下kafka版本号的组成kafka_2.12-2.5.0.tgz前面的2.12表示的是kafka开发语言Scala的版本,后面的2.5.0才是kafka版本。

作为Javaer Scala我们都熟悉,JVM系的语言。设计上很有优势,以至于java的很多新特性都跟Scala靠拢,比如Lambda表达式,函数式编程等。现在kafka客户端都用java语言开发了。据说是kafka团队进了一批javaer的原因。

言归正传,kafka_2.12-2.5.0.tgz我们说2.5.0是kafka版本号,前面的2表示大版本号(Minor Version),5表示修订版本号(Patch)

Kafka 版本演进

Kafka 目前总共演进了 7 个大版本,分别是 0.7、0.8、0.9、0.10、0.11、1.0 和 2.0,其中的小版本和 Patch 版本很多。哪些版本引入了哪些重大的功能改进?

0.7 版本

上古版本,没接触过,也没用过,相信现在也很少有人在用了。因为它只提供了消息队列的功能,连副本都没有。所以对古老的东西我们心存敬意就好了。

0.8版本

引入了副本机制,这是kafka变成真正的高可用分布式消息队列解决方案。消费者,生产者用的还是老API,老API有个特征就是需要指定Zookeeper地址,而非broker地址。生产者API用的是同步消息机制,可见吞吐量肯定很一般。虽然也支持了异步方式,但会导致消息的丢失。

0.8.2.0:引入了新版本 Producer API,即需要指定 Broker 地址的 Producer。

0.8.2.2:建议使用该版本老的消费者API,因为比较稳定。不建议使用改版本新的生产者API,我们不但要对古老的东西表示敬畏,还要对新的东西保持怀疑,因为新代表着不稳定,代表着BUG。

0.9版本

2015 年 11 月更新了重量级版本0.9.0.0.

  1. 加了基础的安全认证 / 权限功能
  2. 用 Java 重写了新版本消费者 API
  3. 引入了 Kafka Connect 组件用于实现高性能的数据抽取

建议:

  1. 使用该版本新的Producer API,因为已经迭代的比较稳定了
  2. 不建议使用该版本新的Consumer API,因为还不稳定。

0.10版本

这是一个里程碑式的版本发布,因为该版本引入了 Kafka Streams,kafka成为了真正的分布式流处理平台。

0.10 大版本包含两个小版本:0.10.1 和 0.10.2,这两个版本的更新都在kafka Streams上,如果当做消息引擎,并没有做什么改变。

建议:

0.10.2.2版本我们终于等来了稳定的新Consumer API,而且Producer API也修复了一些影响性能的bug。所以强烈建议升级该版本的新Consumer API和Producer API。

0.11版本

2017 年 6 月发布了0.11版本,该版本有两个重量级更新:

  1. 提供幂等性 Producer API 以及事务(Transaction) API
  2. 对 Kafka 消息格式做了重构。

这两个更新,我觉得第一个更加让人振奋一点。毕竟 Producer 实现幂等性以及支持事务都是 Kafka 实现流处理结果正确性的基石。没有它们,Kafka Streams 在做流处理时无法向批处理那样保证结果的正确性。同样是新的,事务 API 有一些 Bug,不算十分稳定。另外事务 API 主要是为 Kafka Streams 应用服务的,实际使用场景中用户利用事务 API 自行编写程序的成功案例并不多见。

第二个改变。由于消息格式的改变,引起消息格式转换带来的性能问题,所以要谨慎选择该版本。如果选择该版本建议选择0.11.0.3版本,因为该版本的消息引擎功能已经非常完善了。

1.0 和 2.0 版本

两个大版本主要还是 Kafka Streams 的各种改进,在消息引擎方面并未引入太多的重大功能特性。

总结:要对古老版本心存敬意,敬而远之。对新版本不要做测试bug的小白鼠。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章