Kafka 傳送訊息流程

2021-10-06 12:08:40 字數 1085 閱讀 5417

客戶端的幾個元件:

一條訊息首先需要確定要被儲存到那個 partition 對應的雙端佇列上;其次,儲存訊息的雙端佇列是以批的維度儲存的,即 n 條訊息組成一批,一批訊息最多儲存 n 條,超過後則新建乙個組來儲存新訊息;其次,新來的訊息總是從左側寫入,即越靠左側的訊息產生的時間越晚;最後,只有當一批訊息湊夠 n 條後才會傳送給 broker,否則不會傳送到 broker 上

訊息可分為兩種,一種是指定了 key 的訊息,一種是沒有指定 key 的訊息。

對於指定了 key 的訊息,partition 位置的計算方式為:utils.murmur2(key) % numpartitions,即先對 key 進行雜湊計算,然後在於 partition 個數求餘,從而得到該條訊息應該被儲存在哪個 partition 上。

對於沒有指定 key 的訊息,partition 位置的計算方式為:採用 round-robin 方式確定 partition 位置,即採用輪詢的方式,平均的將訊息分布到不同的 partition 上,從而避免某些 partition 資料量過大影響 broker 和消費端效能

第一步:掃瞄記錄收集器中滿足條件的批資料,然後將 partition -> 批資料對映轉換成 brokerid -> n 批資料的對映。第二步:sender 執行緒會為每個 brokerid 建立乙個客戶端請求,然後將請求交給 networkclient,由 netwrokclient 去真正傳送網路請求到 broker。

sender 執行緒準備好要傳送的資料後,交由 networkclient 來進行網路相關操作。主要包括客戶端與服務端的建連、傳送客戶端請求、接受服務端響應。完成如上一系列的工作主要由如下方法完成。

reday()方法。從記錄收集器獲取準備完畢的節點,並連線所有準備好的節點。

send()方法。為每個節點建立乙個客戶端請求,然後將請求暫時存到節點對應的 channel(通道)中。

poll()方法。該方法會真正輪詢網路請求,傳送請求給服務端節點和接受服務端的響應

Kafka 訊息傳送

建立乙個kafkaprodecer物件,傳入上面建立的properties物件 kafkaproducerproducer new kafkaproducer mykafkaprops 使用prodecerrecord string topic,string key,string value 建構函...

kafka訊息傳送模式

在kafka 0.8.2之後,producer不再區分同步 sync 和非同步方式 async 所有的請求以非同步方式傳送,這樣提公升了客戶端效率。producer請求會返回乙個應答物件,包括偏移量或者錯誤信。這種非同步方地批量的傳送訊息到kafka broker節點,因而可以減少server端資源...

Kafka傳送訊息到HDFS

本文採用的是kafka0.7.2,安裝好kafka後在kafka的contrib目錄下有關於kafka與hadoop的一系列檔案,我們可以使用hadoop consumer目錄下的指令碼及配置檔案將kafka中某topic的資訊傳送到hdfs中。1.修改test目錄下的test.properties...