动态

详情 返回 返回

【趙渝強老師】Kafka消息的消費模式 - 动态 详情

Kafka消費者組中的消息消費模型有兩種,即:推送模式(push)和拉取模式(pull)。視頻講解如下:
https://www.bilibili.com/video/BV1kG23Y4EZP/?aid=113282815891...

一、消息的推送模式

這種消息的消費模式需要記錄消費者的消費者狀態。當把一條消息推送給消費者後,需要維護消息的狀態。如果這條消息已經被消費將會對消息進行標記。這種方式無法很好地保證消息被處理。如果要保證消息被處理,發送完消息後需要將其狀態設置為“已發送”;而收到消費者的確認後才將其狀態更新為“已消費”,這就需要Kafka記錄所有消息的消費狀態,顯然這種方式不可取。這種方式還存在一個明顯的缺點就是消息被標記為“已消費”後,其他的消費者將不能再進行消費了。

二、消息的拉取模式

由於推送模式存在一定的缺點,因此Kafka採用了消費拉取的消費模式來消費消息。該模式由每個消費者自己維護自己的消費狀態,並且每個消費者互相獨立地按順序拉取每個分區的消息。消費者通過偏移量的信息來控制從Kafka中消費的消息。如下圖所示。
image.png

這種由消費者通過偏移量進行消息消費的優點在於,消費者可以按照任意的順序消費消息。例如,消費者可以通過重置偏移量信息重新處理之前已經消費過的消息;或者直接跳轉到某一個偏移量位置並開始消費。

這裏需要特別説明的是,當生產者最新寫入的消息如果還沒有達到備份數量,即,新寫入的消息還沒有達到副本數要求的時候,對消費者是不可見的。

另外,消費者如果已經將消息進行了消費,Kafka並不會立即將消息進行刪除,而是會將所有的消息進行保存。Kafka會將消息持久化保存到Kafka的消息日誌中。不管消息有沒有被消費掉,用户可以通過設置保留時間來清理過期的消息數據。

user avatar seatunnel 头像
点赞 1 用户, 点赞了这篇动态!
点赞

Add a new 评论

Some HTML is okay.