kafka 生產者和消費者


同一則消息record可以被多個消費者消費consumer
在kafka中任意一個消費者一定屬於某一個消費組consumer group
發布到Topic的每條記錄都會傳遞到每個訂閱Consumer Group中的一個消費者實例,如果所有Consumer實例都具有相同的Consumer Group,
那么Topic中的記錄會在該ConsumerGroup中的Consumer實例進行均分消費;如果所有Consumer實例具有不同的ConsumerGroup,則每條記錄將廣播到所有Consumer Group進程。
簡而言之就是 訂閱了該topic的consumerGroup 會將record均分給組中的所有consumer
       若多個consumerGroup訂閱了該topic,那么record會均分給多個consumerGroup

 

 

對於kafka而言,發送到topic中的消息一定會發送給consumerGroup,但是發給consumerGroup中的哪一個消費者實例,取決於消費者實例的配
更常見的是,我們發現Topic具有少量的Consumer Group,每個Consumer Group可以理解為一個“邏輯的訂閱者”。
每個Consumer Group均由許多Consumer實例組成,以實現可伸縮性和容錯能力。這無非就是發布-訂閱模型,
其中訂閱者是消費者的集群而不是單個進程。這種消費方式Kafka會將Topic按照分區的方式均分給一個Consumer Group下的實例,
如果ConsumerGroup下有新的成員介入,則新介入的Consumer實例會去接管ConsumerGroup內其他消費者負責的某些分區,
在·同樣如果一下ConsumerGroup下的有其他Consumer實例宕機,則由改ConsumerGroup其他實例接管。

不同的消費組,代表不同的業務系統,或者不同的服務,消費組a和消費組b中消費同一個record,消費的業務邏輯不同,不存在重復消費

就topic而言,誰訂閱了topic,就把里面所有的record廣播給所有消費者

就消費者而言,訂閱了topic,里面的數據recore會均分給消費組中的消費者。

一般消費組中的消費者數目不會大於topic中的分區partion數目,

若消費者數目大於partion數目,那個多余的消費者 將不會分配到record數據,浪費資源

 

增大kafka中topic分區,不僅僅可以增加存儲能力,增加寫入能力,也可以增加消費者對topic中數據record 消費能力

由於Kafka的Topic的分區策略,因此Kafka僅提供分區中記錄的有序性,也就意味着相同Topic的不同分區記錄之間無順序。
因為針對於絕大多數的大數據應用和使用場景, 使用分區內部有序或者使用key進行分區策略已經足夠滿足絕大多數應用場景。
但是,如果您需要記錄全局有序,則可以通過只有一個分區Topic來實現,盡管這將意味着每個ConsumerGroup只有一個Consumer進程。
分區數越大,寫入性能越高,並行消費越大

 

 

 


免責聲明!

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



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