當前位置:
首頁 > 知識 > Kafka-Record消息格式

Kafka-Record消息格式

註:本文依賴於kafka-0.10.0.1-src

kafka消息格式是經過多個版本的演變的,本文只說0.10.0.1版本的消息格式。

消息格式如圖1所示:

圖1

CRC:用於校驗消息內容。佔4個位元組

MAGIC:用於標識kafka版本,默認是1。佔1個位元組

ATTRIBUTES:用於存儲消息壓縮使用的編碼以及Timestamp類型。這個版本僅支持 gzip、snappy、lz4三種壓縮格式。後三位如果是000則表示沒有使用壓縮,如果是001則表示是gzip壓縮,如果是010則是snappy壓縮,如果是011則是snappy壓縮。第4位(從右數)如果為0,代表使用create time,如果為1代表append time。其餘位保留。佔1個位元組

TIMESTAMP:時間戳。佔8個位元組

KEY_SIZE:用於標識KEY內容的長度K。佔用4個位元組

KEY:存儲的是KEY的具體內容。佔用K個位元組。

VALUE_SIZE:主要標識VALUE的內容的長度V。佔用4個位元組。

VALUE:消息的真實內容。佔用V個位元組

Record實際上是用Java NIO ByteBuffer存儲的,那我們如何將一個消息寫入到Record的ByteBuffer裡面呢?

說簡單點,其實就是把上面說的欄位給Record傳過來然後依次放入ByteBuffer中就可以了,但這中間利用了Compressor壓縮器的壓縮功能,我們後續會說一下Compressor壓縮器,這裡就先不介紹了。

還有一點,Record的寫入是支持數據分包的,也就是一個完整的VALUE值可以通過valueOffset和valueSize來指定偏移和這次寫入的數據大小來進行分包操作,這樣就可以將一個完整的消息,分成多個Record。如果valueSize是負數,就表示從valueOffset開始到末尾的數據都寫入。

喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 千鋒JAVA開發學院 的精彩文章:

JDBC的通用查詢的方法
使用JDBC從資料庫中查詢數據的方法

TAG:千鋒JAVA開發學院 |