案例實踐|Apache Pulsar 在移動雲智慧運維平臺的實踐

ApachePulsar發表於2022-03-02
以下文章來源於人人都學大資料 ,作者Cassie

關於 Apache Pulsar

Apache Pulsar 是 Apache 軟體基金會頂級專案,是下一代雲原生分散式訊息流平臺,集訊息、儲存、輕量化函式式計算為一體,採用計算與儲存分離架構設計,支援多租戶、持久化儲存、多機房跨區域資料複製,具有強一致性、高吞吐、低延時及高可擴充套件性等流資料儲存特性。
GitHub 地址:http://github.com/apache/pulsar/

文章轉自:人人都學大資料,作者:王嘉凌
文章內容整理自:中國移動雲能力中心,移動雲 Pulsar 產品負責人王嘉凌在 Pulsar Summit Asia 2021 的視訊分享內容。

Pulsar Summit Aisa 2021 已在 2022 年 1 月 15-16 日於線上舉辦。會上,30 位嘉賓圍繞 26 個議題,分享了最前沿的 Apache Pulsar 實踐經驗、場景案例、技術探究和運維故事。

下面我們將回顧來自移動雲的王嘉凌工程師分享的 Apache Pulsar 在移動雲智慧運維平臺的應用實踐。

掃描下方圖片檢視完整版視訊回顧:

移動雲智慧運維平臺

移動雲智慧運維平臺是集資源配置、告警指標、效能監控、日誌管理、故障處理等功能為一體的企業級 DevOPS 平臺,幫助運維、研發工作者快速掌握叢集最新態勢,提取關鍵資訊,讓運維工作更便捷。

平臺旨在打造 N+31+X 的資源佈局,面對近 5 萬臺物理機、9000 多網路裝置,搭建這樣一個系統會存在很多現實的問題包括:

  • 物理機在哪個機房、哪個機櫃、哪個機架?物理機有多少核、多少記憶體、多少儲存?
  • 這麼多裝置告警、效能資料怎麼辦?如何採集、處理?
  • 裝置出了故障,如何快速定位,如何排程故障處理人員?
  • 大部分服務是分散式的,日誌散落在不同的節點,如何快速檢索日誌去定位問題?

而這些問題都是需要移動雲智慧運維平臺去解決或者探索的,智維平臺肩負著智慧化集中運維的重大使命。

移動雲智慧運維平臺的總體架構如下:

圖片

其中起到承上啟下作用的是運維資料平臺。運維資料平臺下層對接基礎運維平臺接收採集資料,上層對接運維能力層提供資料查詢和分析的介面。

移動雲團隊選擇 Pulsar 作為運維資料平臺的核心技術,利用 Pulsar 作為資料管道實現資料接入、資料加工,資料消費和資料投遞的能力。基於 Pulsar 的計算儲存分離特性提供了可擴充套件的資料管道;基於 Pulsar Function 計算框架構建統一運維資料加工 DSL,實現高效資料整合;基於 Pulsar Sink 改造實現了運維資料投遞功能,同時基於 PrestoDB 構建統一 SQL,實現 Elasticsearch、ClickHouse 的統一查詢分析,並且通過 DSL 領域翻譯服務提供運維專用查詢分析語法,提高運維查詢效率。

圖片

簡而言之,Pulsar 在運維資料平臺中的作用就是接收日誌資料,進行加工後投遞到 Elasticsearch 和 ClickHouse 中。後者再給上層提供資料查詢和資料分析的能力。

圖片

相較於業界常用的 ELK 或者基於 Kafka 的資料管道方案,選擇 Pulsar 存在明顯的優勢:一方面的話相較於 Kafka 有著更好的運維體驗,這得益於 Pulsar 計算儲存分離的架構以及租戶隔離的機制,同時在穩定性,一致性方面也做了很大的改善;另一方面的話相較於 Logstash,利用 Pulsar Function 進行資料加工有著更好的靈活性和更高的效能。

基於 Pulsar Function 的日誌加工 DSL 實現

Pulsar Function

Pulsar Function 實現了基於 Pulsar 的函式計算,本質上是一個獨立執行的 Java 模組,從 input topic 中接收訊息,在 Function 中對訊息內容進行加工處理,並輸出結果到 output topic 中。

圖片

開發者只需要實現 Function 介面提供訊息的處理邏輯。

圖片

Function worker 是 Function 的配置,排程和執行時管理平臺,提供執行緒,程式,以及 K8s 三種 Function 的執行狀態。

圖片

日誌加工的難題

Pulsar Function 只是提供了執行時的函式計算能力,在實際業務中如何利用 Function 對日誌進行加工,仍然有很多難題:

  • 日誌源在不斷增加,日誌資料差異大。
  • 日誌加工邏輯的需求越來越複雜:結構化、清洗、脫敏、資料分發、多源匯聚、資料富化等等。
  • 如何設計加工函式來動態載入不同的加工邏輯

為了解決這些難題,需要提供一套 DSL 語法,也就是日誌加工專用語法,來靈活地控制並處理原始日誌資料。基於日誌加工邏輯的需求,需要這套 DSL 能夠在計算上提供豐富的函式運算元和場景化自定義邏輯,對於複雜需求則可以通過流程控制、條件判斷實現邏輯組合和編排。

