一、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。竟然成功了!
所以,問題出在不同版本的數據不兼容。降級前要清數據,升級前務必參考官方文檔。否則坑死你不償命~
