如何使用 Druid 和 Kafka 構造 Kappa 架構完成流量分析

weixin_34253539發表於2019-01-23

NTT 是一家全球電信公司,總部設在日本東京。在《財富》世界 500 強中,NTT 是世界第四大電信公司。NTT 通訊 (NTT Com) 是 NTT 的子公司,其全球 IP 網路 (GIN) 業務部擁有並運營著全球最大的一級 IP 骨幹網之一,為歐洲、北美、南美、亞洲、大洋洲等主要國家提供高速、高容量的 IP 通訊服務。

任何網際網路主幹的核心活動之一都是流量分析,它支援對許多技術方面 (容量規劃、流量工程等)、經濟方面(資源優化、收入洩漏檢測等) 和安全用例的全球流量進行視覺化分析。NTT GIN 的流量分析以 “流量矩陣” 為中心,它表示給定 Internet 域中所有可能的源和目的地對之間的所有流量。通過為這些資料提供實時流量視覺化和快速解釋的能力,我們為整個組織釋放了巨大的商業價值。

NTT GIN 遺留的流量分析系統存在以下幾個問題:

  1. 這是一個黑盒子,很難進行故障排除並擴充套件以新增新功能,無論是在後端還是前端。
  2. 它沒有以經濟高效的方式進行擴充套件。
  3. 特定分析能力有限,而這對於快速理解資料異常而言非常重要。

\"image\"

當我們考慮對技術設施進行現代化改造時,我們評估了新構建流量分析的解決方案,而不是購買現有產品。因為我們注意到現有產品中的主要問題是,沒有一款產品能夠精確匹配我們的需求。要知道我們是一家規模龐大的公司,需要大量定製功能來進行流量分析,儘管有些產品確實包含了允許我們進行擴充套件的 API,但仍然面臨著兩個問題:產品的高成本,以及擴充套件產品所需的工程資源數量。如果我們要投入工程資源的話,就需要更多的靈活性和控制力,因此,我們決定構建一個解決方案。

當我們開始評估解決方案時,我們將重點放在能夠擴充套件到我們的資料量的技術(即 “大資料” 技術)上,並測試了我們想要構建的新堆疊的每個部分的各種替代方案。最終,我們確定了一種設計,其中我們的核心架構將包含兩個元件:用於從流量矩陣傳遞資料的事件匯流排,以及用於收集、儲存和分析這些資料的查詢系統。一組由工程師組成的團隊對資料管道的不同部分進行了評估。經過深入評估之後,我們選擇了 Apache Kafka 作為事件匯流排,部分原因是由於它在內部測試期間所展現出來的可擴充套件性、可靠性及效能。而查詢系統則選擇了 Apache Druid。儘管有許多開源和商業解決方案可供選擇,但我們對 Druid 在內部測試時的表現印象特別深刻。與面向日誌搜尋 / 面向文件的資料庫相比,我們發現,Druid 在大規模分析方面更高效,而且與時間序列資料庫相比,在接受、儲存和查詢相同數量的資料時,所需的資源更少。特別是 Druid 在提供非時間維度的SQL GROUP BYWHERE查詢方面非常出色,而這正是對我們的流量矩陣進行特定分析的重要功能。

除了 Druid 的查詢功能之外,它最重要的特點之一就是能夠與 Kafka 進行本地整合。Druid 可以從 Kafka 精確地使用一次資料,並允許我們構建完整的端到端流分析堆疊。這種型別的體系結構成為 Kappa 體系架構,最初是在博文 Questioning the Lambda Architecture(《Lambda 架構的問題》https://www.oreilly.com/ideas/questioning-the-lambda-architecture)提到的。NTT GIN 是世界上最早在實踐中實施這種創新體系架構的公司之一,到目前為止,它不僅解決了我們傳統解決方案的問題,還讓我們得以能夠在此前從未有過的資料探索中建立新用例。為完成我們堆疊,我們與 Druid 幕後的公司 Imply 合作,並利用他們的 Pivot UI 進行資料分析。Pivot 易於進行特定分析。通過簡單地拖放資料庫維度來生成各種特定視覺化,非常簡單,這點對我們理解異常資料模式而言至關重要。

\"image\"

現在,我們的新棧在生產環境中執行,每秒接收超過 10 萬次事件。雖然大多數 UI 工具(尤其是以流量為中心的 UI 工具)僅針對一類使用者設計:通常用於操作(容量分析)、工程(直接分析流量矩陣),或開發中。但我們通過 Kafka、Druid、Imply 的 Pivot 的解決方案,能夠使組織中許多不同級別的使用者能夠自由探索資料,而不會限制他們訪問預定義儀表板。使用者已經掌握了用於容量分析、流量矩陣分析和域間流量分析(對等分析)的新用例。使用者還可以建立自己的自定義儀表板,並在不同團隊中自由分享見解。

通過為網路流量分析奠定堅實的基礎,併為基礎設施 / 拓撲資料、轉發平面資料和控制平面資料提供單一環境,我們現在計劃擴充套件工作範圍,並新增更多資訊源來關聯資料。這包括用於主動測量的資料(翻翻時間、抖動、資料包丟失等)、網路路徑質量,以及用於域間擼油安全分析的 RPKI/ROA 驗證,這對於第一層網路骨幹網的全球網際網路的穩定性來說,至關重要。

如果你遇到與我們類似的情況,我們強烈建議你去了解 Apache Druid 和 Apach Kafka。

原文連結:
https://imply.io/post/kappa-architecture-at-ntt

相關文章