1. “消費(fèi)組中的消費(fèi)者個(gè)數(shù)如果超過(guò)topic的分區(qū),那么就會(huì)有消費(fèi)者消費(fèi)不到數(shù)據(jù)”這句話是否正確?如果正確,那么有沒(méi)有什么hack的手段?
答案:正確,可以通過(guò)自定義分區(qū)分配策略,將消費(fèi)者指定到某個(gè)分區(qū)。
2. 有哪些情形會(huì)造成重復(fù)消費(fèi)或消息丟失?
答案:
2.1當(dāng)poll部分消息集后,立即提交offset,在這部分消息集處理,可能會(huì)發(fā)生異常,這就導(dǎo)致部分消息丟失。
2.2位移提交的動(dòng)作是在消費(fèi)完所有拉取到的消息之后才執(zhí)行的,中間可能發(fā)生異常,恢復(fù)后重新重新拉取,可能會(huì)導(dǎo)致重復(fù)消費(fèi)
3. KafkaConsumer是非線程安全的,那么怎么樣實(shí)現(xiàn)多線程消費(fèi)?
答案:
3.1在每個(gè)線程中新建一個(gè)KafkaConsumer
3.2單線程創(chuàng)建KafkaConsumer,多個(gè)處理線程處理消息(難點(diǎn)在于是否要考慮消息順序性,offset的提交方式)
4. 當(dāng)你使用kafka-topics.sh創(chuàng)建(刪除)了一個(gè)topic。
答案:
創(chuàng)建:
1)會(huì)在zookeeper中的/brokers/topics節(jié)點(diǎn)下創(chuàng)建一個(gè)新的topic節(jié)點(diǎn),如:/brokers/topics/first
2)觸發(fā)Controller的監(jiān)聽(tīng)程序
3)kafka Controller 負(fù)責(zé)topic的創(chuàng)建工作,并更新metadata cache
刪除:
調(diào)用腳本刪除topic會(huì)在zk上將topic設(shè)置待刪除標(biāo)志,kafka后臺(tái)有定時(shí)的線程會(huì)掃描所有需要?jiǎng)h除的topic進(jìn)行刪除
5. topic的分區(qū)數(shù),增減問(wèn)題。
答案:分區(qū)只能增加,不能減少(若是減少分區(qū)需要考慮的問(wèn)題太多,事物性問(wèn)題,順序性問(wèn)題,時(shí)間戳問(wèn)題,但是收益太小),副本可以減少。
更多關(guān)于大數(shù)據(jù)培訓(xùn)的問(wèn)題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項(xiàng)目實(shí)操的話可以點(diǎn)擊咨詢課程顧問(wèn),獲取試聽(tīng)資格來(lái)試聽(tīng)我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門(mén)到精通。