Kafka版本变迁以及版本验证

版本变化:

Kafka总共发布了七个个大版本,分别是0.7.x、0.8.x、0.9.x、0.10.x、0.11.x、1.x及2.x版本。截止2021.04月,最新版本是Kafka 2.7,也是最新稳定版本,建议升级到2.6.1或2.7.0版本.

1.kafka版本号说明:

以kafka_2.13-2.7.0为例,其中2.13标识编译kafka集群的scala版本号,kafka的服务端编码语言为scala,一种更加偏向函数式编程的jvm语言,相对java来说,掌握难度较高;2.7.0标识kafka真正的版本号。kafka的版本号从1.0开始由四位版本号改为了三位,既类似0.9.0.0-->1.0.0。

0.7.x-0.11.x:

kafka基于消息队列的功能基本完善

1.x-2.x:

持续优化kafka的消息队列功能,但变化不大,主要优化kafka stream相关特性.

2.版本特性详细说明:

0.7.x:

上古版本,仅提供基本的消息队列功能,且无副本机制.不做讨论,建议立即升级.

0.8.x

1.增加副本机制

2.引入新版的producer但尚不稳定,bug较多

3.更新了消息的数据结构,把数据偏移量从物理偏移改为逻辑偏移量,在压缩处理偏移量时,会略微加重cpu的负担.

不做详细讨论,建议立即升级.

0.9.x.x(2015年底发布):

1.增加基础的安全认证/权限功能

2.使用java重写了新版的消费者api,去除了zookeeper的依赖

3.新增Kafka Connect组件用于实现高性能数据抽取

4.新版producer开始稳定

5.consumer仍然不稳定,bug较多.

6.kafka-topics.sh脚本弃用,推荐使用kafka-configs.sh

7.kafka-consumer-offset-checker.sh弃用,推荐kafka-consumer-groups.sh

8.不再支持java1.6和scala2.9

9.增加配额限制,既多租户控制.

0.10.0.x:

1.引入 Kafka Streams,正式升级成分布式流处理平台,但此时该功能尚不能线上使用, 0.10.2.2 中新版消费者开始稳定.

2.消息格式发生变动,增加了时间戳,此版本升级可能会引起消息格式转换,然后由于转换可能会导致kafka的0拷贝机制失效,表现为生产环境的性能下降.故该版本升级 需要谨慎操作,确保客户端和服务端版本号一致.

变动前格式:

 

变动后格式,在record中新增了timestamp字段:

3.新增kafka streams客户端,此客户端仅适用于服务端版本0.10.x及以上集群.

0.10.1.x:

1.日志保留时间判断时从日志段的最后修改时间改为日志段中消息的最大时间戳。

2.日志滚动时,从基于日志段的创建时间改为基于新消息中的时间戳做判断,既段中第一条消息的时间戳为T,则在新消息时间戳 >= T + log.roll.ms时发生滚动.

3.Kafka Streams升级到0.10.1.x,向下不兼容

4.新版java consumer支持从后台线程维持心跳,可防止consumer阻塞导致的下线及reblance,新增了几个与此相关的时间配置,详见官网.新增支持在分区上按照时间戳搜索offset

0.10.2.x

1.该版本的客户端可支持与0.10.0及以上的集群通信.

2.服务端支持0.8.x及上的客户端.

0.11.x.x(2017年6月)

1.提供幂等性 Producer API.幂等性用于支持生产者单次会话中在同一个分区上实现exactly once语义.

2.提供事务支持,但存在少量bug.

3.重构了kafka的消息格式,发生重大变动,总的来讲,新的消息格式,在消息批量发送时更加节约空间,消息体value越大越节约时间,主要思想是对时间字段和数字字段采用了新的记录方法,当数字不是特别大的时候,原来用int标识的字段,只占用1-2个字节即可.消息位移改为起始的逻辑位移+本批消息的相对位移等各种手段,有效的降低消息大小.

顺带提下kafka的消息压缩:

inner:生产者的原始批量消息
wrapper:broker存储消息
wrapper中的offset为inner中的最大offset,为partion的绝对位移(非磁盘物理地址,逻辑位移),并保存为相对位移,从0开始

4.客户端需要升级到该版本,旧的被弃用.

5.默认禁用unclean leader选举(leader崩溃时从非isr的普通副本中选举leader),既默认必须从isr副本中选举新的leader,可配置unclean.leader.election.enable=true支持unclean leader

