kafka消費者消費訊息的流程
1.1 消費流程
1.訊息有生產者釋出到kafka叢集后,會被消費者消費。訊息的消費模型有兩種,推送模型(push)和拉取模型(pull)。
1.1 基於推送模型(push)的訊息系統,有訊息代理記錄消費者的消費狀態。訊息代理在將訊息推送到消費者後,標記這條訊息已經消費,但這種方式無法很好地保證消費被處理。如果要保證訊息被處理,訊息代理髮送完訊息後,要設定狀態為“已傳送”,只要收到消費者的確認請求後才更新為“已消費”,這就需要代理中記錄所有的消費狀態,但顯然這種方式不可取。
缺點:標記為消費後,其他消費者則不可以再消費了,不可取。
1.2 kafka採用拉取模型,由消費者自己記錄消費狀態,每個消費者互相獨立地順序拉取每個分割槽的訊息。如下圖所示,有兩個消費者(不同消費者組)拉取同一個主題的訊息,消費者A的消費進度是3,消費者B的消費進度是6。消費者拉取的最大上限通過最高水位(watermark)控制,生產者最新寫入的訊息如果還沒有達到備份數量,對消費者是不可見的。這種由消費者控制偏移量的優點是:消費者可以按照任意的順序消費訊息。比如,消費者可以重置到舊的偏移量,重新處理之前已經消費過的訊息;或者直接跳到最近的位置,從當前的時刻開始消費。
在一些訊息系統中,訊息代理會在訊息被消費之後立即刪除訊息。如果有不同型別的消費者訂閱同一個主題,訊息代理可能需要冗餘地儲存同一訊息;或者等所有消費者都消費完才刪除,這就需要訊息代理跟蹤每個消費者的消費狀態,這種設計很大程度上限制了訊息系統的整體吞吐量和處理延遲。Kafka的做法是生產者釋出的所有訊息會一致儲存在Kafka叢集中,不管訊息有沒有被消費。使用者可以通過設定保留時間來清理過期的資料,比如,設定保留策略為兩天。那麼,在訊息釋出之後,它可以被不同的消費者消費,在兩天之後,過期的訊息就會自動清理掉。
1.3 消費者是以consumer group消費者組的方式工作,由一個或者多個消費者組成一個組,共同消費一個topic。每個分割槽在同一時間只能由group中的一個消費者讀取,但是多個group可以同時消費這個partition。在圖中,有一個由三個消費者組成的group,有一個消費者讀取主題中的兩個分割槽,另外兩個分別讀取一個分割槽。某個消費者讀取某個分割槽,也可
以叫做某個消費者是某個分割槽的擁有者。
在這種情況下,消費者可以通過水平擴充套件的方式同時讀取大量的訊息。另外,如果一個消費者失敗了,那麼其他的group成員會自動負載均衡讀取之前失敗的消費者讀取的分割槽。
1.2 pull方式和push方式的區別
1.push(推)模式很難適應消費速率不同的消費者,因為訊息傳送速率是由broker決定的。它的目標是儘可能以最快速度傳遞訊息,但是這樣很容易造成consumer來不及處理訊息,典型的表現就是拒絕服務以及網路擁塞。
標記為消費後,其他消費者則不可以再消費了,不可取。
- 而pull模式則可以根據consumer的消費能力以適當的速率消費訊息。consumer採用pull(拉)模式從broker中讀取資料。
pull模式不足之處是,如果kafka沒有資料,消費者可能會陷入迴圈中,一直等待資料到達。為了避免這種情況,我們在我們的拉請求中有引數,允許消費者請求在等待資料到達的“長輪詢”中進行阻塞(並且可選地等待到給定的位元組數,以確保大的傳輸大小)。
https://blog.csdn.net/qq_34886352/article/details/84303860
相關文章
- Kafka中消費者延遲處理訊息Kafka
- 阿里雲 KAFKA 消費者接收不到訊息阿里Kafka
- Kafka 消費組消費者分配策略Kafka
- Kafka 消費者解析Kafka
- RabbitMQ多消費者順序性消費訊息實現MQ
- 訊息中介軟體—RocketMQ訊息消費(三)(訊息消費重試)MQ
- Kafka 消費者組 RebalanceKafka
- 「Kafka應用」消費者Kafka
- RocketMQ之消費者啟動與消費流程MQ
- kafka消費Kafka
- Kafka 1.0.0 多消費者示例Kafka
- kafka消費者客戶端Kafka客戶端
- librdkafka: 如何設定Kafka消費者訂閱訊息的起始偏移位置Kafka
- 消費端如何保證訊息佇列MQ的有序消費佇列MQ
- Kafka 如何保證訊息消費的全域性順序性Kafka
- RocketMQ -- 訊息消費過程MQ
- Kakfa -- 消費者啟動流程
- RocketMQ -- 消費者啟動流程MQ
- Apache Kafka消費者再平衡 | TechMyTalkApacheKafka
- Kafka入門(4):深入消費者Kafka
- 無鏡--kafka之消費者(四)Kafka
- 實際業務處理 Kafka 訊息丟失、重複消費和順序消費的問題Kafka
- 訊息佇列-如何保證訊息的不被重複消費(如何保證訊息消費的冪等性)佇列
- Kafka訊息分發、主題分割槽與消費組的概念Kafka
- Pulsar VS. Kafka(1): 統一的訊息消費模型(Queue + Stream)Kafka模型
- 訊息推送平臺的實時數倉?!flink消費kafka訊息入到hiveKafkaHive
- 探索Kafka消費者的內部結構Kafka
- Storm確保訊息被消費ORM
- Kafka無法消費?!我的分散式訊息服務Kafka卻穩如泰山!Kafka分散式
- 分散式訊息佇列:如何保證訊息不被重複消費?(訊息佇列消費的冪等性)分散式佇列
- kafka消費者提交方式(程式碼演示)Kafka
- RocketMQ原始碼解析之訊息消費者(consume Message)MQ原始碼
- 訊息佇列——數十萬級訊息的消費方案佇列
- java的kafka生產消費JavaKafka
- RocketMq如何順序消費的訊息offestMQ
- Kafka 訊息丟失與消費精確一次性Kafka
- 深入研究RocketMQ消費者是如何獲取訊息的MQ
- flink連線消費kafkaKafka