領英(LinkedIn)今天宣佈了一個可擴展的日誌存儲系統 Northguard,它取代了 Kafka,以及一個虛擬化的 Pub/Sub 層 Xinfra。 Northguard 提供了分片數據和元數據、日誌條帶化、強一致性和自平衡集群,規模比 Kafka 更大,而 Xinfra 則實現了在 Kafka 和 Northguard 之間的無縫遷移和統一訪問。
根據 LinkedIn 的工程師表示,Kafka 在 LinkedIn 的規模下(每天 32T 記錄、17PB 數據、400K 主題、150 個集群)變得越來越難以管理。 Northguard 的架構由共用數據和元數據、去中心化協調和最小全域狀態組成,消除了 Kafka 的單控制器和基於分區的限制。
Northguard 的數據模型將日誌組織成記錄、段、範圍和主題。 記錄(鍵、值、頭)被寫入段——不可變的複製單元。 段形成範圍,代表連續的鍵空間切片,支持動態分割和合併,以實現擴展和排序。 另一方面,主題是覆蓋整個鍵空間的範圍集合,具有靈活的存儲策略,可用於複製和保留。
包含三個段的 Northguard 範圍(來源)
這種細粒度結構實現了平衡負載、高可用性和無縫擴展。 當生產者產生新的段時,代理自然會自我平衡,從而消除了在添加代理或代理失敗時進行昂貴的重新平衡或數據移動的需求。
新段被添加到範圍中,並被分配給可能的新代理(來源)
與傳統的 索引分區 相比,範圍提供了更靈活的擴展機制。 範圍分割只中斷用戶端對受影響範圍(而不是整個主題)的寫入,同時保持總排序保證。 這種差異減少了中斷,並避免了昂貴的「停止世界」同步。 此外,跨主題對齊的範圍通過減少對洗牌的需要來簡化流處理連接。
Northguard 的元數據模型使用分片的、基於 Raft) 複製狀態機(DS-RSM),分佈在虛擬節點上。 每個虛擬節點管理主題、範圍和段的元數據——跟蹤狀態變化(例如,拆分、合併、密封)、副本集和保留策略。 通過使用一致性哈希分片元數據和去中心化協調,Northguard 避免了 Kafka 的控制器瓶頸,並支援數百萬副本的強一致性和高可用性。
LinkedIn 為性能和持久性優化了 Northguard 的協定。 元數據操作(如創建、刪除、查詢)使用路由到虛擬節點領導者的單一請求 / 回應調用。 生產、消費和複製流是帶有管道和視窗的會話化流協定,以最大化輸送量和最小化延遲。
生產者寫入活躍的段領導者,只有在所有副本上 fsync 后才接收確認,確保強持久性。 消費者使用帶有用戶端控制流的類似流模型,支援高效的高輸送量讀取。 活動段複製和密封段複製利用相同的高效流架構,從而實現 Northguard 的高性能和自我修復能力。
在 LinkedIn 的規模上,從 Kafka 遷移到 Northguard 需要為數千個關鍵應用程式實現無縫、零停機轉換。 為了支援這一點,LinkedIn 構建了 Xinfra,一個虛擬化的 Pub/Sub 層,抽象了物理集群。 Xinfra 通過雙寫機制使主題能夠跨越 Kafka 和 Northguard,允許在不更改客戶端的情況下進行即時遷移。
一個示例用例,其中消費者訂閱了同一虛擬集群下的三個主題,每個主題位於不同的集群中(來源)
Northguard 中的分段存儲是可插拔的,預設的“fps-store”實現針對持久性和延遲進行了優化。 它使用提前寫日誌(write-ahead log, WAL),每個段創建一個檔,應用 Direct I/O 來繞過 OS 緩衝,並在 RocksDB 中維護一個稀疏索引。 在幾毫秒內刷新和跨副本同步成批記錄,即使在故障情況下也能確保持久性。 這種設計避免了緩存不一致,支援從舊段中高效讀取,並允許隨著集群的增長而預測性能。
為了確保大規模的可靠性,Northguard 在確定性類比下進行了嚴格的測試。 整個集群和用戶端在單線程的受控環境中運行,在這種環境中,故障(如代理關閉、網路分區、磁碟錯誤和滾動升級)會被注入和重放。 這種方法允許 LinkedIn 每天類比多年的活動,及早捕捉邊緣情況,並在複雜的故障場景下持續驗證正確性。
LinkedIn 的工程師表示,他們“已經成功地將數千個主題從 Kafka 遷移到 Northguard,每天處理數萬億條記錄”,並且 LinkedIn 超過 90% 的應用程式已經在運行 Xinfra 用戶端了。
InfoQ 聯繫了 LinkedIn,希望將 Northguard 和 Xinfra 開源。 LinkedIn 表示,他們「專注於在我們內部系統中完成 Northguard 和 Xinfra 的實施,並且隨著我們繼續構建、學習和反覆運算這些工具,我們將探索開源它們的可能性。 ”
原文連結:
https://www.infoq.com/news/2025/06/linkedin-northguard-xinfra/
聲明:本文由 InfoQ 翻譯,未經許可禁止轉載。
後續我將通過微信視頻號,以視頻的形式持續更新技術話題、未來發展趨勢、創業經驗、商業踩坑教訓等精彩內容,和大家一同成長,開啟知識交流之旅
歡迎掃碼關注我的微信視頻號~