Kafka核心组件之Controller可观测性(5)

268 阅读1分钟

Controller如何实现可观测性?

在整个集群运行过程中,只能有一个Broker成为Controller。所以要监控Controller的数量以及Controller的变更历史。

可以用Kafka的JMXTool,进行轻量级的监控。

KAFKA_PATH/bin/kafkarunclass.shkafka.tools.JmxTooljmxurlservice:jmx:rmi:///jndi/rmi://"{KAFKA\_PATH}/bin/kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://"{BrokerIP}":"${JMXPort}"/jmxrmi --object-name kafka.controller:type=KafkaController,name=ActiveControllerCount --date-format "YYYY-MM-dd_HH:mm" --reporting-interval -1 | grep -v type

记录Controller变更历史:

function inter_controller_history()

{

#第一次检测集群Controller

if [ ! -f "${clusterID}"_controller_history ]; then

awk '/,1/ {print 0}' "clusterID"_controller>>"{clusterID}"\_controller >> "{clusterID}"_controller_history

#记录Controller变更历史

else

nowController=(awk/,1(awk '/,1/ {print 0}' "{clusterID}"_controller | awk -F ',' '{print $1}')

LastTimeController=(tailn1"(tail -n 1 "{clusterID}"_controller_history | awk '/,1/ {print 0}' | awk -F ',' '{print $1}')

if [ "nowController_X"!="{nowController}\_X" != "{LastTimeController}_X" ];then

awk '/,1/ {print 0}' "clusterID"_controller>>"{clusterID}"\_controller >> "{clusterID}"_controller_history

msg="msg_tmpclusterID:{msg\_tmp} clusterID:{clusterID} ClusterNameCNControllerFrom{ClusterNameCN} Controller From {LastTimeController} to ${nowController}"

echo "msg">>msg" >> log_file_name

send_warning

fi

fi

}

监控效果:

通过JMXTool,还可以拉取Kafka的其他指标进行监控。例如:

under_replicated_partitions有非同步副本监控。

OfflinePartitionsCount分区丢失leader监控。

KAFKA_PATH/bin/kafkarunclass.shkafka.tools.JmxTooljmxurlservice:jmx:rmi:///jndi/rmi://{KAFKA\_PATH}/bin/kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://{BrokerIP}:"${JMXPort}"/jmxrmi --object-name kafka.controller:type=KafkaController,name=OfflinePartitionsCount --date-format "YYYY-MM-dd_HH:mm" --reporting-interval -1

ZooKeeper_SessionState Broker与Zookeeper断开连接监控。

MessagesInPerSec,进入Broker消费数量监控。

KAFKA_PATH/bin/kafkarunclass.shkafka.tools.JmxTooljmxurlservice:jmx:rmi:///jndi/rmi://"{KAFKA\_PATH}/bin/kafka-run-class.sh kafka.tools.JmxTool --jmx-url service:jmx:rmi:///jndi/rmi://"{BrokerIP}":"${JMXPort}"/jmxrmi --object-name kafka.server:type=BrokerTopicMetrics,name=MessagesInPerSec --date-format "YYYY-MM-dd HH:mm" --attributes Count --reporting-interval -1

ISR扩缩容率等。

监控可以有很多方式,这样做主要是简单方便,不需要依赖太多监控系统,同时监控程序可以快速部署到海外或者合作伙伴机房。

滴滴的最佳实践(Logi-KafkaManager)

对于Controller的管理和监控,我们内部做了相应的封装,并发布了开源产品didi/LogiKM: 一站式Apache Kafka集群指标监控与运维管控平台(github.com/didi/LogiKM),提供完全界面化的Controller监控

有兴趣的同学可以尝试下,用的好别忘了star一下🙏。

博主简介:国内最大最权威的 Kafka中文社区,共享知识,实时掌控最新行业资讯

技术交流:请联系博主微信号:didiyun0125

社区地址: z.didi.cn/5gSF9