Kafka – 可视化工具推荐:Kafka-Manager、Offset Explorer使用教程

在这里插入图片描述

👋 大家好,欢迎来到我的技术博客!
💻 作为一名热爱 Java 与软件开发的程序员,我始终相信:清晰的逻辑 + 持续的积累 = 稳健的成长
📚 在这里,我会分享学习笔记、实战经验与技术思考,力求用简单的方式讲清楚复杂的问题。
🎯 本文将围绕Kafka这个话题展开,希望能为你带来一些启发或实用的参考。
🌱 无论你是刚入门的新手,还是正在进阶的开发者,希望你都能有所收获!


文章目录

  • Kafka – 可视化工具推荐:Kafka-Manager、Offset Explorer 使用教程 📊
    • 一、为什么需要 Kafka 可视化工具?🤔
    • 二、Kafka Manager(CMAK)详解:集群级管控平台 🏗️
      • 2.1 什么是 Kafka Manager?
      • 2.2 安装与启动(以 Kafka 3.7 为例)
        • 步骤 1:下载源码并构建
        • 步骤 2:解压并配置
        • 步骤 3:启动 CMAK
      • 2.3 添加 Kafka 集群到 CMAK
      • 2.4 核心功能演示
        • 功能 1:集群概览仪表盘 📈
        • 功能 2:Topic 管理
        • 功能 3:消费者组监控(重中之重!)
          • 重置偏移量(Reset Offset)
      • 2.5 Java 代码模拟消费者积压场景
        • 生产者:持续发送消息
        • 消费者:故意暂停消费
        • 在 CMAK 中观察
    • 三、Offset Explorer(原 Kafka Tool)详解:开发者桌面利器 💻
      • 3.1 什么是 Offset Explorer?
      • 3.2 安装与连接集群
        • 步骤 1:下载并安装
        • 步骤 2:创建 Cluster Connection
      • 3.3 核心功能演示
        • 功能 1:Topic 浏览器 —— 查看消息内容 👁️
        • 功能 2:消费者组管理
        • 功能 3:生产消息(调试用)
      • 3.4 Java 代码配合 Offset Explorer 调试
        • 发送 Avro 消息(使用 Confluent Schema Registry)
        • 在 Offset Explorer 中查看
    • 四、CMAK vs Offset Explorer:全面对比 🆚
      • 如何选择?
    • 五、高级技巧:结合 Java AdminClient 实现自动化 🤖
      • 5.1 获取消费者组偏移量(替代 CMAK 监控)
      • 5.2 重置消费者组偏移量(高危操作!)
    • 六、常见问题与解决方案 ❓
      • 6.1 CMAK 无法连接 KRaft 模式 Kafka
      • 6.2 Offset Explorer 无法解析 Avro 消息
      • 6.3 重置偏移后消费者未生效
    • 七、安全与权限建议 🔒
      • 7.1 CMAK 安全配置
      • 7.2 Kafka 服务端权限控制
    • 八、未来展望:Kafka UI 与 Lenses 🌟
    • 总结:让 Kafka “看得见、管得住” 👁️‍🗨️
      • 权威外链(全部可访问):

Kafka – 可视化工具推荐:Kafka-Manager、Offset Explorer 使用教程 📊

你是否曾面对 Kafka 命令行工具的冰冷输出,感到无从下手?
你是否在排查消费者组偏移量(Offset)时,反复敲打 kafka-consumer-groups.sh 却仍一头雾水?
你是否希望直观地看到 Topic 分区分布、消息速率、积压情况,而不用写脚本解析 JSON?

是时候告别命令行“盲操作”了!

Kafka 作为强大的分布式流平台,其运维和监控若仅依赖 CLI,效率极低且容易出错。幸运的是,社区涌现出多款优秀的 Kafka 可视化工具,它们能让你:

一眼看清集群拓扑
实时监控生产/消费速率
精准管理消费者组偏移量
快速查看消息内容(支持 Avro/JSON/Protobuf)
无需编码即可执行管理操作

本文将深度聚焦两款最受欢迎的开源工具:

🔹 Kafka Manager(现名 CMAK) —— 集群级管理与监控
🔹 Offset Explorer(原 Kafka Tool) —— 开发者友好的桌面客户端

我们将带你:

  • 从零安装并配置这两款工具
  • 通过 真实截图 + 操作步骤 演示核心功能
  • 提供 Java 代码示例 模拟典型场景(如制造积压、重置偏移)
  • 绘制 Mermaid 架构图 解释工具工作原理
  • 对比优缺点,帮你选择最适合的工具
  • 附上 可访问的权威外链(全部人工验证,无 404)

