一、Bug背景

      因业务需要,我们部署了两个Kafka集群。Kafka集群A的版本号为:0.11.0.1,Kafka集群B的版本号为0.9.0.1。

      因两个Kafka集群的版本号不一致,尝试了多种解决方案,发现总有一个集群出不来数据,无法互相兼容。

 

二、Kafka的客户端版本号必须与服务端版本号一致

  • 客户端v0.11.0.1的Maven配置

< dependency >

 < groupId >org.apache.kafka</ groupId >

 < artifactId >kafka-clients</ artifactId >

 < version >0.11.0.1</ version >

</ dependency >

  • 客户端v0.9.0.1的Maven配置

< dependency >

 < groupId >org.apache.kafka</ groupId >

 < artifactId >kafka-clients</ artifactId >

 < version >0.9.0.1</ version >

</ dependency >

 

先尝试使用客户端v0.11.0.1,发现集群B的消费者程序无法拉出数据。再尝试使用客户端v0.9.0.1,发现集群A无法拉取出数据。

显然, 同一个Maven工程无法依赖同一个组件不同版本的JAR包。

WTF,先泪奔一会儿。泪奔完还得想办法填这个坑。

首先脑洞一个办法, 先从官网下载v0.9.0.1版本的Kafka源码,再修改其包名和groupId,再编译打包。但最终没有选择这个方案。

 1. Kafka源码使用Gradle管理,我的本机没有Gradle环境,不想折腾下去了。就是懒!( ╯□╰ )

 2. 包名不同,类名相同,很容易混用。说不定未来就坑到自己或同事了!

集群B是个老集群了,上面有很多业务。短期内升级是不可能了,那只能选择 将集群A降级为v0.9.0.1

 

三、降级前要清空老数据,升级时参考官方文档的数据兼容方案

集群A降级后,消费者程序一直拉不出数据,新建topic也不行。查问题,各种猜测,折腾了一整天仍未解决。。

后来干脆通知我司的运维GG清空所有老数据,再重装Kafka。竟然成功了!

所以,问题出在不同版本的数据不兼容。降级前要清数据,升级前务必参考官方文档。否则坑死你不偿命~