1. 程式人生 > >Kafka傳送訊息過程

Kafka傳送訊息過程

Kafka傳送訊息模型

 

ProducerRecord物件包含目標主題和要傳送的內容,還可以指定鍵或分割槽。傳送ProducerRecord物件時,生產者要先把鍵和值物件序列化為位元組陣列(預設使用StringSerializer),這樣才可以在網路上傳輸。然後,位元組陣列被傳給分割槽器。如果在ProducerRecord物件裡指定了分割槽,那麼分割槽器不會再做任何事,直接把指定的分割槽返回。如果沒有指定分割槽,那麼分割槽器會根據ProducerRecord物件的鍵來選擇一個分割槽。如果鍵為空,那麼分割槽器會使用負載均衡演算法,隨機選擇一個分割槽返回。選好分割槽後,生產者就知道往哪個主題和分割槽發放這條訊息了。接著,這條訊息被新增到一個記錄批次裡,這個批次裡的所有訊息會被髮送到相同的主題和分割槽上。有一個獨立的執行緒負責把這些訊息批次傳送到相應的broker上。

伺服器收到訊息後返回一個響應。如果訊息成功寫入Kafka,就返回一個RecordMetaData物件,它包含了主題和分割槽資訊,以及訊息在分割槽裡的偏移量。如果寫入失敗,則會返回一個錯誤。生產者在收到錯誤後會嘗試重新發送訊息,幾次傳送失敗後,就返回錯誤資訊。

ProducerRecord包含欄位:
private final String topic;
private final Integer partition;
private final K key;
private final V value;
private final Long timestamp;
RecordMetaData包含欄位:
public static final int UNKNOWN_PARTITION = -1;
private final long offset;
private final long timestamp;
private final long checksum;
private final int serializedKeySize;
private final int serializedValueSize;
private final TopicPartition topicPartition;
TopicPartition包含欄位:
private int hash = 0;
private final int partition;
private final String topic;

《Kafka權威指南》