天天看點

E-MapReduce上如何采集Kafka用戶端Metrics

1. 背景

我們知道Kafka提供一套非常完善的Metrics資料,覆寫Broker,Consumer,Producer,Stream以及Connect。E-MapReduce通過Ganglia收集了Kafka Broker metrics資訊,可以很好地監控Broker運作狀态。但完整的Kafka應用包括Kafka Broker和Kafka 用戶端這兩個角色,當發生讀寫性能問題時,常常從Broker角度難以發現問題,需要結合用戶端的運作狀況來聯合分析才行。那麼Kafka用戶端metrics就是一類非常重要的資料。E-MapReduce是如何進行Kafka用戶端metrics采集的呢?

(歡迎關注E-MapReduce開源項目:

https://github.com/aliyun/aliyun-emapreduce-sdk

2. 實作

2.1 如何采集metrics

Kafka提供了Metrics Reporter的插件擴充功能,預設提供了JmxReporter實作,也即我們已經可以通過JMX工具來檢視Kafka的Metrics。是以,我們可以自己實作一套Metrics Reporter(實作org.apache.kafka.common.metrics.MetricsReporter),來自定義擷取這些Metrics。

2.3 如何存放metrics

以上我們可以實作自定義的采集Kafka Metrics,還需要選擇一個存儲系統将這些metrics存儲起來,以便後續的使用和分析。考慮到Kafka自身就是一種存儲系統,我們可以将Metrics存儲到Kafka中,這有幾種優勢:

  • 無需第三方存儲系統支援
  • 資料很友善地接入到其他系統中

是以,完整的用戶端metrics采集方案如下圖:

E-MapReduce上如何采集Kafka用戶端Metrics

E-MapReduce提供了一個開源實作emr-kafka-client-metrics,源碼

位址

3. 測試

我們無需自己編譯,E-MapReduce已經向Maven釋出了Jar包,直接下載下傳最新版本即可,

3.1 配置

配置項 說明
metric.reporters 使用emr的實作:org.apache.kafka.clients.reporter.EMRClientMetricsReporter
emr.metrics.reporter.bootstrap.servers metrics存儲Kafka叢集的bootstrap.servers
emr.metrics.reporter.zookeeper.connect metrics存儲Kafka叢集的Zookeeper位址

3.2 如何加載

有兩種方式:

  • 将emr-kafka-client-metrics的jar包放在機器上,用戶端程式的Classpath可以加載到即可
  • 直接将emr-kafka-client-metrics依賴打進用戶端程式jar包中

3.3 使用教程

本次測試将在E-MapReduce Kafka叢集上進行示範。

  • 下載下傳最新版本emr-kafka-client-metrics包
wget http://central.maven.org/maven2/com/aliyun/emr/
emr-kafka-client-metrics/1.4.3/emr-kafka-client-metrics-1.4.3.jar           
  • 将emr-kafka-client-metrics包放到Kafka的lib中
cp emr-kafka-client-metrics-1.4.3.jar /usr/lib/kafka-current/libs/           
  • 建立一個測試Topic
kafka-topics.sh --zookeeper emr-header-1:2181/kafka-1.0.1--partitions 10 
--replication-factor 2 --topic test-metrics  --create           
  • 向測試topic寫入資料,這裡我們将producer的配置項配置到本地檔案client.conf中。
## client.conf:
metric.reporters=org.apache.kafka.clients.reporter.EMRClientMetricsReporter
emr.metrics.reporter.bootstrap.servers=emr-worker-1:9092
emr.metrics.reporter.zookeeper.connect=emr-header-1:2181/kafka-1.0.1
bootstrap.servers=emr-worker-1:9092
## 指令:
kafka-producer-perf-test.sh --topic test-metrics --throughput 1000 --num-records 100000 
--record-size 1024 --producer.config client.conf           
  • 檢視這次用戶端的metrics,注意預設的metrics topic是_emr-client-metrics
kafka-console-consumer.sh --topic _emr-client-metrics --bootstrap-server emr-worker-1:9092 
--from-beginning           

傳回的消息如下所示:

{prefix=kafka.producer, client.ip=192.168.xxx.xxx, [email protected], 
attribute=request-rate, value=894.4685104965012, timestamp=1533805225045, group=producer-metrics, 
tag.client-id=producer-1}           
字段名
client.ip 用戶端所在機器IP
client.process 用戶端程式程序ID
attribute metric屬性名
value metric值
timestamp metric采集的時間錯
tag.xxx metric其他tag資訊

4. 一些限制

  • 隻支援Java類用戶端程式
  • 隻支援0.10之後版本Kafka用戶端
上一篇: ES6(Promise)
下一篇: ES6(Generator)