kafka(4)分區消費模型和組消費模型


分區消費模型

描述代碼

main()
獲取分區的size
for index =0 to size
create thread(or process) consumer(Index)


第index個線程(進程)
consumer(index)
創建到kafka broker的連接: KafkaClient(host,port)
指定消費參數構建consumer: SimpleConsumer(topic, partitions)
設置消費offset : consumer.seek(offset,0)
while True
消費指定topic第index個分區的數據
處理
記錄當前消息offset
提交當前offset(可選)

組消費模型

代碼描述

main()
設置需要創建的流數N
for index =0 to N
create thread consumer(Index)

第index個線程
consumer(index)
創建到kafka broker的連接: KafkaClient(host,port)
指定消費參數構建consumer: SimpleConsumer(topic, partitions)
設置從頭消費還是從最新的消費(smallest或largest)
while True
從指定topic的第index個流取數據
處理
(offset會自動提交到zookeeper,無需我們操作)

兩種模型對比

分區消費模型更加靈活但是:
(1)需要自己處理各種異常情況;
(2)需要自己管理offset(以實現消息傳遞的其他語義);
組消費模型更加簡單,但是不靈活:
(1)不需要自己處理異常情況,不需要自己管理offset;
(2)只能實現kafka默認的最少一次消息傳遞語義;

三種語義:

1.至少一次:生產者發送消息,由於網絡原因可能會導致生產者發送消息發了兩次,導致消費者重復消費數據。

2.至多一次:生產者發送消息,但是消息丟失,不會理會消費者是否接收到消息

3.至少有且只有一次:一對一的關系

 kafka 默認的話是至少一次語義。若想實現其他語義,利用分區消費模型自己定義拓展


免責聲明!

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



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