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

如何以编程方式获取Kafka主题最近一次日志压缩的时间?

获取Kafka主题日志压缩时间戳的直接方法

1. 用JMX指标直接读取(最推荐)

Kafka Broker自带JMX监控指标,能直接拿到日志压缩的时间信息,完全不用解析日志:

  • 核心指标:kafka.log:type=Log,name=LastCleanupTime,topic={你的主题名},partition={分区ID}
    这个指标返回的就是对应分区最近一次日志压缩完成的时间戳(单位毫秒,需转换为可读时间),不管是用jconsole这类工具手动查看,还是用Java JMX API、Python的pyjmx库编程读取都可以。
  • 额外指标:kafka.log:type=Log,name=CleanerCleanupTimeMs,topic={你的主题名},partition={分区ID}
    这个记录的是最近一次压缩的耗时,结合Broker的当前时间,也能推算出压缩完成的时间点。

2. 通过AdminClient API查分区日志状态

用Kafka官方的AdminClient工具,能直接从Broker拉取分区的日志详情,找到压缩相关的时间:

  • 步骤很简单:构造AdminClient实例,调用describeLogDirs()方法,返回的LogDirDescription里包含每个日志段的lastModifiedTime——最近的日志段修改时间基本就是压缩完成的时间。
  • Java示例代码:
try (AdminClient adminClient = AdminClient.create(adminConfigs)) {
    // 替换成你要查的主题、分区和Broker日志目录
    TopicPartition targetPartition = new TopicPartition("orders", 0);
    String logDir = "/path/to/kafka/logs";
    
    DescribeLogDirsResult result = adminClient.describeLogDirs(Collections.singleton(logDir));
    Map<String, Map<TopicPartition, LogDirDescription>> dirDetails = result.all().get();
    
    LogDirDescription partitionDesc = dirDetails.get(logDir).get(targetPartition);
    if (partitionDesc != null && partitionDesc.partition() != null) {
        long lastCompressedTs = partitionDesc.partition().logSegments().stream()
                .max(Comparator.comparing(LogSegment::lastModifiedTime))
                .map(LogSegment::lastModifiedTime)
                .orElse(-1);
        System.out.println("最近一次压缩时间戳(毫秒):" + lastCompressedTs);
    }
}

3. 直接读Broker日志目录的元数据文件

如果能访问Broker的日志目录,直接读分区的日志段文件也能拿到时间:

  • 每个分区的日志目录下,最新的.log日志段文件的修改时间,就是最近一次压缩完成的时间点;另外部分版本会生成.compact文件,里面也记录了压缩的元数据。
  • 这种方式适合在Broker节点上写个shell脚本监控,比如用stat命令取文件的修改时间:
# 替换成你的主题分区日志目录
LOG_DIR="/kafka/logs/orders-0"
# 取最新.log文件的修改时间戳(秒)
ls -t "$LOG_DIR"/*.log | head -1 | xargs stat -c %Y

对比你提到的解析日志的方式,上面这些方法更靠谱——不用依赖日志格式(Kafka日志格式可能随版本变化),而且能精准拿到时间戳,不用做字符串解析的脏活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 22:22:57