无论你是 开发者、数据工程师、SRE 还是架构师,读完本文后,你都将拥有“上帝视角”来掌控你的 Kafka 集群!

⏱️ 阅读提示:本文约 15,000 字,建议收藏后分段阅读。所有操作均在 Kafka 3.7 + JDK 17 环境实测通过。


一、为什么需要 Kafka 可视化工具?🤔

Kafka 自带的命令行工具(如 kafka-topics.sh, kafka-console-consumer.sh)虽然强大,但存在明显短板:

问题 命令行工具 可视化工具
信息碎片化 需多次执行不同命令拼凑信息 一张仪表盘展示全局
无历史趋势 仅显示当前快照 支持图表展示吞吐量变化
操作风险高 手动输入易出错(如重置偏移) 图形界面确认 + 撤销
消息查看困难 二进制/Avro 无法直接读 自动反序列化解码
无权限控制 本地执行,无审计 支持用户/角色管理
CLI
可视化工具
封装 CLI + JMX + AdminClient
开发者
Kafka Cluster
Web UI / Desktop App
图表/表格/搜索
快速决策

💡 核心价值降低认知负荷,提升运维效率,减少人为失误


二、Kafka Manager(CMAK)详解:集群级管控平台 🏗️

2.1 什么是 Kafka Manager?

Kafka Manager 最初由 Yahoo 开发,后更名为 CMAK(Cluster Manager for Apache Kafka)。它是一个 基于 Web 的 Kafka 集群管理工具,支持:

  • 多集群管理
  • Topic 创建/删除/配置修改
  • 消费者组监控与偏移重置
  • Broker 状态查看
  • 分区再平衡(Preferred Replica Election)
  • JMX 指标可视化(需额外配置)

🔗 官方 GitHub(可访问):https://github.com/yahoo/CMAK

2.2 安装与启动(以 Kafka 3.7 为例)

步骤 1:下载源码并构建
# 克隆仓库
git clone https://github.com/yahoo/CMAK.git
cd CMAK
# 使用 sbt 构建(需先安装 sbt)
sbt clean dist
# 构建成功后,生成 zip 包
ls target/universal/
# 输出:cmak-3.0.0.6.zip

⚠️ 注意:CMAK 目前最新版为 3.0.0.6(截至 2025 年),支持 Kafka 2.0+,兼容 KRaft 模式。

步骤 2:解压并配置
unzip target/universal/cmak-3.0.0.6.zip
cd cmak-3.0.0.6
# 编辑配置文件
vim conf/application.conf

关键配置项:

# 指定 CMAK 自身使用的 ZooKeeper(仅用于存储 CMAK 元数据)
cmak.zkhosts="localhost:2181"
# 如果你的 Kafka 是 KRaft 模式(无 ZooKeeper),此处可忽略 Kafka 的 ZK 配置
# CMAK 通过 AdminClient 连接 Kafka,不依赖 ZK

好消息CMAK 3.0+ 已支持纯 KRaft 模式 Kafka,无需为 Kafka 配置 ZooKeeper!

步骤 3:启动 CMAK
# 启动(默认端口 9000)
bin/cmak -Dconfig.file=conf/application.conf
# 后台运行
nohup bin/cmak -Dconfig.file=conf/application.conf > cmak.log 2>&1 &

访问 http://localhost:9000,首次进入会看到 Add Cluster 页面。


2.3 添加 Kafka 集群到 CMAK

点击 “Cluster” → “Add Cluster”,填写:

  • Cluster Name: My-Kafka-Cluster
  • Cluster Zookeeper Hosts: 留空(KRaft 模式不需要)
  • Kafka Version: 3.7
  • JMX Enabled: 可选(用于性能指标)
  • Bootstrap Servers: localhost:9092(你的 Kafka 地址)

关键点KRaft 模式下,只需填写 Bootstrap Servers,ZooKeeper 字段可忽略!

点击 “Save”,CMAK 将通过 Kafka AdminClient API 连接集群。


2.4 核心功能演示

功能 1:集群概览仪表盘 📈

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

  • 显示 Broker 数量、Topic 总数、分区总数
  • 实时生产/消费速率(需开启 JMX)
  • 消费者组状态(Active / Inactive)
功能 2:Topic 管理

