日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁(yè) > 單片機(jī) > 架構(gòu)師社區(qū)
[導(dǎo)讀]最近,有些讀者去頭條二面,被面試官問(wèn)了一個(gè)關(guān)于Kafka的問(wèn)題:多個(gè)Kafka消費(fèi)者如何同時(shí)消費(fèi)相同Topic下的相同Partition的數(shù)據(jù)?看似一個(gè)簡(jiǎn)單的問(wèn)題,竟然把這位讀者問(wèn)懵了!今天,我們就一起來(lái)說(shuō)說(shuō)這個(gè)面試題,好了,開(kāi)始今天的主題。題目分析首先,要明確面試官的問(wèn)題:多個(gè)...

最近,有些讀者去頭條二面,被面試官問(wèn)了一個(gè)關(guān)于Kafka的問(wèn)題:多個(gè)Kafka消費(fèi)者如何同時(shí)消費(fèi)相同Topic下的相同Partition的數(shù)據(jù)? 看似一個(gè)簡(jiǎn)單的問(wèn)題,竟然把這位讀者問(wèn)懵了!

今天,我們就一起來(lái)說(shuō)說(shuō)這個(gè)面試題,好了,開(kāi)始今天的主題。

搞懂Kafka的這個(gè)問(wèn)題,你離大廠(chǎng)就不遠(yuǎn)了!

題目分析

首先,要明確面試官的問(wèn)題:多個(gè)Kafka消費(fèi)者如何同時(shí)消費(fèi)相同Topic下的相同Partition的數(shù)據(jù)? 這個(gè)問(wèn)題問(wèn)的已經(jīng)很明顯了,我們只要回答出如何讓多個(gè)Kafka消費(fèi)者同時(shí)消費(fèi)相同Topic下的相同Partition的數(shù)據(jù)就可以了。

為了能夠回答好這個(gè)問(wèn)題,我們需要理解Kafka中的一個(gè)概念,就是 消費(fèi)者組(Consumer Group)。消費(fèi)者組是Kafka實(shí)現(xiàn)單播和廣播兩種消息模型的基礎(chǔ)和手段。對(duì)于同一個(gè)Topic(主題)來(lái)說(shuō),每個(gè)消費(fèi)者組都可以拿到這個(gè)Topic中的全部數(shù)據(jù)。消費(fèi)者組內(nèi)的所有消費(fèi)者協(xié)調(diào)在一起來(lái)訂閱并消費(fèi)Kafka Topic中的所有分區(qū)。這里,每個(gè)分區(qū)只能由同一個(gè)消費(fèi)者組內(nèi)的一個(gè)消費(fèi)者來(lái)消費(fèi)。

這里,為了更好的理解,我們簡(jiǎn)單的畫(huà)一張Kafka消費(fèi)消息的原理圖,如下所示。

搞懂Kafka的這個(gè)問(wèn)題,你離大廠(chǎng)就不遠(yuǎn)了!

在這張圖中,一個(gè)主題可以配置幾個(gè)分區(qū),生產(chǎn)者發(fā)送的消息分發(fā)到不同的分區(qū)中,消費(fèi)者接收數(shù)據(jù)的時(shí)候是按照消費(fèi)者組來(lái)接收的,Kafka確保每個(gè)分區(qū)的消息只能被同一個(gè)消費(fèi)者組中的同一個(gè)消費(fèi)者消費(fèi),如果想要重復(fù)消費(fèi),那么需要其他的消費(fèi)者組來(lái)消費(fèi)。Zookeerper中保存每個(gè)主題下的每個(gè)分區(qū)在每個(gè)消費(fèi)者組中消費(fèi)的offset。

新版kafka把這個(gè)offset保存到了一個(gè)__consumer_offsert的主題下。?這個(gè)__consumer_offsert有50個(gè)分區(qū),通過(guò)將消費(fèi)者組的id哈希值P的值來(lái)確定要保存到那一個(gè)分區(qū)。這樣也是為了考慮到Zookeeper不擅長(zhǎng)大量數(shù)據(jù)讀寫(xiě)的原因。

所以,如果要一個(gè)消費(fèi)者組用幾個(gè)消費(fèi)者來(lái)同時(shí)消費(fèi)Kafka中消息的話(huà),需要多線(xiàn)程來(lái)讀取,一個(gè)線(xiàn)程相當(dāng)于一個(gè)消費(fèi)者實(shí)例。當(dāng)消費(fèi)者的數(shù)量大于分區(qū)的數(shù)量時(shí),有些消費(fèi)者線(xiàn)程會(huì)讀取不到數(shù)據(jù)。

擴(kuò)展知識(shí)

這里,我們舉一個(gè)例子:假設(shè)一個(gè)主題 test 被groupA消費(fèi)了,現(xiàn)在啟動(dòng)另外一個(gè)新的groupB來(lái)消費(fèi)test,默認(rèn)test-groupB的Offset不是0,而是還是在Kafka中還沒(méi)有建立這樣的一個(gè)Offset,除非當(dāng)test主題有數(shù)據(jù)的時(shí)候,groupB會(huì)收到該數(shù)據(jù),該條數(shù)據(jù)也是第一條數(shù)據(jù),此時(shí),groupB的Offset也是剛初始化的Offset, 除非用顯式的用–from-beginning 來(lái)獲取從0開(kāi)始的數(shù)據(jù)。

題目解答

多個(gè)Kafka消費(fèi)者要想同時(shí)消費(fèi)相同Topic下的相同Partition的數(shù)據(jù),則需要將這些Kafka消費(fèi)者放到不同的消費(fèi)者組中。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀(guān)點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專(zhuān)欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
關(guān)閉