Kafka怎么做到避免消息重復(fù)消費(fèi)的? 消費(fèi)者組是什么?
消費(fèi)者
:
1、訂閱Topic(主題)
2、從訂閱的Topic消費(fèi)(pull)消息,
3、將消費(fèi)消息的offset(偏移量)保存在Kafka內(nèi)置的一Topic名字是_consumer_offsets的主題中,在Kafka的logs文件下能看到這??文件,存放的是消息的偏移量數(shù)據(jù)
消費(fèi)者組
:
1、訂閱同一個(gè)Topic的消費(fèi)者可以加入到一個(gè)consumer Group(消費(fèi)者組)
2、消費(fèi)者組中的consumer共享一個(gè)group_id
,configs,put(“group.id”,”XXX”);
只要消費(fèi)者的group_id一樣,就屬于同一個(gè)消費(fèi)者組
3、消費(fèi)者組保證每個(gè)topic下一個(gè)partition的消息只能被一個(gè)消費(fèi)者組下一個(gè)消費(fèi)者消費(fèi),避免消息的重復(fù)消費(fèi)
如上圖,當(dāng)前只有一個(gè)消費(fèi)者組訂閱這個(gè)Topic,消費(fèi)者組里只有一個(gè)消費(fèi)者,那么當(dāng)前Topic中所有分區(qū)的消息都由這個(gè)消費(fèi)者消費(fèi)
4、當(dāng)消費(fèi)者端業(yè)務(wù)邏輯比較復(fù)雜,消費(fèi)消息比較慢,這個(gè)時(shí)候我們可以向消費(fèi)者組中多加幾個(gè)消費(fèi)者(橫向擴(kuò)展)來提升消費(fèi)速度。無非就是消費(fèi)者端一套代碼再在幾臺(tái)新的服務(wù)器部署一套,加入到同一個(gè)group_id下,同時(shí)從主題消費(fèi)消息
橫向擴(kuò)展后,Kafka會(huì)對(duì)消息的分區(qū)與消費(fèi)者的對(duì)應(yīng)關(guān)系重新調(diào)整,這就是rebalance(再平衡機(jī)制)
如上圖,消費(fèi)者組擴(kuò)展一個(gè)消費(fèi)者后,消費(fèi)者1、2分別消費(fèi)兩個(gè)分區(qū)的消息
我們可以看到,一個(gè)分區(qū)對(duì)應(yīng)一個(gè)消費(fèi)者,但是一個(gè)消費(fèi)者可以對(duì)應(yīng)多個(gè)分區(qū)
如果上面結(jié)構(gòu)還不夠,兩個(gè)消費(fèi)者消費(fèi)速度依然跟不上,那么我們還可以繼續(xù)添加消費(fèi)者,添加到4個(gè)消費(fèi)者,此時(shí)主題分區(qū)與消費(fèi)者的關(guān)系再次發(fā)生變化,需要再平衡,此時(shí)一個(gè)消費(fèi)者消費(fèi)一個(gè)分區(qū)消息,達(dá)到并行消費(fèi)的效果
上面步驟我們看到了消息的分區(qū)可以橫向擴(kuò)展,消息的消費(fèi)者也可以橫向擴(kuò)展,向消費(fèi)者組添加消費(fèi)者是橫向擴(kuò)展消費(fèi)能力的主要方式,
而消費(fèi)者組是消費(fèi)者的關(guān)鍵,消費(fèi)者組來保證,主題下的消息不管由多少個(gè)分區(qū),每條消息只會(huì)被一個(gè)消費(fèi)者消費(fèi),就不會(huì)引起重復(fù)消費(fèi)的情況
一般最佳情況是:消費(fèi)者數(shù) = 分區(qū)數(shù),一個(gè)分區(qū)對(duì)應(yīng)一個(gè)消費(fèi)者,
消費(fèi)者也不是越多越好,消費(fèi)者數(shù)受限于分區(qū)數(shù), 過多消費(fèi)者會(huì)導(dǎo)致有的消費(fèi)者沒有分配分區(qū)導(dǎo)致空閑,如下圖
所以對(duì)于高并發(fā)的場(chǎng)合,我們通常會(huì)給一個(gè)主題設(shè)置很多個(gè)分區(qū),分區(qū)數(shù)多利于消費(fèi)者橫向擴(kuò)張文章來源:http://www.zghlxwxcb.cn/news/detail-612195.html
上面是一個(gè)消費(fèi)者組的情況,實(shí)際上對(duì)于一個(gè)Topic可以有不同的消費(fèi)者組,如下圖文章來源地址http://www.zghlxwxcb.cn/news/detail-612195.html
- 每個(gè)消費(fèi)者組是相互獨(dú)立的
- 每個(gè)消費(fèi)者組都可以拿到主題的全部數(shù)據(jù)
到了這里,關(guān)于Kafka 入門到起飛 - Kafka怎么做到保障消息不會(huì)重復(fù)消費(fèi)的? 消費(fèi)者組是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!