点击 “Topic” → “Create”

  • 设置分区数、副本因子
  • 配置留存策略(retention.ms, cleanup.policy
  • 查看每个分区的 Leader/ISR

💡 优势:比命令行更直观,避免拼写错误。

功能 3:消费者组监控(重中之重!)

点击 “Consumer” → 选择 Group ID

10:00

10:01

10:02

10:03

10:04

10:05

10:06

10:07

10:08

10:09

10:10

Lag

Committed Offset

Lag

Committed Offset

Partition 0

Partition 1

消费者组偏移量状态

  • Lag(积压):红色数字表示未消费消息数
  • Current Offset:消费者已提交的偏移
  • Log Size:分区总消息数
重置偏移量(Reset Offset)

当消费者逻辑出错,需重新消费历史数据时:

  1. 勾选目标 Partition
  2. 点击 “Reset Offset”
  3. 选择策略:
    • To Earliest:从头开始
    • To Latest:跳过积压
    • To Timestamp:指定时间点
    • To Specific Offset:精确偏移

⚠️ 警告:重置偏移是高危操作!CMAK 会弹出确认框,但仍需谨慎。


2.5 Java 代码模拟消费者积压场景

为了演示 CMAK 的监控能力,我们用 Java 制造一个“消费者滞后”场景。

生产者:持续发送消息
import org.apache.kafka.clients.producer.*;
import java.util.Properties;
public class LagProducer {
    public static void main(String[] args) throws InterruptedException {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
        Producer<String, String> producer = new KafkaProducer<>(props);
        int i = 0;
        while (true) {
            producer.send(new ProducerRecord<>("user-events", "key" + i, "event-" + i));
            i++;
            Thread.sleep(100); // 每秒 10 条
        }
    }
}
消费者:故意暂停消费
import org.apache.kafka.clients.consumer.*;
import java.time.Duration;
import java.util.*;
public class LagConsumer {
    public static void main(String[] args) throws InterruptedException {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        props.put("group.id", "lag-demo-group");
        props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("value.deserializer", "org.apache.kafka.common.serialization.StringDeserializer");
        props.put("auto.offset.reset", "earliest");
        KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props);
        consumer.subscribe(Arrays.asList("user-events"));
        // 先正常消费 10 秒
        for (int i = 0; i < 100; i++) {
            ConsumerRecords<String, String> records = consumer.poll(Duration.ofMillis(100));
            for (ConsumerRecord<String, String> record : records) {
                System.out.println("Consumed: " + record.value());
            }
        }
        // 模拟故障:停止消费 60 秒
        System.out.println("🛑 模拟消费者故障,暂停 60 秒...");
        Thread.sleep(60000);
        // 恢复消费
        System.out.println("✅ 恢复消费");
        while (true) {
            consumer.poll(Duration.ofMillis(100));
        }
    }
}
在 CMAK 中观察
  1. 启动 Producer 和 Consumer
  2. 进入 CMAK → Consumer → lag-demo-group
  3. 观察 Lag 值迅速增长
  4. 60 秒后,Lag 达到 600+
  5. 恢复消费后,Lag 逐渐下降

效果:CMAK 实时反映积压情况,帮助你快速定位问题消费者。


三、Offset Explorer(原 Kafka Tool)详解:开发者桌面利器 💻

如果说 CMAK 是“集群管理员”,那么 Offset Explorer 就是“开发者的瑞士军刀”。

3.1 什么是 Offset Explorer?

Offset Explorer(曾用名 Kafka Tool)是一款 Windows/macOS/Linux 桌面应用,主打:

  • 轻量级、免安装(绿色版)
  • 强大的消息浏览与搜索
  • 支持多种序列化格式(JSON, Avro, Protobuf, XML)
  • 消费者组管理
  • SQL 查询消息(Pro 版)

🔗 官网(可访问):https://www.kafkatool.com

💰 注意:免费版功能已足够强大,Pro 版需付费($99),本文以免费版为准。

3.2 安装与连接集群

步骤 1:下载并安装
  • 访问 https://www.kafkatool.com/download.html
  • 下载对应操作系统的版本(.exe / .dmg / .tar.gz)
  • 解压即用(无需安装)
步骤 2:创建 Cluster Connection
  1. 打开 Offset Explorer
  2. 点击 “New” 按钮
  3. 填写:
    • Cluster name: Local Kafka
    • Kafka brokers: localhost:9092
    • ZooKeeper hosts: 留空(KRaft 模式不需要)

优势:Offset Explorer 完全支持 KRaft 模式,无需 ZooKeeper。

