大家好,我是君哥。
使用消息队列可以帮助我们实现系统解耦、流量管控等功能。但使用过程中可能会遇到各种各样的问题,比如系统资源使用率高、集群节点宕机等,进而影响我们生产业务正常开展。为了不让消息队列失控,增加监控是非常必要的。今天来聊一聊 Kafka 有哪些重要的监控指标。
1 基础指标
基础指标是监控系统常见的监控指标,这里介绍 4 个方面:
- CPU、内存、硬盘、网络 I/O 等资源使用情况,Kafka 提供了 BytesIn/BytesOut 指标来监控带宽使用率;
- TCP 连接数、文件描述符使用情况;
- JVM 监控指标,Kafka 也是一个 JVM 进程,需要监控堆内存使用情况、FULL GC 频率和时长、JVM 线程数等;
- 网络延迟。
2 Broker 指标
2.1 UnderReplicatedPartitions
Kafka 分区 Leader 节点收到消息后,会同步给 Follower 节点。集群健康的情况下,UnderReplicatedPartitions 值等于 0,这时同步正常的 Follower 节点数量(也就是 ISR)等于总的 Follower 节点数量。如果这个指标值大于0,比如等于 1,说明有一个 Follower 同步异常,如下图:
图片
2.2 ISRShrink/ISRExpand
这个指标表示 ISR 收缩和扩容的频率。如果这个指标的值很高,那集群中必定有 Follower 节点频繁地进入或退出 ISR。这个时候就需要定位有 Follower 频繁进出 ISR 的原因。
2.3 ActiveControllerCount
Kafka Broker 集群中有一个节点是 Controller 节点,这个节点非常重要,负责监听 Partition、Topic 和 Broker 的变化,以及元数据管理。
ActiveControllerCount 指标表示当前 Broker 节点是否是 Controller 节点,集群健康的情况下,有且仅有一个 Broker 节点这个指标值是 1。如果有多个 Broker 这个指标值是 1,或者所有 Broker 指标值都是 0,就需要进行故障排查。
图片
2.4 offlinePartitionCount
这个指标只有 Controller 节点有。表示处于不可用状态的 Partition 的数量,也就是 Partition 没有活跃的 Leader 节点的数量。健康的集群,这个值是 0,如果这个值不是 0,就得尽快排查原因,防止影响业务。
2.5 LeaderElectionRateAndTimeMs
当分区 Leader 节点挂了之后,就会触发选举新的 Leader。这个指标值表示选举新 Leader 的频率(每秒多少次)和集群中无 Leader 节点的时长。触发 Leader 选举,肯定是旧的 Leader 下线,所以需要定位分析原因。
2.6 UncleanLeaderElectionsPerSec
当 Broker 集群找不到分区 Leader 时,需要从 ISR 集合中选出新的 Leader 节点。而如果 ISR 集合没有节点,那就得从未同步的 Follower 中选出 Leader 节点,让集群处于可用状态,但这个时候因为消息未同步,会有消息丢失。所以这个指标有数据时,代表可能有消息丢失。
2.7 TotalTimeMs
Broker 处理一笔请求的总时间。比如处理 Producer 发送请求、Consumer 拉取请求、Follower 拉取请求。这个时间如果出现了比较大的波动,需要查看 Broker 的资源情况并考虑应对方案。
3 Producer
生产者也可以加一些指标来监控发送消息的情况。
3.1 request-latency-avg
平均请求时间,这个指标包括生产者发送消息到收到响应的延迟,这个指标会影响 Producer 端的吞吐量。
3.2 waiting-threads
发送缓存区中阻塞的用户线程数,如果这个指标变高,意味着生产者被阻塞的线程数变高,需要排查原因。
4 Consumer
4.1 records-lag
消费者在当前分区上落后于生产者的数量,如果这个值变大,有可能当前这个分区的消息量突增,也可能消费者消费能力下降,需要关注。
5 总结
Kafka 的监控指标非常多,关键指标是必须要监控的,其他指标可以根据需要添加,同时也可以加入日志相关的监控。希望本文能对你理解 Kafka 有所帮助。