1. “消費組中的消費者個數如果超過topic的分區,那么就會有消費者消費不到數據”這句話是否正確?如果正確,那么有沒有什么hack的手段?
答案:正確,可以通過自定義分區分配策略,將消費者指定到某個分區
2. 有哪些情形會造成重復消費或消息丟失?
答案:
1)當poll部分消息集后,立即提交offset,在這部分消息集處理,可能會發生異常,這就導致部分消息丟失。
2)位移提交的動作是在消費完所有拉取到的消息之后才執行的,中間可能發生異常,恢復后重新重新拉取,可能會導致重復消費
3. KafkaConsumer是非線程安全的,那么怎么樣實現多線程消費?
答案:
1)在每個線程中新建一個KafkaConsumer
2)單線程創建KafkaConsumer,多個處理線程處理消息(難點在于是否要考慮消息順序性,offset的提交方式)
4. 當你使用kafka-topics.sh創建(刪除)了一個topic
答案:
創建:
1)會在zookeeper中的/brokers/topics節點下創建一個新的topic節點,如:/brokers/topics/first
2)觸發Controller的監聽程序
3)kafka Controller 負責topic的創建工作,并更新metadata cache
刪除:
調用腳本刪除topic會在zk上將topic設置待刪除標志,kafka后臺有定時的線程會掃描所有需要刪除的topic進行刪除
5. topic的分區數,增減問題
答案:分區只能增加,不能減少(若是減少分區需要考慮的問題太多,事物性問題,順序性問題,時間戳問題,但是收益太小),副本可以減少
6. 內部topic
_consumeroffsets:作用是保存 Kafka 消費者的位移信息,logCleaner線程來完成清除無用的提交(沒有消息消費了,默認5s一直在提交);
_transactionstate:用來存儲事務日志消息
7. 優先副本選舉
答案:解決當某個主機down機后,部分主機會有多個leader 副本,導致負載不均衡,優先副本選舉就是解決此問題,生產上不建議開啟,可以手動控制。
8. 副本怎么同步?
答案:所謂同步,必須滿足兩個條件:
副本節點必須能與zookeeper保持會話(心跳機制)
副本能復制leader上的所有寫操作,并且不能落后太多(卡主或滯后的副本控制由replica.lag.time.max.ms配置)
利用HW,LEO進行復制同步。
9. 如果我指定了一個offset,Kafka怎么查找到對應的消息?
答案:
1)跳躍表找到分段文件
2)利用稀疏索引(.index),通過二分法定位到相鄰的offset
3)接著在segment順序查找
更多關于大數據培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。