Linux环境下Kafka监控的核心指标分类及说明
一、Broker核心指标
Broker是Kafka集群的核心节点,其监控指标直接反映集群的稳定性和性能:
- UnderReplicatedPartitions:处于“未同步”状态的Partition数量(即ISR集合外的副本数)。若该值持续大于0,说明副本同步出现问题,可能导致数据丢失。
- ActiveControllerCount:当前活跃的Controller数量(Kafka集群中负责分区Leader选举的节点)。正常情况下应始终为1,若为0则表示集群失去主控,无法进行Leader选举。
- OfflinePartitionsCount:离线Partition数量(无Leader的Partition)。若该值大于0,说明部分Partition无法提供服务,需立即排查Broker宕机或分区Leader选举失败问题。
- UncleanLeaderElectionsPerSec:未清理Leader选举的频率(即非ISR副本成为Leader的次数)。该值越高,数据丢失风险越大,需通过
min.insync.replicas
参数限制非ISR副本成为Leader的可能性。
- BytesInPerSec/BytesOutPerSec:Kafka集群的每秒入站/出站字节数(吞吐量)。反映集群的数据流入流出速度,可用于评估集群负载是否饱和。
- RequestHandlerIdleRatio:请求处理器空闲比例(1 - 忙碌线程数/总线程数)。若该值长期低于0.3,说明Broker处理能力不足,需增加Broker节点或调整线程池配置。
- JVM指标:包括堆内存使用率(
MemHeapUsedPercent
)、Full GC次数(FullGCCount
)、线程数(ThreadCount
)。JVM内存泄漏或频繁Full GC会导致Broker停顿,影响集群可用性。
二、Topic与Partition核心指标
Topic和Partition是Kafka存储和转发的基本单位,其监控指标用于评估数据分布和存储状态:
- MessagesInPerSec:Topic每秒消息生产速率(生产者发送到Topic的消息数)。反映Topic的写入负载,可用于判断是否需要扩容分区。
- BytesInPerSec/BytesOutPerSec:Topic每秒入站/出站字节数(生产者写入和消费者读取的字节数)。结合分区数可计算每个分区的平均吞吐量。
- LogSize/LogEndOffset:Partition日志文件的总大小(
LogSize
)和最新偏移量(LogEndOffset
)。两者的差值即为未消费的消息量(需结合消费者偏移量计算Lag)。
- PartitionCount:Topic的分区数量。分区数过少会导致并行度不足,过多会增加ZooKeeper负担,需根据业务需求调整。
- ISR(In-Sync Replicas)数量:与Leader副本保持同步的副本数量(
IsrCount
)。若ISR数量低于min.insync.replicas
配置值,生产者发送消息会失败(除非设置acks=0
),需确保ISR数量满足可靠性要求。
三、Producer核心指标
Producer负责向Kafka发送消息,其监控指标用于评估消息发送的可靠性和性能:
- RecordSendRate:每秒发送的消息数(生产者成功发送到Broker的消息数)。反映生产者的写入速率,若持续低于预期,可能是网络问题或Broker负载过高。
- RecordRetryRate:每秒重试发送的消息数(生产者因失败而重试的消息数)。重试次数过多说明网络不稳定或Broker不可用,需检查网络连接或Broker状态。
- RequestLatencyAvg:请求平均延迟(生产者发送请求到收到响应的时间)。延迟过高会影响生产者的吞吐量,需优化网络或调整Broker参数(如
num.network.threads
)。
- Errors/FailedBatches:发送失败的次数/批次(生产者发送失败的消息数或批次数)。若该值持续大于0,需检查生产者配置(如
acks
、retries
)或Broker是否正常。
四、Consumer核心指标
Consumer负责从Kafka消费消息,其监控指标用于评估消费的及时性和可靠性:
- ConsumerLag(FetchLag):消费者消费滞后量(
LogEndOffset
- ConsumerOffset
)。反映消费者处理消息的速度,若Lag持续增长,说明消费者处理能力不足,需增加消费者实例或优化消费逻辑。
- RecordsConsumedRate:每秒消费的消息数(消费者成功处理的消息数)。反映消费者的消费速率,若持续低于生产者速率,会导致消息堆积。
- FetchRequestsPerSec:每秒Fetch请求次数(消费者向Broker请求消息的次数)。若该值过高,可能是消费者批量大小(
fetch.max.bytes
)设置过小,需调整参数以提高吞吐量。
- RebalanceCount/Frequency:消费者组Rebalance次数/频率(消费者组重新分配分区的次数)。过于频繁的Rebalance会影响消费性能,需检查消费者实例的稳定性(如是否频繁宕机)或
session.timeout.ms
配置。
五、集群与操作系统指标
集群和操作系统的状态直接影响Kafka的运行,需监控以下基础指标:
- ZooKeeper指标(Kafka 2.8前):包括ZooKeeper连接数(
ZooKeeperConnections
)、请求延迟(ZooKeeperRequestLatencyAvg
)、内存使用(ZooKeeperMemoryUsed
)。ZooKeeper是Kafka的核心协调服务,其异常会导致集群无法正常工作。
- 操作系统指标:
- 磁盘:磁盘使用率(
DiskUsage
)、I/O等待时间(DiskIOWait
)、inode使用率(InodeUsage
)。磁盘满或I/O瓶颈会导致Broker性能下降。
- CPU:CPU使用率(
CpuUsage
)、负载平均值(LoadAverage
)。CPU过载会导致请求延迟增加。
- 网络:网卡入流量/出流量(
NetInBytes
/NetOutBytes
)、连接数(TcpConnections
)。网络带宽不足会影响数据传输效率。