kafka消費組延遲小工具

語言: CN / TW / HK

theme: channing-cyan highlight: an-old-hope


小知識,大挑戰!本文正在參與“程式設計師必備小知識”創作活動。

前言

無意中看到一個Go寫的kafka消費組延遲檢查的小工具(Burrow),當然還帶了一些其他小功能

官網地址: https://github.com/linkedin/Burrow

特色介紹:
- 支援多kafka叢集 - 支援檢視topic詳情 - 支援檢視消費組和消費組狀態、延遲 - 支援emailer和http方式通知 - 提供http api請求訪問和返回json資料格式

安裝

直接下載官網提供的包,沒有必要去搞環境打包: https://github.com/linkedin/Burrow/releases 根據自已的系統下載

下載 ```js

下載

wget https://github.com/linkedin/Burrow/releases/download/v1.3.6/Burrow_1.3.6_linux_amd64.tar.gz

建立目錄

mkdir ktool

解壓包

mv Burrow_1.3.6_linux_amd64.tar.gz ktool tar xf Burrow_1.3.6_linux_amd64.tar.gz

```

配置

修改配置檔案內容 ```js

將目錄改一名,因為程式碼預設讀取conf目錄

mv config conf cd conf ```

配置如下,將ip{1-3} 換成自已的zk,kafka的ip

vim conf/burrow.toml ```js [general] pidfile="burrow.pid" stdout-logfile="burrow.out" access-control-allow-origin="*"

[logging] filename="logs/burrow.log" level="info" maxsize=100 maxbackups=30 maxage=10 use-localtime=false use-compression=true

[zookeeper] servers=[ "ip1:2181" ] timeout=6 root-path="/burrow"

[client-profile.test] client-id="burrow-test" kafka-version="0.10.0"

[cluster.local] class-name="kafka" servers=[ "ip1:9092", "ip2:9092", "ip3:9092" ] client-profile="test" topic-refresh=120 offset-refresh=30

[consumer.local] class-name="kafka" cluster="local" servers=[ "ip1:9092", "ip2:9092", "ip3:9092" ] client-profile="test" group-denylist="^(console-consumer-|python-kafka-consumer-|quick-).*$" group-allowlist=""

[consumer.local_zk] class-name="kafka_zk" cluster="local" servers=[ "ip1:2181" ] zookeeper-path="/kafka-cluster" zookeeper-timeout=30 group-denylist="^(console-consumer-|python-kafka-consumer-|quick-).*$" group-allowlist=""

[httpserver.default] address=":8000" [storage.default] class-name="inmemory" workers=20 intervals=15 expire-group=604800 min-distance=1 ```

啟動

啟動命令 js cd ktool ./burrow -config-dir conf 如時顯示了 Reading configuration from conf 然後一直卡住,說明啟動成功

使用

因該專案只有介面,沒有UI介面,訪問方式就是請求http api介面,返回kafka相關json資料資訊

wiki文件: https://github.com/linkedin/Burrow/wiki/HTTP-Endpoint

image.png

在linux伺服器安裝一個jq(命令列json解析工具),然後來訪問測試

檢視所有topic js curl -s http://127.0.0.1:8000/v3/kafka/local/topic | jq . 檢視所有消費組 js curl -s http://127.0.0.1:8000/v3/kafka/local/consumer | jq . 檢視topic詳情 topic名字為maxwell js curl -s http://127.0.0.1:8000/v3/kafka/local/topic/maxwell | jq . 檢視某個消費組詳情 消費組名字為maxwell_test1 js curl -s http://127.0.0.1:8000/v3/kafka/local/consumer/maxwell_test1 | jq .

image.png 可以看到該maxwell有5個分割槽,目前第3分割槽有11110個訊息 (分割槽是0,1,2,3,4 所以看上去像第4分割槽)

檢視某個消費組滯後

js curl -s http://127.0.0.1:8000/v3/kafka/local/consumer/maxwell_test1/lag | jq .

image.png

  • maxwell_test1消費組 總的延遲為9062
  • 最新消費到offset為1990
  • 目前消費組的狀態是停止的
  • 該消費組訂閱的topic是maxwell

總結

作為一個檢視消費組詳情的小工具來說,還是挺給力的