获取 Kafka Topic 的大小方法
- 通过 Kafka 自带工具 (
kafka-log-dirs.sh
)
运行以下命令,列出 broker 上存储的所有 topic 的日志大小:
输出示例:/opt/kafka/bin/kafka-log-dirs.sh --bootstrap-server <BROKER> --describe --topic-list <TOPIC_NAME>
这里的Broker 0: Topic: my-topic Partition: 0 Size: 10485760
Size
是以字节为单位的。
-
通过 JMX 监控
启用 Kafka 的 JMX Exporter,查看指标kafka.log:type=Log,name=Size,topic=<TOPIC_NAME>,partition=<PARTITION>
,可以得到特定 partition 的大小。 -
通过 Prometheus(结合 JMX Exporter)
- JMX Exporter 配置:
JMX Exporter 会暴露类似以下指标:kafka_log_size{topic="my-topic",partition="0",...} 10485760
- 使用 Prometheus 查询:
这会返回指定 topic 的总大小(所有分区的大小之和)。sum(kafka_log_size{topic="my-topic"})
- JMX Exporter 配置:
- 直接检查 Kafka 数据目录
如果您有 Kafka broker 服务器的访问权限,可以直接查看日志存储路径:du -sh /path/to/kafka/logs/<TOPIC_NAME>/
Prometheus Kafka 监控的常用指标
-
Topic 和 Partition 相关指标
kafka_log_size
: 每个分区的大小。kafka_topic_partition_underreplicated_partition
: 未同步副本分区数量。kafka_topic_partition_replicas
: 每个分区的副本数量。
-
Consumer 消费相关
kafka_consumer_lag
: 消费延迟(即生产者和消费者之间未消费的消息差距)。
-
生产者性能
kafka_producer_incoming_byte_rate
: 生产者的输入速率(字节/秒)。kafka_producer_outgoing_byte_rate
: 生产者的输出速率(字节/秒)。
-
系统资源
kafka_server_request_queue_size
: 请求队列大小。kafka_network_request_rate
: 网络请求速率。
示例 Prometheus 查询语句:
-
获取某个 topic 的分区总大小:
sum(kafka_log_size{topic="my-topic"})
-
获取所有 topic 的分区大小排名:
topk(5, sum(kafka_log_size) by (topic))
-
获取未消费消息的总数:
sum(kafka_consumer_lag)
通过以上方法,您可以方便地获取 topic 大小和关键的监控数据指标。