DSL 語法解析

實現 DSL 語法,需要用到語法解析器。移動雲技術團隊使用的是 Antlr4,這款語法解析器也在 Spark 計算引擎中用來解析 SQL,可以根據事先配置好的語法檔案來解析 DSL 語言,為每條語句生成一個 Statement,整個 DSL 就會生成一個 Statement 列表。一個 Statement 包含兩部分資訊,語法關鍵字和引數列表。

然後就可以給每個語法定義加工函式。FunctionArgs 是從 Statsment 中解析出來的加工引數列表,Context 是已經轉為 json 格式的日誌內容。

那麼設定欄位這個通用的語法,就可以實現為從 Context 中找出對於的欄位然後替換掉值這樣的簡單的操作。加工函式的返回值定義為 Context 的 list 是因為存在日誌分裂的場景需要將一條原始日誌拆為多條日誌再進行後續處理。

DAG 執行計劃

完成 DSL 的語法解析之後,需要構建執行計劃並進行執行時排程。這裡採用了 DAG 圖來建模,DAG 表示有向無環圖,Spark 處理資料的時候會將計算轉化為一個 DAG 圖來進行排程,移動雲技術團隊參考了這種思路,將 DSL 解析生成的 Statement 列表轉為 DAG 圖,讓加工過程分解為可平行計算的任務。

DSL 語句:

e_set(...);
e_drop_fields(...);
e_if_else(bool,e_set(...),e_set(...));
e_set(...);
e_output(...);

DAG 圖:

DAG 圖中的每個節點對應一個 Statement,即包含了一個加工函式和對應的加工引數,那麼 DSL 語句的執行就可以轉化為遍歷 DAG 圖並依次執行每個節點對應的加工函式的操作。DAG 有向無環圖的特性可以保證從根節點開始遍歷的過程不會形成閉環,遍歷完尾節點就表示加工處理結束。

DAG 執行排程

解析 DSL 語句並構建 DAG 任務後,下一步需要考慮如何在 Function 中實現排程。整體的設計思路是將加工 DSL 語句以自定義引數的形式傳入 Function 配置引數,事先對 DSL 進行解析並構建出 DAG 任務,然後基於資料驅動流程的方式對每條訊息進行加工。

為 Function 新增 onStart 和 onStop 介面,在啟動 Function 時執行 DSL 解析以及全域性資源初始化。

在 Function 的 Process 介面的實現中只是把訊息內容和對應的 DAG 執行計劃一起放入快取佇列,此時並不做訊息結果投遞和訊息確認。訊息加工和訊息結果投遞這兩種相對比較耗時的處理放在非同步的執行緒池裡執行,完成後再確認訊息。

首先移動雲技術團隊選擇了高效能無鎖佇列 Disruptor 作為快取佇列。Disruptor 使用一個環形陣列 RingBuffer 作為佇列,佇列的生產者和消費者基於 CAS 操作申請可操作元素在陣列中的位置,獲取成功後寫入或者讀取該位置的資料,從而避開了鎖競爭的問題。相比有鎖佇列在效能上有很大的優勢。

最後,移動雲技術團隊選擇的 DAG 執行排程方案是把單個 DAG 節點的處理作為日誌加工執行緒的實現,一條訊息進入日誌加工執行緒後完成當前節點的加工處理,然後選取下游節點和當前訊息加工的處理結果重新放回快取佇列,等待下一次排程。處理完尾結點後進行訊息的投遞和確認,希望可以重複利用執行緒池內部的執行緒來提高資料處理的效率。

以上就是移動雲技術團隊基於 Pulsar Function 的 DSL 日誌加工處理的設計和實現過程,依託該能力,可以輕鬆構建面向資料規範化,結構化等複雜場景的日誌預處理,為後續的日誌查詢分析階段準備資料,同時也極大地降低了運維成本。

展望:基於 BookKeeper 打造全文索引,時序索引融合的分散式資料儲存引擎

目前在 Pulsar Function 中加工完的資料會投遞到 Elasticsearch 和 ClickHouse 中,分別建立索引以便後續的查詢分析使用,加上 Pulsar 本身使用 BookKeeper 對資料的持久化,就會在資料儲存上有很多冗餘。另外雖然 Pulsar 提供了基於 Presto 的 SQL 查詢,但面對海量資料來源的場景下的查詢效能無法滿足要求。

BookKeeper 是一個非常完善的分散式資料儲存引擎,期望能夠結合寫入 BookKeeper 的日誌資料是經過了預處理加工的結構化資料,且不會有更新操作的特性,對 BookKeeper 中的資料建立全文索引和時序索引,讓上層應用可以直接查詢分析 BookKeeper 中儲存的資料。並利用 BookKeeper 的橫向擴充套件能力和分成儲存的特性打造全文索引,時序索引融合的可無限擴容的分散式資料儲存引擎。

相關閱讀


關注公眾號「Apache Pulsar」,獲取更多技術乾貨

加入 Apache Pulsar 中文交流群 ??

點選連結 ,觀看視訊回顧!

相關文章