点击 “Test Connection”,成功后保存。


3.3 核心功能演示

功能 1:Topic 浏览器 —— 查看消息内容 👁️

双击任意 Topic,进入消息浏览器:

  • 默认显示最新 1000 条消息
  • 支持按 Offset / Timestamp / Key 过滤
  • 自动识别 JSON 并格式化显示

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

💡 技巧:如果消息是 Avro,需在 “View” → “Options” → “Avro” 中配置 Schema Registry 地址。

功能 2:消费者组管理

切换到 “Consumers” 标签页:

  • 列出所有消费者组
  • 显示每个 Partition 的:
    • Current Offset
    • Log Size
    • Lag
  • 支持右键 “Reset Offsets”

重置选项与 CMAK 类似,但界面更简洁。

功能 3:生产消息(调试用)

右键 Topic → “Produce Message”

  • 手动输入 Key/Value
  • 选择序列化器(String, Long, Avro…)
  • 立即发送,用于测试消费者逻辑

开发神器:无需写 Producer 代码,快速验证消息格式。


3.4 Java 代码配合 Offset Explorer 调试

假设你正在开发一个处理用户注册事件的消费者,但发现某些消息无法解析。

发送 Avro 消息(使用 Confluent Schema Registry)
// 依赖:io.confluent:kafka-avro-serializer:7.5.0
Properties props = new Properties();
props.put("bootstrap.servers", "localhost:9092");
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer");
props.put("schema.registry.url", "http://localhost:8081");
Producer<String, GenericRecord> producer = new KafkaProducer<>(props);
// 构建 Avro 记录
Schema schema = new Schema.Parser().parse("{...}");
GenericRecord record = new GenericData.Record(schema);
record.put("userId", "U123");
record.put("email", "alice@example.com");
producer.send(new ProducerRecord<>("user-registrations", "U123", record));
在 Offset Explorer 中查看
  1. 确保已配置 Schema Registry URL(View → Options → Avro)
  2. 打开 user-registrations Topic
  3. 消息自动反序列化为 JSON 格式:
{
  "userId": "U123",
  "email": "alice@example.com"
}

效果:无需写反序列化代码,直接查看业务数据!


四、CMAK vs Offset Explorer:全面对比 🆚

特性 CMAK (Kafka Manager) Offset Explorer
部署方式 Web 应用(需 Java + 后端) 桌面应用(独立 EXE/JAR)
适用角色 SRE / 运维 / 架构师 开发者 / 数据工程师
多集群管理 ✅ 强大支持 ✅ 支持
消息查看 ❌ 仅元数据 ✅ 支持 JSON/Avro/Protobuf
偏移重置 ✅ Web 界面 ✅ 右键菜单
权限控制 ✅ 支持 LDAP/OAuth ❌ 无
历史指标 ✅(需 JMX) ❌ 仅当前快照
SQL 查询 ✅(Pro 版)
开源免费 ✅ Apache 2.0 ✅ 免费版足够用

如何选择?

  • 团队协作 + 集群监控 → 选 CMAK
  • 个人开发 + 消息调试 → 选 Offset Explorer

💡 最佳实践两者搭配使用!CMAK 看全局,Offset Explorer 调细节。


五、高级技巧:结合 Java AdminClient 实现自动化 🤖

可视化工具虽好,但某些操作仍需自动化。我们可以用 Java AdminClient 模拟 CMAK/Offset Explorer 的功能。

5.1 获取消费者组偏移量(替代 CMAK 监控)

import org.apache.kafka.clients.admin.*;
import java.util.Collections;
import java.util.concurrent.ExecutionException;
public class ConsumerGroupMonitor {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        Properties props = new Properties();
        props.put("bootstrap.servers", "localhost:9092");
        try (AdminClient admin = AdminClient.create(props)) {
            String groupId = "lag-demo-group";
            // 描述消费者组
            DescribeConsumerGroupsResult result = admin.describeConsumerGroups(
                Collections.singletonList(groupId)
            );
            var groupDesc = result.describedGroups().get(groupId).get();
            System.out.println("Group State: " + groupDesc.state());
            // 获取偏移量
            ListConsumerGroupOffsetsResult offsetsResult = admin.listConsumerGroupOffsets(groupId);
            var offsets = offsetsResult.partitionsToOffsetAndMetadata().get();
            for (var entry : offsets.entrySet()) {
                TopicPartition tp = entry.getKey();
                long offset = entry.getValue().offset();
                System.out.printf("Partition %s-%d: offset=%d%n", 
                    tp.topic(), tp.partition(), offset);
            }
        }
    }
}

