Kafka訊息模型

2021-09-08 04:17:57 字數 1226 閱讀 1726

一、訊息傳遞模型

傳統的訊息佇列最少提供兩種訊息模型,一種p2p,一種pub/sub,而kafka並沒有這麼做,巧妙的,它提供了乙個消費者組的概念,乙個訊息可以被多個消費者組消費,但是只能被乙個消費者組裡的乙個消費者消費,這樣當只有乙個消費者組時就等同與p2p模型,當存在多個消費者組時就是pub/sub模型。

kafka 的 consumer 是以pull的形式獲取訊息資料的。 pruducer push訊息到kafka cluster ,consumer從集群中pull訊息,如下圖。該部落格主要講解. parts在消費者中的分配、以及相關的消費者順序、底層結構元資料資訊、kafka資料讀取和儲存等。

二、訊息持久化

三、push vs. pull

對於訊息的消費,activemq使用push模型,而kafka使用pull模型,兩者各有利弊,對於push,broker很難控制資料傳送給不同消費者的速度,而pull可以由消費者自己控制,但是pull模型可能造成消費者在沒有訊息的情況下盲等,這種情況下可以通過long polling機制緩解,而對於幾乎每時每刻都有訊息傳遞的流式系統,這種影響可以忽略。

四、訊息投遞可靠性

乙個訊息如何算投遞成功,kafka提供了三種模式:

訊息在broker上的可靠性,因為訊息會持久化到磁碟上,所以如果正常stop乙個broker,其上的資料不會丟失;但是如果不正常stop,可能會使存在頁面快取來不及寫入磁碟的訊息丟失,這可以通過配置flush頁面快取的週期、閾值緩解,但是同樣會頻繁的寫磁碟會影響效能,又是乙個選擇題,根據實際情況配置。

訊息消費的可靠性,kafka提供的是「at least once」模型,因為訊息的讀取進度由offset提供,offset可以由消費者自己維護也可以維護在zookeeper裡,但是當訊息消費後consumer掛掉,offset沒有即時寫回,就有可能發生重複讀的情況,這種情況同樣可以通過調整commit offset週期、閾值緩解,甚至消費者自己把消費和commit offset做成乙個事務解決,但是如果你的應用不在乎重複消費,那就乾脆不要解決,以換取最大的效能。

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...

Kafka 訊息傳送

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

Kafka訊息格式

從0.8.x版本開始到現在的2.x版本,kafka的訊息格式也經歷了 3 個版本 v0 版本 v1 版本和 v2 版本 kafka 從 0.8.x 版本開始到 0.10.x 版本之前的訊息格式通常稱為 v0 版本。下圖中左邊的 record 部分就是 v0 版本的訊息格式,每個 record v0 ...