亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Kafka通訊協議是怎么樣的

發布時間:2021-12-08 17:11:27 來源:億速云 閱讀:318 作者:小新 欄目:云計算

小編給大家分享一下Kafka通訊協議是怎么樣的,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

Kafka的Producer、Broker和Consumer之間采用的是一套自行設計的基于TCP層的協議。Kafka的這套協議完全是為了Kafka自身的業務需求而定制的,而非要實現一套類似于Protocol Buffer的通用協議。

Kafka通訊協議是怎么樣的

基本數據類型

  1. 定長數據類型:int8,int16,int32和int64,對應到Java中就是byte, short, int和long。

  2. 變長數據類型:bytes和string。變長的數據類型由兩部分組成,分別是一個有符號整數N(表示內容的長度)和N個字節的內容。其中,N為-1表示內容為null。bytes的長度由int32表示,string的長度由int16表示。

  3. 數組:數組由兩部分組成,分別是一個由int32類型的數字表示的數組長度N和N個元素。

Request和Response的基本結構

Kafka中兩個角色之間通訊的基本單位是Request/Response,Request和Response的基本結構如下:

RequestOrResponse => MessageSize (RequestMessage | ResponseMessage)

其中各字段的含義為:

名稱類型描述
MessageSizeint32表示RequestMessage或者ResponseMessage的長度
RequestMessage/ResponseMessage-表示Request或者Response的內容,在下面將會介紹其具體格式。

這個結構定義了通訊雙方交換數據的基本結構。通訊的過程可以簡單地表示為:客戶端打開與服務器端的Socket,然后往Socket寫入一個int32的數字表示這次發送的Request有多少字節,然后繼續往Socket中寫入對應字節數的數據。服務器端先讀出一個int32的整數從而獲取這次Request的大小,然后讀取對應字節數的數據從而得到Request的具體內容。服務器端處理了請求后,也用同樣的方式來發送響應。

RequestMessage的結構

RequestMessage的結構如下:

RequestMessage => ApiKey ApiVersion CorrelationId ClientId Request
名稱類型描述
ApiKeyint16表示這次請求的API編號
ApiVersionint16表示請求的API的版本,有了版本后就可以做到后向兼容
CorrelationIdint32由客戶端指定的一個數字唯一標示這次請求的id,服務器端在處理完請求后也會把同樣的CorrelationId寫到Response中,這樣客戶端就能把某個請求和響應對應起來了。
ClientIdstring客戶端指定的用來描述客戶端的字符串,會被用來記錄日志和監控,它唯一標示一個客戶端。
Request-Request的具體內容。

ResponseMessage的結構

ResponseMessage的結構如下:

ResponseMessage => CorrelationId Response
名稱類型描述
CorrelationIdint32對應Request的CorrelationId。
Response-對應Request的Response,不同的Request的Response的字段是不一樣的。

Message

Kafka是一個分布式消息系統,Producer生產消息并推送(Push)給Broker,然后Consumer再從Broker那里取走(Pull)消息。Producer生產的消息就是由Message來表示的,對用戶來講,它就是鍵-值對,來看看它的結構。

Message => Crc MagicByte Attributes Key Value
名稱類型描述
CRCint32表示這條消息(不包括CRC字段本身)的校驗碼
MagicByteint8表示消息格式的版本,用來做后向兼容,目前值為0
Attributesint8表示這條消息的元數據,目前最低兩位用來表示壓縮格式
Keybytes表示這條消息的Key,可以為null
Valuebytes表示這條消息的Value。Kafka支持消息嵌套,也就是把一條消息作為Value放到另外一條消息里面。

MessageSet

MessageSet用來組合多條Message,它在每條Message的基礎上加上了Offset和MessageSize,其結構是:

MessageSet => [Offset MessageSize Message]

它的含義是MessageSet是個數組,數組的每個元素由三部分組成,分別是Offset,MessageSize和Message,它們的含義分別是:

名稱類型描述
Offsetint64它用來作為log中的序列號,Producer在生產消息的時候還不知道具體的值是什么,可以隨便填個數字進去
MessageSizeint32表示這條Message的大小
Message-表示這條Message的具體內容,其格式見上一小節。

Message的壓縮

Kafka支持下面幾種壓縮方式,

壓縮方式編碼
不壓縮0
Gzip1
Snappy2
LZ43

其中編碼就是Message的Attribute的最低兩位的值。

因為單條消息中重復內容可能不多,所以通常把多條消息放在一起組成MessageSet,然后再把MessageSet放到一條Message里面去,從而提高壓縮比率。

Request/Respone和Message/MessageSet的關系

  • Request/Response是通訊層的結構,和網絡的7層模型對比的話,它類似于TCP層。

  • Message/MessageSet定義的是業務層的結構,類似于網絡7層模型中的HTTP層。Message/MessageSet只是Request/Response的payload中的一種數據結構。

以上是“Kafka通訊協議是怎么樣的”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

平顶山市| 余干县| 广灵县| 交城县| 长武县| 鹤山市| 南阳市| 大竹县| 团风县| 呼图壁县| 湘潭市| 民丰县| 花垣县| 漠河县| 佛坪县| 永嘉县| 阳山县| 宜川县| 唐海县| 贵溪市| 广宁县| 乐都县| 洮南市| 策勒县| 清徐县| 台湾省| 托克逊县| 宁城县| 固阳县| 呼图壁县| 阿坝| 石城县| 尚义县| 剑川县| 衡东县| 宿迁市| 安新县| 会理县| 镇平县| 阿瓦提县| 南昌县|