一、Kafka版本定义规则
Kafka 1.0.0之前遵循4位版本号,比如Kafka 0.8.2.0、Kafka 0.11.0.3等。从1.0.0开始Kafka遵循 Major.Minor.Patch 的版本规则
- Major表示大版本,通常是一些重大改变,彼此之间功能可能会不兼容;
- Minor表示小版本,通常是一些新功能的增加;
- Patch表示修订版,主要为修复一些重点Bug而发布的版本。
二、Kafka版本演进
Kafka总共发布了7个大版本,分别是0.7.x、0.8.x、0.9.x、0.10.x、0.11.x、1.x及2.x版本。目前已经发展到了 2.6.x。
0.7.x版本
Kafka古董版本,只有基本的消息队列功能,没有消息副本机制,不建议使用。
0.8.x版本
重要特性:
- Kafka 0.8.0增加了副本机制,
- Kafka 0.8.2.0引入了新版本Producer API。
新旧版本Producer API如下:
旧版本Producer kafka.javaapi.producer.Producer
新版本Producer org.apache.kafka.clients.producer.KafkaProducer
新版本Producer API特点:
- 在Kafka连接方式上,旧版本的生产者及消费者API连接的是Zookeeper,而新版本则连接的是Broker;
- 新版Producer采用异步方式发送消息,比之前同步发送消息的性能有所提升。但此时的新版Producer API尚不稳定,不建议生产使用。
0.9.x版本
Kafka 0.9 是一个重大的版本迭代,增加了非常多的新特性,主要体现在三个方面:
- 安全方面:在0.9.0之前,Kafka几乎无安全方面的考虑。 0.9.0 版本在安全认证、授权管理、数据加密等方面都得到了支持,包括支持Kerberos等。
- 新版本Consumer API:Kafka 0.9.0 重写并提供了新版消费端API,使用方式也是从连接Zookeeper切到了连接Broker,但是此时新版Consumer API也不太稳定、存在不少Bug;而0.9.0版本的Producer API已经比较稳定了,使用问题不大。
- Kafka Connect:Kafka 0.9.0 引入了新的组件 Kafka Connect ,用于实现Kafka与其他外部系统之间的数据抽取。
0.10.x版本
0.10.0.0版本 引入了 Kafka Streams,使Kafka不再仅是一个消息引擎,而是往一个分布式流处理平台方向发展。
0.10 大版本包含两个小版本:0.10.1 和 0.10.2,它们的主要功能变更都是在 Kafka Streams 组件上。
自 0.10.2.2 版本起,新版本 Consumer API 已经比较稳定了,而且 Producer API 的性能也得到了提升,因此对于使用 0.10.x 大版本的用户,建议使用或升级到 Kafka 0.10.2.2 版本。
0.11.x版本
Kafka 0.11 主要有两个大的变更,
- 开始支持 Exactly-Once 语义即精准一次语义,主要是实现了Producer端的消息幂等性,以及事务特性,这对于Kafka流式处理具有非常大的意义。
- Kafka消息格式的重构,Kafka 0.11主要为了实现Producer幂等性与事务特性,重构了投递消息的数据结构。这一点非常值得关注,因为Kafka 0.11之后的消息格式发生了变化,所以我们要特别注意Kafka不同版本间消息格式不兼容的问题。
1.x版本
Kafka 1.x 更多的是Kafka Streams方面的改进,以及Kafka Connect的改进与功能完善等。但仍有两个重要特性,
- 1.0.0实现了磁盘的故障转移,当Broker的某一块磁盘损坏时数据会自动转移到其他正常的磁盘上,Broker还会正常工作,这在之前版本中则会直接导致Broker宕机,因此Kafka的可用性与可靠性得到了提升;
- 1.1.0开始支持副本跨路径迁移,分区副本可以在同一Broker不同磁盘目录间进行移动,这对于磁盘的负载均衡非常有意义。
2.x版本:
Kafka 2.x 更多的也是Kafka Streams、Connect方面的性能提升与功能完善,以及安全方面的增强等。Kafka 2.1.0开始支持ZStandard的压缩方式,提升了消息的压缩比,显著减少了磁盘空间与网络io消耗。
三、Kafka版本建议
1. 遵循一个基本原则,Kafka客户端版本和服务端版本应该保持一致,否则可能会遇到一些问题。
2. 根据是否用到了Kafka的一些新特性来选择,假如要用到Kafka生产端的消息幂等性,那么建议选择Kafka 0.11 或之后的版本。
3. 选择一个自己熟悉且稳定的版本,如果说没有比较熟悉的版本,建议选择一个较稳定的版本