kafka多個消費者,怎么收到所有的消息.


kafka多個消費者,怎么收到所有的消息.

 

 

消費者組是Kafka實現單播和廣播兩種消息模型的手段。同一個topic,每個消費者組都可以拿到相同的全部數據。

 

組內的所有消費者協調在一起來消費訂閱主題(subscribed topics)的所有分區(partition)。當然,每個分區只能由同一個消費組內的一個consumer來消費。

一個topic 可以配置幾個partition,produce發送的消息分發到不同的partition中,consumer接受數據的時候是按照group來接受,kafka確保每個partition只能同一個group中的同一個consumer消費,如果想要重復消費,那么需要其他的組來消費。

 

一、

1、原理圖

2、原理描述

一個topic 可以配置幾個partition,produce發送的消息分發到不同的partition中,consumer接受數據的時候是按照group來接受,kafka確保每個partition只能同一個group中的同一個consumer消費,如果想要重復消費,那么需要其他的組來消費。Zookeerper中保存這每個topic下的每個partition在每個group中消費的offset 

 

新版kafka把這個offsert保存到了一個__consumer_offsert的topic下 

 

這個__consumer_offsert 有50個分區,通過將group的id哈希值%50的值來確定要保存到那一個分區.  這樣也是為了考慮到zookeeper不擅長大量讀寫的原因。

 

所以,如果要一個group用幾個consumer來同時讀取的話,需要多線程來讀取,一個線程相當於一個consumer實例。當consumer的數量大於分區的數量的時候,有的consumer線程會讀取不到數據。 

 

假設一個topic test 被groupA消費了,現在啟動另外一個新的groupB來消費test,默認test-groupB的offset不是0,而是沒有新建立,除非當test有數據的時候,groupB會收到該數據,該條數據也是第一條數據,groupB的offset也是剛初始化的ofsert, 除非用顯式的用–from-beginnging 來獲取從0開始數據 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM