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開始到末尾的數據都寫入。
※JDBC的通用查詢的方法
※使用JDBC從資料庫中查詢數據的方法
TAG:千鋒JAVA開發學院 |