You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过命令或开放API获取Kafka分区的统计信息(如大小、事件数)

获取Kafka分区统计信息的方法

一、命令行工具方式

Kafka自带的命令行工具可以快速获取分区核心统计数据,无需额外依赖。

1. 查看分区大小及日志段信息

使用kafka-log-dirs.sh(Windows环境用.bat脚本)可查看分区日志大小、日志段数量等信息:

# 查询指定broker上目标主题的分区日志详情
./kafka-log-dirs.sh --bootstrap-server localhost:9092 --describe --topic-list your_topic_name

输出重点关注字段:

  • size:分区总日志大小(字节)
  • logStartOffset:分区起始偏移量
  • logEndOffset:分区最新偏移量
  • segmentCount:分区包含的日志段数量

2. 计算指定主题分区的事件数量

事件总数等于分区最新偏移量与起始偏移量的差值,可通过GetOffsetShell工具获取这两个值:

# 获取分区最早偏移量
./kafka-run-class.sh kafka.tools.GetOffsetShell --bootstrap-server localhost:9092 --topic your_topic_name --time -2 --partition 0

# 获取分区最新偏移量
./kafka-run-class.sh kafka.tools.GetOffsetShell --bootstrap-server localhost:9092 --topic your_topic_name --time -1 --partition 0

将两次输出的偏移量相减,即可得到该分区内的事件总数。批量查询可结合shell循环实现。

二、开放API方式

如果需要程序化获取数据,可通过Kafka官方API或REST接口实现。

1. Kafka AdminClient API(Java示例)

使用AdminClient直接查询分区元数据与统计信息:

import org.apache.kafka.clients.admin.AdminClient;
import org.apache.kafka.clients.admin.AdminClientConfig;
import org.apache.kafka.clients.admin.DescribeLogDirsResult;
import org.apache.kafka.common.TopicPartition;

import java.util.Collections;
import java.util.Map;
import java.util.Properties;
import java.util.concurrent.ExecutionException;

public class KafkaPartitionStats {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Properties props = new Properties();
        props.put(AdminClientConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
        try (AdminClient adminClient = AdminClient.create(props)) {
            TopicPartition targetPartition = new TopicPartition("your_topic_name", 0);
            DescribeLogDirsResult result = adminClient.describeLogDirs(Collections.singleton(targetPartition));
            
            Map<TopicPartition, Map<String, Object>> stats = result.all().get();
            stats.forEach((partition, dirStats) -> {
                long logSize = (long) dirStats.get("size");
                long startOffset = (long) dirStats.get("logStartOffset");
                long endOffset = (long) dirStats.get("logEndOffset");
                long eventCount = endOffset - startOffset;
                
                System.out.println("分区: " + partition);
                System.out.println("日志大小(字节): " + logSize);
                System.out.println("事件总数: " + eventCount);
            });
        }
    }
}

2. REST API方式(以Confluent REST Proxy为例)

部署Confluent REST Proxy后,可通过HTTP请求获取分区统计:

# 获取指定主题所有分区信息
curl -X GET "http://localhost:8082/topics/your_topic_name/partitions"

# 获取单个分区的详细统计
curl -X GET "http://localhost:8082/topics/your_topic_name/partitions/0"

返回结果包含offset_min、offset_max、size等字段,可直接用于计算事件数量和查看分区大小。

内容的提问来源于stack exchange,提问作者Nitul

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:45:32