為了讓業務團隊可以更好的跟蹤自己訊息的生產和消費狀態,需要一個類似於表格檢視的訊息列表,使用者可以直觀的看到傳送的訊息;同時點選詳情後也能查到訊息的整個軌跡。
訊息列表
點選詳情後檢視軌跡
由於 Pulsar
並沒有關係型資料庫中表的概念,所有的資料都是儲存在 Bookkeeper
中,為了模擬使用 SQL 查詢的效果 Pulsar 提供了 Presto
(現在已經更名為 Trino
)的外掛。
Trino 是一個分散式的 SQL 查詢引擎,它也提供了外掛能力,如果我們想通過 SQL 從自定義資料來源查詢資料時,基於它的 SPI 編寫一個外掛是很方便的。
這樣便可以類似於查詢資料庫一樣查詢 Pulsar
資料:
Pulsar 外掛的執行流程如上圖所示:
Pulsar-Admin
介面獲取一些後設資料,比如 Scheme,topic 分割區資訊等。相關程式碼:
使用起來也很簡單,官方提供了兩個命令:
自己在本地執行的時候自然是沒問題,可是一旦想在生產執行,同時如果你的 Pulsar
叢集是執行再 k8s
環境中時就會碰到一些問題。
首先第一個問題是如果生產環境已經有了一個 Trino
叢集想要複用的時候就會碰到問題,常規流程是將 Pulsar
的外掛複製到 Trino
的 Plugin
目錄,然後重啟 Trino
後就能使用該外掛。
當然社群也是支援這麼做的:
但是當我將 Pulsar-plugin 複製到 Trino 中執行的時候卻失敗了,整體的流程可以參考這個 issue:
https://github.com/apache/pulsar/discussions/20941
簡單來說 Trino
的官方映象和 pulsar-plugin
並不能相容,這個問題直接影響到我們是否可以在生產環境使用它。
但是手動編譯出來的 Trino
服務和外掛是相容的,可以直接執行。
因此我只能在本地編譯出 Trino 伺服器端和 pulsar-plugin
然後打包成一個映象來執行了,當然這樣的壞處就是無法利用到我們現有的 Trino
叢集,又得重新部署一個了。
流程也比較麻煩:
Pulsar-SQL
模組make docker
打出 docker 映象並上傳到私服kubectl
將 trino 部署到 k8s
環境中整個流程做下來加上和社群的溝通,更加確定這個功能應該是很少有人在生產環境使用的,畢竟第一個坑就很麻煩,更別提後續的問題了