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