kafka的版本号与版本演进

5 篇文章 0 订阅

1、kafka版本命名规则:

在1.x之前的版本,基本遵循4位版本号,例如:0.8.2.2、0.9.0.1、0.10.0.0...

在1.x之后,kafka 全面启用了遵循 Major.Minor.Patch 的三位版本规则,其中Major表示大版本,通常是一些重大改变,因此彼此之间功能可能会不兼容;Minor表示小版本,通常是一些新功能的增加;最后Patch表示修订版,主要为修复一些重点Bug而发布的版本。例如:Kafka 2.1.1,大版本就是2,小版本是1,Patch版本为1,是为修复Bug发布的第1个版本。

2、官网下载:

官网下载地址:https://kafka.apache.org/downloads

打开官网,看到如下界面:

这里简单介绍一下,kafka_2.12中的2.12表示的scala的版本,因为Kafka服务器端代码完全由Scala语音编写。”-“后面的2.5.0表示的kafka的版本信息,遵循上面的命令规则。

注:Kafka新版客户端代码完全由Java语言编写,当然,不是Scala不行了,而是社区找来了一批Java程序员而已,而之前的Scala程序员隐退罢了。

3、kafka版本演进:

Kafka总共发布了7个大版本,分别是0.7.x、0.8.x、0.9.x、0.10.x、0.11.x、1.x及2.x版本。截止目前,最新版本是Kafka 2.5.0,也是最新稳定版本。

1)0.7版本:

这是个“上古”版本,只提供了基础的消息队列功能,还没有提供副本机制

2)0.8版本:

新增了如下几个重要特性:

  1. Kafka 0.8.0,增加了副本机制,至此Kafka成为了一个真正意义上完备的分布式高可靠消息队列解决方案;
  2. Kafka 0.8.2.0,consumer 的消费偏移位置 offset 由原来的保存在 zookeeper 改为保存在 kafka 本身(afka 定义了一个系统 topic,专用用来存储偏移量的数据);
  3. Kafka 0.8.2.0,引入了新版本Producer API:新版本Producer API有点不同,一是连接Kafka方式上,旧版本的生产者及消费者API连接的是Zookeeper,而新版本则连接的是Broker;二是新版Producer采用异步批量方式发送消息,比之前同步发送消息的性能有所提升。

新旧版本Producer API如下:

//旧版本
Producerkafka.javaapi.producer.Producer<K,V> 

//新版本
Producerorg.apache.kafka.clients.producer.KafkaProducer<K,V>

注:此版本的新版本producer api还不太稳定。

3)0.9版本:

Kafka 0.9 是一个重大的版本迭代,增加了非常多的新特性,主要体现在三个方面:

  1. 新版本Consumer API:Kafka 0.9.0使用java重写了新版Consumer API,使用方式也是从连接Zookeeper切到了连接Broker
  2. 安全方面:在0.9.0之前,Kafka安全方面的考虑几乎为0。Kafka 0.9.0 在安全认证、授权管理、数据加密等方面都得到了支持,包括支持Kerberos等;
  3. Kafka Connect:Kafka 0.9.0 引入了新的组件 Kafka Connect ,用于实现Kafka与其他外部系统之间的数据抽取。
     

注:此时的新版本Consumer api还不大稳定,而0.9.0版本的Producer API已经比较稳定了;

4)0.10.x版本:

Kafka 0.10 是一个重要的大版本,因为Kafka 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 版本。

5)0.11.x版本:

Kafka 0.11 是一个里程碑式的大版本,主要有两个大的变更:

  1. 从这个版本开始支持Exactly-Once 语义即精准一次语义,主要是实现了Producer端的消息幂等性,以及事务特性,这对于Kafka流式处理具有非常大的意义;
  2. Kafka 0.11另一个重大变更是Kafka消息格式的重构(对用户是透明的),主要为了实现Producer幂等性与事务特性,重构了投递消息的数据结构。这一点非常值得关注,因为Kafka 0.11之后的消息格式发生了变化,所以我们要特别注意Kafka不同版本间消息格式不兼容的问题。

注:这个版本中各个大功能组件都变得非常稳定了,应该算是目前最主流的版本之一。

6)1.x版本:

Kafka 1.x 更多的是Kafka Streams方面的改进,以及Kafka Connect的改进与功能完善等。但仍有两个重要特性:

  • 一是Kafka 1.0.0实现了磁盘的故障转移,当Broker的某一块磁盘损坏时数据会自动转移到其他正常的磁盘上,Broker还会正常工作,这在之前版本中则会直接导致Broker宕机,因此Kafka的可用性与可靠性得到了提升;
  • 二是Kafka 1.1.0开始支持副本跨路径迁移,分区副本可以在同一Broker不同磁盘目录间进行移动,这对于磁盘的负载均衡非常有意义。

7)2.x版本:

Kafka 2.x 更多的也是Kafka Streams、Connect方面的性能提升与功能完善,以及安全方面的增强等。一个使用特性,Kafka 2.1.0开始支持ZStandard的压缩方式,提升了消息的压缩比,显著减少了磁盘空间与网络io消耗。

4、关于客户端版本:

kafka 支持多个语言的客户端api,这里只关注 java 客户端。maven 的工程我们一般这样引入 kafka 客户端

<dependency>
	<groupId>org.apache.kafka</groupId>
	<artifactId>kafka_2.11</artifactId>
	<version>0.10.2.0</version>
</dependency>

这种会引入两个依赖jar,分别是

  • kafka-clients-0.10.2.0.jar
  • kafka_2.11-0.10.2.0.jar

前者是官方推荐的java客户端,后者是scala客户端。调用方式有所不同。如果确定不使用 scala api,也可以用下面这种方式只包含java版本的客户端。

<dependency>
	<groupId>org.apache.kafka</groupId>
	<artifactId>kafka-clients</artifactId>
	<version>0.10.2.0</version>
</dependency>

最后,给出一些建议:

  • 遵循一个基本原则,Kafka客户端版本和服务端版本应该保持一致,否则可能会遇到一些问题。
  • 根据是否用到了Kafka的一些新特性来选择,假如要用到Kafka生产端的消息幂等性,那么建议选择Kafka 0.11 或之后的版本。
  • 选择一个自己熟悉且稳定的版本,如果说没有比较熟悉的版本,建议选择一个较新且稳定、使用比较广泛的版本。

 参考:

https://www.jianshu.com/p/5bef1f9f74cd

http://www.louisvv.com/archives/2348.html

http://www.machengyu.net/tech/2019/09/22/kafka-version.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值