Kafka消息格式的转变及不同版本的兼容性

Kafka消息格式的转变 https://blog.csdn.net/u013256816/article/details/80300225

简单来说分为三个版本:

v0:Kafka 0.10.0版本之前

v1:从0.10.0版本开始到0.11.0版本之前

 

 v1版本比v0版的消息多了个timestamp的字段

v2:从0.11.0版本开始

这个版本的消息相比于v0和v1的版本而言改动很大,同时还参考了Protocol Buffer而引入了变长整型(Varints)和ZigZag编码。

 

 生产环境上的kafka-clients版本为0.10.2.1,服务端版本为2.12-2.8.0,发现可以正常生产消费,不受影响。 

Kafka双向兼容

在Kafka 0.10.2.0之前,Kafka服务器端和客户端版本之间的兼容性是“单向”的,即高版本的broker可以处理低版本client的请求。反过来,低版本的broker不能处理高版本client的请求。由于升级client要远比升级broker简单得多,因此这个限制给很多用户带来了麻烦,甚至有很多人都不愿意去升级broker版本——毕竟无downtime的情况下正确升级Kafka服务器是个不小的挑战。自0.10.2.0版本开始,社区对这个问题进行了优化,0.10.2.0之后用户可以简单地升级client端代码到这个版本就可以很容易地实现与低版本Kafka服务器的交互了。

最近遇到了 kafka server 和 kafka-client 的兼容性问题。研发环境用的 kafka 集群是 2.0.0,而程序使用的 kafka-client 版本是 0.10.1.1,发现生产消息报错。将 kafka 集群的消息格式修改成了 0.10.2 后,问题解决。遂记录下 kafka 版本兼容的问题。

考虑到Java版本的client已经被广大用户直接使用了,社区也改写了Java clients底层的网络客户端代码,里面会自动地判断连接的broker端所支持client请求的最高版本,并自动创建合乎标准的请求。因此,对于FETCH请求和PRODUCE请求而言, 用户不用担心需要自己实现这些细节。

类别

作用

.index  偏移量索引文件

.log  日志文件

.snapshot  日志快照

.timeindex   时间戳索引文件

leader-epoch-checkpoint  用于副本同步的检查点文件

用脚本查看*.log消息内容

./kafka-run-class.sh kafka.tools.DumpLogSegments --files /bitnami/kafka/data/HaMonitor_DirectCompute-0/00000000000000092963.log  --print-data-log

posted @ 2022-04-15 15:48  danche123  阅读(1268)  评论(0编辑  收藏  举报