6.生产者配置block.on.buffer.full,metadata.fetch.timeout.ms并timeout.ms被删除

7.自动创建主题时,集群broke数量不满足副本因子offsets.topic.replication.factor配置时,将创建失败.

8.当使用消息压缩功能时,提高默认压缩块的大小.总之修改了压缩相关的几个配置用于提高性能.

9.kafka stream相关的升级,升级时尽量把客户端版本和服务端保持一致

建议最起码升级到该版本.

1.0.x

1.默认开启主题删除功能.若是不想开启则delete.topic.enable=false.主题删除后会删除数据并且不可逆.

2.对于支持时间戳搜索(如果找不到某个分区的偏移量)的主题,该分区现在包含在搜索结果中,且偏移量值为空。以前,该分区未包含在地图中。进行此更改是为了使搜索行为与不支持时间戳搜索的主题一致.

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

4.添加了KafkaStorageException,它是可重试的异常。如果客户端的FetchRequest或ProducerRequest的版本不支持KafkaStorageException,则会在响应中将KafkaStorageException转换为NotLeaderForPartitionException.

5.在默认的JVM设置中,-XX:+ DisableExplicitGC被-XX:+ ExplicitGCInvokesConcurrent代替。在某些情况下,这有助于避免在通过直接缓冲区分配本机内存的过程中出现内存不足异常.

6.java客户端和工具现在可以接受任何字符串作为客户端ID

7.kafka-consumer-offset-checker.sh被删除.使用kafka-consumer-groups.sh获取消费者群组的详细信息.

8.kafka stream做了相应升级.

1.1.x

1.kafka默认日志组件依赖修改,用户可以选择slf4j logback等.

2.增强kafka stream

3.增强kafka connect,支持消息头

2.0.0

1.offset默认保留时间从1天改为7天

2.不再支持java7,最低支持到java8.

3.安全相关修改

4.客户端scala相关一些不再支持或已被删除,更推荐java相关的客户端

5.Connect组件默认json转换器.

6.其他一些细节修改.

2.1.x:

改动了一些细节

开始支持ZStandard的压缩方式,提升消息压缩比,显著减少磁盘空间和网络io消耗.

2.2.x

1.Kafka Streams 2.2.1需要0.11或更高的消息格式,并且不适用于较旧的消息格式

2.从此版本开始必须显式设置消费者组id,否则将无法订阅主题和提交offset.建议组id不要使用空字符串.

3.kafka-topics.sh可以直接连接--bootstrap-server,旧的--zookeeper选项仍然可用.

2.3.x

1.kafka connect引入新的基于增量协作式重新平衡的重新平衡协议.

2.消费者引入静态成员,以减少滚动升级期间的reblance.

3.Kafka Streams 2.3.0需要0.11或更高的消息格式,并且不适用于较早的消息格式

2.4.x

1.zookeeper依赖升级到3.5.7

2.该bin/kafka-preferred-replica-election.sh命令行工具已被弃用。已由代替bin/kafka-leader-election.sh

3.生产者默认分区策略改为粘性分区策略,这意味着具有空键且没有分配分区的特定主题的记录将被发送到同一分区,直到准备好发送批次为止。创建新批次时,将选择一个新分区。这样可以减少产生的延迟,但是在极端情况下,可能会导致记录在分区之间的分布不均。通常,用户不会受到影响,但是这种差异在测试和其他情况下会在很短的时间内生成记录可能会很明显。

4.优化consumer重平衡相关特性.

2.5.x-2.7.x

1.简化kafka事务的扩展实现,改进exactly once语音.

2.其他细节修改

综述:

从上面的版本迭代可以看出主要是以下几个版本可以作为分水岭:

0.11.x拥有的特性:

传统消息队列及副本容灾功能

支持exactly once 恰好一次语义

事务支持.

kafka stream支持.

consumer 消息拉取线程和心跳线程分开

截止到0.11.x,kafka作为传统的发布订阅功能基本完善,建议至少升级到该版本.

1.0.x

新增磁盘故障转移

新增跨副本路径迁移

2.x

2.1.x支持ZStandard的压缩,提高吞吐性能

优化生产者和消费者

其中2.6.1修复了2.6.0的41个问题,建议生产环境可升级到2.6.1或2.7.0。

 

posted @ 2022-04-14 11:54  danche123  阅读(3940)  评论(2编辑  收藏  举报