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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM