具代表性的面試主題

Kafka Tiered Storage:面試如何設計本地與遠端保留策略?

資料困難
Offer.cc 編輯團隊發佈 更新

題幹

如果 Kafka 主題需要保留多年歷史資料,你會如何設計 Tiered Storage 的本地與遠端保留策略?

題幹與適用場景

面試官可能會問:「如果 Kafka 主題需要保留多年歷史資料,你會如何設計 Tiered Storage 的本地與遠端保留策略?」

題目核心不是背一個設定名稱,而是解釋日誌段在本地層和遠端層之間的生命週期。KIP-405 的模型保留 Kafka broker 上的本地層,同時把完成的日誌段上傳到外部儲存;本地保留時間或大小可以短於遠端保留,以降低 broker 磁碟壓力。回答還必須涵蓋遠端物件儲存故障、歷史讀取延遲、刪除責任和回滾路徑。

面試官考察點

  • 是否理解 tiered storage 是日誌段級別的冷熱分層,而非把 Kafka 直接變成物件儲存。
  • 是否能區分叢集級能力、主題級 remote.storage.enable 和本地/遠端保留策略。
  • 是否能估算熱資料磁碟、遠端容量、上傳落後和歷史讀取頻寬。
  • 是否考慮遠端儲存不可用、元資料一致性、分區遷移和消費者重播。
  • 是否明確遠端資料刪除的責任邊界,避免誤刪或無限增長。

回答前需要釐清的問題

  • 哪些主題需要遠端歷史,是否所有主題都啟用?
  • 熱讀延遲目標和歷史回放吞吐是多少?
  • 本地磁碟預算、遠端儲存類別、跨區域要求和合規保留期是什麼?
  • 遠端物件儲存故障時,生產、即時消費和歷史消費分別如何降級?
  • 刪除策略按時間、大小、合規事件還是租戶保留策略執行?

30 秒回答框架

可以這樣回答:

我會把 Kafka 的本地層當作低延遲熱快取,把已完成日誌段複製到遠端層,再分別定義本地和遠端保留。主題按需要開啟 remote.storage.enable,先用本地保留時間控制 broker 磁碟,再用遠端保留滿足稽核和回放期限。設計中要量化上傳落後、遠端讀取延遲、物件儲存故障和分區遷移,並明確遠端物件由誰清理。即時消費走本地路徑,歷史重播接受額外延遲並設定限速和監控。

分步驟深入解答

先建立兩層生命週期

Kafka 仍以分區日誌段為基本單位。活躍段寫入本地層;滾動完成後,遠端日誌管理元件把段及其索引資訊寫入設定的遠端儲存。客戶端不應假設每個歷史位元組都還在 broker 本地磁碟:

text
producer -> leader broker local segment
                    | segment roll
                    v
             remote object store
consumer <---- local cache or remote fetch

本地層適合低延遲消費,遠端層承擔較長保留期。上傳完成和本地刪除之間需要可觀測的安全窗口,不能因為「物件已建立」就忽略索引或元資料狀態。

用主題級開關控制範圍

Apache Kafka 文件說明叢集側完成設定後,主題仍需透過 remote.storage.enable 選擇是否使用 tiered storage。回答時應說明預設關閉或按主題啟用的治理方式,避免把所有主題都遷移到遠端而放大成本與故障面。

分離本地與遠端保留

本地保留可以按時間或大小設定較小窗口,保證熱資料和重平衡所需的讀取能力;遠端保留覆蓋稽核、回放和合規期限。兩個窗口必須滿足業務不變量:在遠端上傳確認、元資料可讀和恢復演練通過之前,不能刪除本地唯一副本。遠端刪除也要有獨立稽核和失敗重試。

設計讀取路徑與故障降級

即時消費者優先讀取本地層,跨越本地窗口的 offset 觸發遠端讀取。遠端變慢時,限制歷史回放並保護即時流量;遠端不可用時,明確哪些 offset 暫不可讀、如何告警和如何恢復。分區遷移、leader 變更和 broker 重啟都應驗證本地快取與遠端元資料的重建時間。

高品質示範回答

我先確認主題的熱讀窗口、歷史回放吞吐、保留期和合規要求。架構上按 KIP-405 把 broker 本地層作為熱快取,日誌段滾動後上傳到遠端物件儲存;只有需要歷史的主題開啟 remote.storage.enable。本地保留按磁碟預算和即時重播需求設定,遠端保留按稽核期限設定,兩者之間以「遠端物件、索引和元資料可驗證」為刪除前置條件。消費者讀取本地窗口時保持原有低延遲,超出窗口的回放走遠端並限速,防止拖垮即時流。我會監控上傳落後、遠端讀取延遲、快取命中、物件與元資料不一致、刪除失敗和不可讀 offset,並演練物件儲存故障、broker 重啟和分區遷移。遠端物件清理必須有明確 owner、稽核和恢復流程,不能依賴 broker 磁碟刪除自動完成。

常見錯誤

  • 說 tiered storage 會把所有 Kafka 資料即時寫入物件儲存,忽略日誌段滾動和本地熱層。
  • 只給叢集級開關,不提主題級 remote.storage.enable
  • 只計算物件儲存成本,不估算遠端讀取延遲、上傳落後和回放頻寬。
  • 認為刪除 broker 本地檔案會自動刪除遠端物件,忽略 KIP-405 的清理責任。
  • 遠端故障時讓歷史回放搶占即時消費資源。
  • 沒有物件、索引和遠端元資料一致性的監控與恢復演練。

追問及應對

1. 本地保留時間應如何確定?

從即時消費者最大回溯窗口、磁碟預算、重平衡恢復時間和故障期間安全餘量倒推。不要只按平均消費延遲設定;應覆蓋峰值回放和 broker 維護窗口。

2. 遠端物件儲存短暫不可用怎麼辦?

暫停或限速跨窗口讀取,保留本地可讀範圍並告警上傳和讀取失敗。生產與即時消費繼續按已驗證的本地容量運作,遠端恢復後再補償歷史讀取;對不可讀 offset 提供明確狀態,不能偽造空資料。

3. 如何驗證刪除不會造成資料遺失?

在刪除本地段前驗證遠端物件、索引和元資料可讀取,並記錄段範圍。刪除遠端物件時執行保留策略稽核、抽樣讀取和恢復演練;把刪除失敗、孤兒物件和元資料缺口納入告警與定期盤點。

公開來源

同類題目