Kafka面试题与答案全套整理
轉載自?Kafka面試題與答案全套整理
1. Kafka的用途有哪些?使用場景如何?
總結下來就幾個字:異步處理、日常系統解耦、削峰、提速、廣播
如果再說具體一點例如:消息,網站活動追蹤,監測指標,日志聚合,流處理,事件采集,提交日志等
2. Kafka中的ISR、AR又代表什么?ISR的伸縮又指什么
ISR:In-Sync Replicas 副本同步隊列
AR:Assigned Replicas 所有副本
ISR是由leader維護,follower從leader同步數據有一些延遲(包括延遲時間replica.lag.time.max.ms和延遲條數replica.lag.max.messages兩個維度, 當前最新的版本0.10.x中只支持replica.lag.time.max.ms這個維度),任意一個超過閾值都會把follower剔除出ISR, 存入OSR(Outof-Sync Replicas)列表,新加入的follower也會先存放在OSR中。AR=ISR+OSR。
3. Kafka中的HW、LEO、LSO、LW等分別代表什么?
HW:High Watermark 高水位,取一個partition對應的ISR中最小的LEO作為HW,consumer最多只能消費到HW所在的位置上一條信息。
LEO:LogEndOffset 當前日志文件中下一條待寫信息的offset
HW/LEO這兩個都是指最后一條的下一條的位置而不是指最后一條的位置。
LSO:Last Stable Offset 對未完成的事務而言,LSO 的值等于事務中第一條消息的位置(firstUnstableOffset),對已完成的事務而言,它的值同 HW 相同
LW:Low Watermark 低水位, 代表 AR 集合中最小的 logStartOffset 值
4. Kafka中是怎么體現消息順序性的?
kafka每個partition中的消息在寫入時都是有序的,消費時,每個partition只能被每一個group中的一個消費者消費,保證了消費時也是有序的。
整個topic不保證有序。如果為了保證topic整個有序,那么將partition調整為1.
5. Kafka中的分區器、序列化器、攔截器是否了解?它們之間的處理順序是什么?
攔截器->序列化器->分區器
6. Kafka生產者客戶端的整體結構是什么樣子的?
7. Kafka生產者客戶端中使用了幾個線程來處理?分別是什么?
2個,主線程和Sender線程。主線程負責創建消息,然后通過分區器、序列化器、攔截器作用之后緩存到累加器RecordAccumulator中。Sender線程負責將RecordAccumulator中消息發送到kafka中.
9. Kafka的舊版Scala的消費者客戶端的設計有什么缺陷?
10. “消費組中的消費者個數如果超過topic的分區,那么就會有消費者消費不到數據”這句話是否正確?如果不正確,那么有沒有什么hack的手段?
不正確,通過自定義分區分配策略,可以將一個consumer指定消費所有partition。
11. 消費者提交消費位移時提交的是當前消費到的最新消息的offset還是offset+1?
offset+1
12. 有哪些情形會造成重復消費?
消費者消費后沒有commit offset(程序崩潰/強行kill/消費耗時/自動提交偏移情況下unscrible)
13. 那些情景下會造成消息漏消費?
消費者沒有處理完消息 提交offset(自動提交偏移 未處理情況下程序異常結束)
14. KafkaConsumer是非線程安全的,那么怎么樣實現多線程消費?
1.在每個線程中新建一個KafkaConsumer
2.單線程創建KafkaConsumer,多個處理線程處理消息(難點在于是否要考慮消息順序性,offset的提交方式)
15. 簡述消費者與消費組之間的關系
消費者從屬與消費組,消費偏移以消費組為單位。每個消費組可以獨立消費主題的所有數據,同一消費組內消費者共同消費主題數據,每個分區只能被同一消費組內一個消費者消費。
16. 當你使用kafka-topics.sh創建(刪除)了一個topic之后,Kafka背后會執行什么邏輯?
創建:在zk上/brokers/topics/下節點 kafkabroker會監聽節點變化創建主題
刪除:調用腳本刪除topic會在zk上將topic設置待刪除標志,kafka后臺有定時的線程會掃描所有需要刪除的topic進行刪除
17. topic的分區數可不可以增加?如果可以怎么增加?如果不可以,那又是為什么?
可以
18. topic的分區數可不可以減少?如果可以怎么減少?如果不可以,那又是為什么?
不可以
19. 創建topic時如何選擇合適的分區數?
根據集群的機器數量和需要的吞吐量來決定適合的分區數
20. Kafka目前有那些內部topic,它們都有什么特征?各自的作用又是什么?
__consumer_offsets 以下劃線開頭,保存消費組的偏移
21. 優先副本是什么?它有什么特殊的作用?
優先副本 會是默認的leader副本 發生leader變化時重選舉會優先選擇優先副本作為leader
22. Kafka有哪幾處地方有分區分配的概念?簡述大致的過程及原理
創建主題時
如果不手動指定分配方式 有兩種分配方式
消費組內分配
23. 簡述Kafka的日志目錄結構
每個partition一個文件夾,包含四類文件.index .log .timeindex leader-epoch-checkpoint
.index .log .timeindex 三個文件成對出現 前綴為上一個segment的最后一個消息的偏移 log文件中保存了所有的消息 index文件中保存了稀疏的相對偏移的索引 timeindex保存的則是時間索引
leader-epoch-checkpoint中保存了每一任leader開始寫入消息時的offset 會定時更新
follower被選為leader時會根據這個確定哪些消息可用
24. Kafka中有那些索引文件?
如上
25. 如果我指定了一個offset,Kafka怎么查找到對應的消息?
1.通過文件名前綴數字x找到該絕對offset 對應消息所在文件
2.offset-x為在文件中的相對偏移
3.通過index文件中記錄的索引找到最近的消息的位置
4.從最近位置開始逐條尋找
26. 如果我指定了一個timestamp,Kafka怎么查找到對應的消息?
原理同上 但是時間的因為消息體中不帶有時間戳 所以不精確
27. 聊一聊你對Kafka的Log Retention的理解
kafka留存策略包括 刪除和壓縮兩種
刪除: 根據時間和大小兩個方式進行刪除 大小是整個partition日志文件的大小
超過的會從老到新依次刪除 時間指日志文件中的最大時間戳而非文件的最后修改時間
壓縮: 相同key的value只保存一個 壓縮過的是clean 未壓縮的dirty 壓縮之后的偏移量不連續 未壓縮時連續
28. 聊一聊你對Kafka的Log Compaction的理解
29. 聊一聊你對Kafka底層存儲的理解(頁緩存、內核層、塊層、設備層)
30. 聊一聊Kafka的延時操作的原理
31. 聊一聊Kafka控制器的作用
32. 消費再均衡的原理是什么?(提示:消費者協調器和消費組協調器)
33. Kafka中的冪等是怎么實現的
pid+序號實現,單個producer內冪等
33. Kafka中的事務是怎么實現的(這題我去面試6家被問4次,照著答案念也要念十幾分鐘,面試官簡直湊不要臉。實在記不住的話…只要簡歷上不寫精通Kafka一般不會問到,我簡歷上寫的是“熟悉Kafka,了解RabbitMQ….”)
34. Kafka中有那些地方需要選舉?這些地方的選舉策略又有哪些?
35. 失效副本是指什么?有那些應對措施?
36. 多副本下,各個副本中的HW和LEO的演變過程
37. 為什么Kafka不支持讀寫分離?
38. Kafka在可靠性方面做了哪些改進?(HW, LeaderEpoch)
39. Kafka中怎么實現死信隊列和重試隊列?
40. Kafka中的延遲隊列怎么實現(這題被問的比事務那題還要多!!!聽說你會Kafka,那你說說延遲隊列怎么實現?)
41. Kafka中怎么做消息審計?
42. Kafka中怎么做消息軌跡?
43. Kafka中有那些配置參數比較有意思?聊一聊你的看法
44. Kafka中有那些命名比較有意思?聊一聊你的看法
45. Kafka有哪些指標需要著重關注?
生產者關注MessagesInPerSec、BytesOutPerSec、BytesInPerSec 消費者關注消費延遲Lag
46. 怎么計算Lag?(注意read_uncommitted和read_committed狀態下的不同)
參考 如何監控kafka消費Lag情況
47. Kafka的那些設計讓它有如此高的性能?
零拷貝,頁緩存,順序寫
48. Kafka有什么優缺點?
49. 還用過什么同質類的其它產品,與Kafka相比有什么優缺點?
50. 為什么選擇Kafka?
吞吐量高,大數據消息系統唯一選擇。
51. 在使用Kafka的過程中遇到過什么困難?怎么解決的?
52. 怎么樣才能確保Kafka極大程度上的可靠性?
53. 聊一聊你對Kafka生態的理解
confluent全家桶(connect/kafka stream/ksql/center/rest proxy等),開源監控管理工具kafka-manager,kmanager等
參考
總結
以上是生活随笔為你收集整理的Kafka面试题与答案全套整理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 屋塔房王世子大结局是什么
- 下一篇: Hadoop入门(三)HDFS API