在Kafka 0.10.2.0以前,Kafka服務器端和客戶端版本之間的兼容性是「單向」的,即高版本的broker能夠處理低版本client的請求。反過來,低版本的broker不能處理高版本client的請求。因爲升級client要遠比升級broker簡單得多,所以這個限制給不少用戶帶來了麻煩,甚至有不少人都不肯意去升級broker版本——畢竟無downtime的狀況下正確升級Kafka服務器是個不小的挑戰。bootstrap
自0.10.2.0版本開始,社區對這個問題進行了優化——對於低版本broker + 高版本client(0.10.2.0)的環境而言,如今用戶能夠運行命令先查看當前broker支持的協議版本,而後再選擇broker支持的最高版本封裝請求便可。命令格式以下(在client端運行該命令):api
bin/kafka-broker-api-version.sh --bootstrap-server localhost:9092服務器
下面兩張圖分別表示查看0.10.2.0和0.10.0.1的broker所支持各協議的版本範圍,注意我標紅了FETCH請求以示區別:網絡
左邊的圖鏈接的是0.10.2.0版本的broker,能夠看到該版本的Kafka服務器支持的FETCH請求版本範圍是0到3,默認使用3;而右邊的圖連入的是0.10.0.1的Kafka,它只支持0~2版本的FETCH請求。所以你在編寫客戶端程序時須要根據這張表來確認broker支持的請求的最高版本,這樣就間接實現了「低broker處理高client請求」的兼容性目標。優化
考慮到Java版本的client已經被廣大用戶直接使用了,社區也改寫了Java clients底層的網絡客戶端代碼,裏面會自動地判斷鏈接的broker端所支持client請求的最高版本,並自動建立合乎標準的請求。所以,對於FETCH請求和PRODUCE請求而言, 用戶不用擔憂須要本身實現這些細節。spa
總之,自0.10.2.0以後用戶能夠簡單地升級client端代碼到這個版本就能夠很容易地實現與低版本Kafka服務器的交互了。server