前段時(shí)間業(yè)務(wù)團(tuán)隊(duì)偶爾會碰到一些 Pulsar 使用的問題,比如消息阻塞不消費(fèi)了、生產(chǎn)者消息發(fā)送緩慢等各種問題。
雖然我們有個(gè)監(jiān)控頁面可以根據(jù) topic 維度查看他的發(fā)送狀態(tài),比如速率、流量、消費(fèi)狀態(tài)等信息。
本文重點(diǎn)不在于此,具體代碼就不仔細(xì)分析了。
從上圖可以看出,如果我們想要監(jiān)控消費(fèi)是否存在阻塞的情況,這幾個(gè)內(nèi)部隊(duì)列是需要重點(diǎn)監(jiān)控的,一旦他們出現(xiàn)堆積,那就會出現(xiàn)消費(fèi)阻塞。
其實(shí)這些數(shù)據(jù)都可以通過。
org.apache.pulsar.client.api.ProducerStatsorg.apache.pulsar.client.api.ConsumerStats
這兩個(gè)接口獲取到生產(chǎn)者和消費(fèi)者的大部分指標(biāo),只是這里還有一個(gè)小插曲。
那就是在獲取消費(fèi)者隊(duì)列大小的時(shí)候,獲取到的數(shù)據(jù)一直為空。
最終經(jīng)過源碼排查,原來是我們大量使用的 messageListener 在獲取隊(duì)列大小時(shí)有 bug,導(dǎo)致獲取到的數(shù)據(jù)一直都為 0.
相關(guān)的 issue 和 PR 可以在這兩個(gè)鏈接查看,問題原因和修復(fù)過程都有具體描述:https://github.com/apache/pulsar/issues/20076 https://github.com/apache/pulsar/pull/20245
但這個(gè)修復(fù)得在新版本才能使用,就導(dǎo)致我們現(xiàn)在的監(jiān)控頁面一直顯示為空。
然后就是開發(fā)一個(gè) SkyWalking 的插件了,其實(shí)直接使用 SW 開發(fā)插件是上手 Java-Agent 比較快的方式。
SW 的 SDK 封裝了許多 agent 原生接口,使得開發(fā)起來非常容易;當(dāng)然缺點(diǎn)也有,就是得集成整個(gè) SW 的 agent。
這里我簡單介紹下這個(gè)插件的運(yùn)行流程:
當(dāng)消費(fèi)多分區(qū) topic 時(shí),為了能唯一標(biāo)志一個(gè) consumer,所以給每個(gè)消費(fèi)者都加了一個(gè) hashcode 的 label。
因?yàn)槲覀兯械?Java 技術(shù)棧都是使用的 Prometheus 的包來生成 metrics ,所以該插件也是使用該包生成的數(shù)據(jù)。
<dependency> <groupId>io.prometheus</groupId> <artifactId>simpleclient</artifactId> <version>0.12.0</version> <scope>provided</scope> </dependency>
為了兼容一些特殊 Java 應(yīng)用沒有該包時(shí)會啟動(dòng)報(bào)錯(cuò),所以在初始化插件的時(shí)候需要檢測當(dāng)前 classpath
下是否存在該依賴。
這些功能 SW 已經(jīng)封裝好了,對我們來說也是開箱即用。
其實(shí) SW 插件自己也是支持 metrics 的,由于我們只是使用了它的 trace 功能,所以這里就沒有使用它的 API。
關(guān)于開發(fā)一個(gè) SW 插件的流程也比較簡單,可以參考官方文檔或者是一些現(xiàn)成的插件源碼。https://skywalking.apache.org/docs/skywalking-java/next/en/setup/service-agent/java-agent/java-plugin-development-guide/
有了這個(gè)監(jiān)控面板后,對于 Pulsar 客戶端內(nèi)部的一些運(yùn)行情況就不再是黑盒了,還可以基于此做一些報(bào)警,比如消費(fèi)堆積、發(fā)送延遲過大等。
當(dāng)然僅僅只有這個(gè)面板依然是不夠的,后續(xù)我們又開發(fā)了可以通過 messageId
查詢它的整個(gè)生命周期,包括:
同時(shí)借助與 Pulsar-SQL 的能力,還能以列表的形式展示當(dāng)前 topic 的消息列表。
當(dāng)然在實(shí)現(xiàn)這兩個(gè)功能的同時(shí)也踩了不少坑,提了幾個(gè) PR ,后面在抽時(shí)間做具體的分享。
本文鏈接:http://www.rrqrq.com/showinfo-26-91-0.html從 Pulsar Client 的原理到它的監(jiān)控面板
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com