日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

Kafka消息格式及多版本支持

發布時間:2023/12/15 综合教程 64 生活家
生活随笔 收集整理的這篇文章主要介紹了 Kafka消息格式及多版本支持 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

筆者所在的項目,需要往kafka內推送消息,供多方消費者使用。由于實際的Kafka服務端版本不一,且kafka不同版本的消息格式不同,因此java客戶端(發送消息/接收消息方,以下簡稱“客戶端”)的package下需要同時支持多個版本的Kafka。

Kafka消息格式

目前Kafka有三種消息格式,由于各個消息格式有不同的功能及性能特點,不同版本之間進行通信可能會導致發送或接受失敗,且會造成性能上的損失,因此服務端和客戶端的消息格式需要保持一致。

這里依據消息格式(magic),將具體支持的kafka版本大致分為三類:

消息格式 對應Kafka版本 描述
v0 0.8~0.9 最早的消息格式
v1 0.10.0.0~0.10.2.2 從0.10.0.0版本開始,增加了時間索引文件(0.10.1.0版KafkaConsumer開始提供offsetsForTimes接口,可根據時間戳消費數據
v2 0.11.0.0~2.0+ 0.11.0.0版本及以上的消息格式(magic)為v2;此范圍內的版本可以通過只配置Broker地址,實現topic的創建/刪除/修改。從2.0.0版本開始,后續的kafka版本放棄了對Java7的支持。因此,為了支持高版本kafka client,java的jdk版本需要升至1.8(0.9及后續版本均支持Java 8)

客戶端版本劃分

想要支持0.9以上的所有版本的kafka服務端,只需要在客戶端引入三類消息格式的kafka包即可。

大專欄 Kafka消息格式及多版本支持 - 邊邊大神的博客

在0.10.1.0版本之前,Kafka服務器端和客戶端版本之間的兼容性是“單向”的,即高版本的broker可以處理低版本client的請求;
反過來,低版本的broker不能處理高版本client的請求。

0.10.1.0之前的v0和v1選擇當前范圍最小的版本,v2則隨機選擇任一版本即可。最終引入的三個客戶端版本為:0.9.0.0,0.10.0.0,2.1.0。
不過,這三個版本的包名及大部分類名是相同的,若直接在pom中引入,則java運行時將僅使用最高版本的包。
那么,如何解決同時支持多個版本的kafka客戶端呢?

java支持同名package的方法

同一java項目包內引入不同版本kafka client jar包的方法(此方法可引申至其他依賴包,不限于Kafka):

為每個kafka 依賴包創建一個maven項目,在pom文件中引入maven-shade-plugin插件,通過relocation將項目包名更改為新的名稱:


<relocation>
<pattern>org.apache.kafka</pattern>
<shadedPattern>test.kafka09</shadedPattern>
</relocation>

這樣,可以將0.9版本的org.apache.kafka重命名為ndc.kafka09,0.10版本的org.apache.kafka重命名為ndc.kafka10,以此類推。

java項目使用時,在pom文件中,將org.apache.kafka替換為test.kafka09;當java代碼中調用同一kafka接口時,可以通過不同的包名區分不同的實現版本。


總結

以上是生活随笔為你收集整理的Kafka消息格式及多版本支持的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。