最近工作上有個需求,需要把prometheus 採集到的資料上報到kafka訊息佇列,看了下官方實現,prometheus 支援remote_write / remote_read 的方式擴充套件,可以在此基礎上做文章。
1、從環境變數讀取配置(不夠靈活,後續不好優化,不能做到配置熱載入)
2、把client 物件建立的邏輯放到了http handler裡面(每次prometheus 呼叫/write 介面,都要new乙個物件...)
3、使用golang kafka 外掛程式sarama 的同步生產者方式寫資料(資料量大的情況下,效能可能跟不上)
於是自己動手寫乙個外掛程式,練練手。
**比較簡單,就是以外掛程式的方式部署介面卡,接收prometheus 產生的資料並通過非同步kafka 生產者模式,將資料輸送給kafka。
大致邏輯是這樣:
1、從配置檔案中獲取kafka相關配置
2、本地監聽9201 埠提供http 服務供prometheus 寫入資料
3、從/write api 獲取到prometheus監控資料後,將資料寫入到channel
4、起乙個kafka 非同步生產者,從channel裡面讀取監控資料,並寫入到kafka
**具體**:
訊息佇列 訊息佇列
輪詢排程 一次性分發所有訊息,保證訊息平均分配,不管消費者是否能正常消費 訊息應答 保證消費端能確實消費,不丟失 公平 乙個乙個分發所有訊息,在保證分發到的執行緒確認回覆後,才分發下個訊息給下個空閒的消費者,訊息持久化 保證佇列中的訊息不丟失,包括3要素 交換器 訊息佇列 訊息都必須宣告持久化 發布...
訊息佇列 訊息佇列 kafka
kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...
linux訊息佇列 Linux訊息佇列
訊息佇列,unix的通訊機制之一,可以理解為是乙個存放訊息 資料 容器。將訊息寫入訊息佇列,然後再從訊息佇列中取訊息,一般來說是先進先出的順序。可以解決兩個程序的讀寫速度不同 處理資料速度不同 系統耦合等問題,而且訊息佇列裡的訊息哪怕程序崩潰了也不會消失。最簡單的訊息記憶體的使用流程 ftok函式生...