您好,登錄后才能下訂單哦!
這篇文章主要介紹了Kafka消息規(guī)范的示例分析,具有一定借鑒價(jià)值,感興趣的朋友可以參考下,希望大家閱讀完這篇文章之后大有收獲,下面讓小編帶著大家一起了解一下。
Kafka作為一個(gè)消息隊(duì)列,有其自己定義消息的格式。Kafka中的消息采用ByteBuf,之所以采用ByteBuf這種緊密的二進(jìn)制存儲(chǔ)格式是因?yàn)檫@樣可以節(jié)省大量的空間。畢竟如果使用Java類的格式來定義消息對(duì)象將會(huì)浪費(fèi)大量的空間(Java對(duì)象除了本身屬性所占的空間外,還存在一些Header,還會(huì)存在一些補(bǔ)齊)。
Kafka的消息格式經(jīng)歷了V0、V1以及V2版本。V0沒有時(shí)間戳的字段,導(dǎo)致很難對(duì)過期的消息進(jìn)行判斷。V0、V1存在很多固定長度的字段,這些字段在實(shí)際中往往占用很少,造成浪費(fèi),因此V2將其中的很多定義長度的字段設(shè)計(jì)成可變長度。
可變長度的設(shè)計(jì)借鑒了Zig-zag編碼格式,最高位用來表示當(dāng)前字節(jié)是否已經(jīng)是某個(gè)數(shù)編碼的最后一個(gè)字節(jié)(1代表不是,0代表是)。
消息總長度:整個(gè)消息的長度,方便消息的遍歷以及獲取其總長度
屬性:保留字段,暫時(shí)無作用
時(shí)間戳增量:消息距離Batch時(shí)間戳的增量,不再使用固定8字節(jié)的時(shí)間戳,該字段將會(huì)大大降低消息的存儲(chǔ)空間
位移增量:消息距離Batch位移的增量
key length:消息key內(nèi)容的長度
key:消息key的內(nèi)容
value size:消息內(nèi)容的長度
value:消息內(nèi)容
header:header的個(gè)數(shù)
heders:具體的header,對(duì)用戶可見,可做消息路由或者某些消息元數(shù)據(jù)的載體。
一個(gè)消息批次包含若干個(gè)消息組成,其實(shí)Kafka的日志文件就是用若干個(gè)消息批次組成的,kafka不是直接在消息層面上操作的,它總是在消息批次層面上進(jìn)行寫入。
起始位移:Kafka日志分區(qū)中的offset
長度:該消息批次的長度
分區(qū)leader版本號(hào)
版本號(hào):目前該值是2
CRC:CRC校驗(yàn)碼,用來確認(rèn)消息在傳輸過程中不會(huì)被篡改,該字段在V0、V1中是在消息層面的,但對(duì)每一條消息都進(jìn)行CRC,將會(huì)造成CPU的浪費(fèi)
屬性:該字段在V0和V1的版本中也是存在于消息層面,在V2中低三位依然表示消息的壓縮類型,第4位依然是時(shí)間戳類型(一種是客戶端指定時(shí)間戳,另一種是有kafka broker指定時(shí)間戳),第5位和第6位分別表示新引入的事務(wù)類型和控制類型
起始時(shí)間戳:batch中第一條消息的時(shí)間戳
最大時(shí)間戳:batch中最后一條消息的時(shí)間戳
PID、producer epoch、起始序列號(hào):序列號(hào)的引入為了生產(chǎn)消息的冪等性,Kafka用它來判斷消息是否已經(jīng)提交,防止重復(fù)生產(chǎn)消息。PID代表冪等性producer的ID,producer epoch表示producer攜帶的當(dāng)前版本號(hào),broker使用這兩個(gè)字段判斷producer是否有效,防止過期的producer生產(chǎn)消息
感謝你能夠認(rèn)真閱讀完這篇文章,希望小編分享的“Kafka消息規(guī)范的示例分析”這篇文章對(duì)大家有幫助,同時(shí)也希望大家多多支持億速云,關(guān)注億速云行業(yè)資訊頻道,更多相關(guān)知識(shí)等著你來學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。