kafka面試總結
本文為複習期間面試總結
從以下方面對kafka面試進行總結:基本原理架構/項目實踐/生產者/消費者/協調者/存儲層/控制器
基本原理架構
-
簡單講下什麼是kafka[一句話概括/架構圖]
-
消息隊列選型 你們為什麼不選用其他消息隊列
-
ZK 在消息隊列中的作用是什麼
註冊中心[作為共享存儲保存了kafka集群和客戶端的相關信息] -
broke ISR AR Topic Partition Offset ConsumerGroup
- Partition: kafka分區模型 每個分區都是一個有序的獨立的不可變的記錄序列,新的消息會不斷-的追加到序列末尾,分區的offset都是從0開始。kafka只能保證消息在單個分區的有序
- Offset:偏移量 通過offset+partition+topic可以定位到唯一一條消息
- broke:消息代理服務器 可以認為是一台獨立的機器
- Topic:消息主題
- ConsumerGroup:消費者組
- ISR:副本冗餘[正在和主副本保持同步的備份副本 只要ISR中還有一個節點是存活的就能保證消息不丟失 主副本和備份副本都有消息,主掛可切換副]
- AR: 所有副本[包含主副本和正在同步的副本]
- OSR:被踢出ISR的叫OSR,當同步進度追上 會重新加入ISR
-
kafka有那些消息模型
隊列模型和發佈訂閱 kafka使用消費者組統一了上面2種消息模型。[隊列1對1/訂閱1對多]
-
kafka為什麼這麼快
追加方式寫入 producer層選擇分區並行寫入數據[避免全量消息提交到協調階段在計算分區] 使用消息batch[消息批 減少通訊次數] -
kafka follower如何與leader同步數據
-
kafka節點之間消息如何備份的
-
kafka消息是否會丟失為什麼
-
kafka的lead選舉機制是什麼
-
kafka 的消息保障方式有那些
項目實踐
-
ACK 0 -1 1分別代表什麼
- [-1] 也就all 需要等待ISR中所有都同步完成
- 1 默認的只需要等待主副本同步完成即可
- 0 不確認就開始發送下一條消息
-
你們使用了kafka事務嗎
-
消息隊列丟失數據如何處理
這個問題可以分為三個方面 生產者 消費者 消息隊列
- 生產者方面我們使用的異步回調的方式,在收到回調的時候若消息沒有發送成功,我們會記錄再次發送。
- 消費者 消費者的數據丟失可以認為是提交了offset但是數據處理失敗了,我們使用的手動提交在處理成功後在提交offset 不會遇到這個問題。但是要注意消息處理時間不能過長,如果處理過長還沒提交offset管理者可能會認為當前消費者下線從而觸發reblance
- 消息隊列數據丟失 我們在kafka配置了
ack = -1
要求所有ISR都確認同步了消息才給producer發送ack 所以可以保證消息不會丟失。
生產者
-
生產者消息發送的幾種方式
同步阻塞 異步非阻塞 [都是通過send方法實現的] -
生產者如何為消息選取分區的
若消息沒有設置key loadblance寫入partition。如設置了key
murmur2(key) mod PartitionNum
-
簡單講下生產者的工作流程
1.主線程將消息封裝到ProducerRecord[partition/key/value/key/時間戳]
2.client對ProducerRecord進行序列化
3.根據分區策略確定分區[無key輪詢有key murmur2(key) mod PartitionNum]
4.將消息放入緩存區[每一個分區對應一個雙端隊列,] 由sender線程將一個批次的消息batch的消息發送到對應的broker -
生產者如何批量的發送消息
sender的作用:歸類消息為每個目標節點建立一個請求
sender線程並不真正發送客戶端請求 sender線程會去遍歷記錄收集器中根據分區分好組的消息batches,將相同目標節點[NodeId]的batches的消息歸類,為相同目標節點的[NodeId]創建一個請求發送消息。
1.消息放入記錄收集器時會按分區進行分組,存放到對應的batches,分區隊列保存了即將發送消息的批記錄。
2.sender線程可以使用單線程迭代
消費者
-
什麼是管理者
管理者是消費者組中的概念,用於對同一個消費者組中的所有消費者進行協調。
-
什麼是reblance
簡單來說就是消費者消費消息出現不均衡,會通過reblance達到動態平衡的過程。通常有如下幾個方面
- 消費者組訂閱的主題發生變化
- 消費者消費的分區數量出現變化
- 消費者組中的消費者數量發生變化
-
消費者什麼時候會再次加入消費者組
消費者只有在出現reblance的時候會出現再次加入消費者,分為如下步驟1.消費者準備好自身狀態2.和協調者發送加入消費者組的請求3.成功加入消費者組,分配分區開始消費消息。
-
說下2種消費模式
消費模式可分為訂閱模式和分配模式
- 訂閱模式 消費者訂閱指定主題,由協調者協調消費的分區
- 分配模式 由消費者指定消費的分區。此時協調者不參與
我們項目中有4個分區,使用的訂閱模式 設置了4個消費者。每個消費者獨立消費一個分區[由協調者安排]
-
ISR HW LEO 之間的關係
- ISR 正在主副本保持備份的副本
- HW high wather高水位 一般指的是ISR中同步主副本的進度最慢的副本當前正在同步的消息的offset,在HW之前的消息都可以被消費者拉取到
- LEO log end offset 當前主副本中正在寫入的消息 一般是當前分區中最後一條消息的offset+1
當主副本有消息寫入的時候,follower會主動向leader獲取消息,每次讀消息都會更新HW當HW大於等於LEO時候可以認為是同步完成,副本管理者會想producer報告ack確認消息保存成功。
參考資料
- kafka實戰
- kafka技術內幕
- kafka在公司項目實踐