本文介绍如何通过E-MapReduce,从Kafka客户端采集Metrics数据,从而有效地进行性能监控。
前提条件
已创建Kafka集群,详情请参见创建集群。
说明 本文以EMR-3.21.3版本为例介绍。
背景信息
Kafka提供了一套非常完善的Metrics数据,覆盖Broker、Consumer、Producer、Stream以及Connect 。E-MapReduce通过Ganglia收集了Kafka Broker Metrics信息,可以监控Broker运行状态。Kafka应用包括Kafka Broker和Kafka客户端这两个角色,当出现读写性能问题时,仅从Broker角度难以分析,因此可以结合客户端的运行状况联合分析。
本文实现原理如下:
- 收集Metrics
因为Metrics默认提供了包含JmxReporter的Metrics Reporter插件扩展功能,即可以通过JMX工具来查看Kafka的Metrics ,所以可以使用Metrics Reporter(实现org.apache.kafka.common.metrics.MetricsReporter)来自定义收集Metrics。
- 存放Metrics因为Kafka是一种存储系统,所以可以将Metrics存储至Kafka中。优势如下:
- 无需第三方存储系统。
- 数据可以接入到其他系统中。
完整的客户Metrics采集方案如下图所示。

操作步骤
- 通过SSH方式登录集群。详情请参见登录集群。
- 执行如下命令,下载emr-kafka-client-metrics包。
wget https://repo1.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-1.4.3.jar为例介绍。
- 执行如下命令,复制JAR包至/usr/lib/kafka-current/libs/目录。
cp emr-kafka-client-metrics-1.4.3.jar /usr/lib/kafka-current/libs/ - 执行如下命令,创建一个测试Topic。
kafka-topics.sh --zookeeper emr-header-1:2181 --partitions 10 --replication-factor 2 --topic test-metrics --create - 配置Producer的配置项至client.conf文件中。
- 新建client.conf文件。
vim 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
- 新建client.conf文件。
- 执行如下命令以消费Metrics默认的_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.***.***, client.process=25536@emr-header-1.cluster-***, 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采集的时间戳。 group Metric所属的组。 tag.client-id 客户端所在服务器的ID。
该文章对您有帮助吗?