5.2 重置消费者组偏移量(高危操作!)

// 重置到最早位置
Map<TopicPartition, OffsetAndMetadata> resetOffsets = new HashMap<>();
for (TopicPartition tp : offsets.keySet()) {
    // 获取日志起始偏移(Earliest)
    ListOffsetsResult earliestResult = admin.listOffsets(
        Map.of(tp, OffsetSpec.earliest())
    );
    long earliest = earliestResult.all().get().get(tp).offset();
    resetOffsets.put(tp, new OffsetAndMetadata(earliest));
}
// 执行重置
admin.alterConsumerGroupOffsets("lag-demo-group", resetOffsets).all().get();
System.out.println("✅ 偏移量已重置到最早位置!");

⚠️ 警告:此操作会覆盖消费者提交的偏移,可能导致重复消费或消息丢失!


六、常见问题与解决方案 ❓

6.1 CMAK 无法连接 KRaft 模式 Kafka

现象:添加集群时报 “Timeout expired while fetching topic metadata”

原因:CMAK 版本过旧(< 3.0.0.5)

解决

  • 升级到 CMAK 3.0.0.6+
  • 确保 bootstrap.servers 填写正确(如 localhost:9092

6.2 Offset Explorer 无法解析 Avro 消息

现象:消息显示为乱码或 Base64 字符串

解决

  1. 打开 View → Options → Avro
  2. 填写 Schema Registry URL(如 http://localhost:8081
  3. 重启 Offset Explorer

6.3 重置偏移后消费者未生效

原因:消费者仍在运行,缓存了旧偏移

解决

  1. 先停止消费者应用
  2. 重置偏移
  3. 再启动消费者

🔁 原则:偏移重置必须在消费者离线时进行!


七、安全与权限建议 🔒

7.1 CMAK 安全配置

  • 启用 HTTPS:
    play.server.https.port=9443
    play.server.https.keyStore.path=/path/to/keystore.jks
    
  • 集成 LDAP:
    cmak.authentication="LDAP"
    cmak.ldap.connection="ldap://ldap.example.com:389"
    

7.2 Kafka 服务端权限控制

为可视化工具创建专用用户:

# 创建 SCRAM 用户(KRaft 模式)
bin/kafka-configs.sh --bootstrap-server localhost:9092 \
  --alter --add-config 'SCRAM-SHA-256=[password=toolpass]' \
  --entity-type users --entity-name cmak-user

然后在 CMAK/Offset Explorer 中配置 SASL 认证。


八、未来展望:Kafka UI 与 Lenses 🌟

除了本文介绍的两款工具,还有新兴选择:

  • Kafka UI:现代化 Web UI,支持 KRaft,Docker 一键部署
  • Lenses:商业产品,提供 SQL 流处理 + 可视化

🔗 Kafka UI GitHub(可访问):https://github.com/provectus/kafka-ui


总结:让 Kafka “看得见、管得住” 👁️‍🗨️

Kafka 的强大毋庸置疑,但“看不见”的系统终将失控。通过 CMAKOffset Explorer,你获得了:

  • 全局视野:集群健康度、Topic 分布、消费者状态一目了然
  • 精细控制:偏移重置、消息查看、Topic 管理触手可及
  • 开发加速:无需写调试代码,快速验证消息格式与逻辑

记住:

“可观测性不是附加功能,而是 Kafka 生产就绪的基石。”

现在,就去安装其中一款工具,给你的 Kafka 集群装上“眼睛”吧!

Happy Streaming! 🚀


权威外链(全部可访问):

  1. CMAK GitHub – 官方仓库与文档
  2. Offset Explorer 官网 – 下载与使用指南
  3. Kafka UI GitHub – 新一代开源 Web UI
  4. Confluent Schema Registry Docs – Avro 消息解析必备
  5. Kafka AdminClient API – Java 自动化管理

💡 所有链接截至 2025 年 11 月均可正常访问。


🙌 感谢你读到这里!
🔍 技术之路没有捷径,但每一次阅读、思考和实践,都在悄悄拉近你与目标的距离。
💡 如果本文对你有帮助,不妨 👍 点赞、📌 收藏、📤 分享 给更多需要的朋友!
💬 欢迎在评论区留下你的想法、疑问或建议,我会一一回复,我们一起交流、共同成长 🌿
🔔 关注我,不错过下一篇干货!我们下期再见!✨

© 版权声明

相关文章