Kafdrop - 一个开源的 Kafka Web UI
外面有什么?
入门
Kafdrop – Kafka Web UI 
特征
要求
入门
Kafka Web UI 导航
综上所述
AWS AI 直播!
作为消息传递平台,Kafka 无需过多介绍。自诞生以来,它几乎彻底改写了事件流处理领域的规则,并推动了如今已广为人知的设计模式——微服务、事件溯源和 CQRS——的普及应用。
正因为它如此出色,所以它工具匮乏的缺点几乎可以被人们忽略。你很难找到哪个开发者没有曾经看过它内置的命令行工具,然后捂着脸惊呼:“就这?你在开玩笑吧?”
外面有什么?
随着 Kafka 的流行,一些商业厂商抓住 Kafka 工具匮乏的市场机遇,推出自己的 Kafka 工具,也就不足为奇了。Kafka Tool、Landoop和KaDeck就是几个例子,但除非你愿意付费,否则它们都仅供个人使用。(当然,这并不是说你不应该使用这些工具,但这与本文主题无关。)任何在商业环境中进行非常规用途都将违反其许可条款。在家使用这些工具进行教程学习或个人项目是一回事;但如果你在没有获得相应许可的情况下使用商业工具,你就是在拿你的雇主和你的职业生涯冒险。
那么开源软件呢?
说到 Kafka 主题查看器和 Web UI,首选的开源工具非Kafdrop 莫属。截至撰写本文时,Kafdrop 的 Docker 镜像拉取次数已达 90 万次,我相信很少有其他 Kafka 工具能达到如此高的普及度。Kafdrop 可以让你查看主题内容、浏览消费者组、查看消费者延迟、主题配置、代理统计信息以及其他一些功能。总而言之,它出色地弥补了 Kafka 可观测性工具的明显不足,解决了社区长期以来一直指出的问题。
Kafdrop 和 Apache Kafka 一样,都是采用 Apache 2.0 许可的项目。所以它完全免费。如果你还没用过,那你应该试试。那么,让我们深入了解一下。
入门
Kafdrop Web UI 项目托管在 GitHub 上:
Kafdrop – Kafka Web UI 

Kafdrop 是一个用于查看 Kafka 主题和浏览消费者组的 Web 用户界面。该工具显示诸如代理、主题、分区、消费者等信息,并允许您查看消息。

这个项目是对 Kafdrop 2.x 的重启,它被强行移植到 Java 17+、Kafka 2.x、Helm 和 Kubernetes 的环境中。这是一个基于 Spring Boot 的轻量级应用程序,配置极其简便,并支持 SASL 和 TLS 安全代理。
特征
- 查看 Kafka brokers — 主题和分区分配,以及控制器状态
- 查看主题——分区数、复制状态和自定义配置
- 浏览消息——JSON、纯文本、Avro 和 Protobuf 编码
- 查看消费者组——每个分区的已停放偏移量、合并偏移量和每个分区的延迟
- 创建新主题
- 查看 ACL
- 支持 Azure 事件中心
要求
- Java 17 或更高版本
- Kafka(版本 0.11.0 或更高版本)或 Azure 事件中心
可选的附加集成:
入门
你…
您有两种选择。您可以大胆尝试克隆仓库并从源代码构建。这是一个基于 Java (JDK 11) 的 SpringBoot 项目,只要您安装了 JDK,就可以使用一条 Maven 命令构建它。如果您想选择这种方法,仓库中的README.md文件会指导您完成所有步骤。不过,现在我们先来试试更简单的方法——Docker。(我肯定会这么做。)
Docker 镜像托管在 DockerHub 上。镜像带有Kafdrop 版本号标签。该latest标签指向最新的稳定版本。
要在后台启动容器,请运行以下命令:
docker run -d --rm -p 9000:9000 \
-e KAFKA_BROKERCONNECT=<host:port,host:port> \
obsidiandynamics/kafdrop
必须将环境KAFKA_BROKERCONNECT变量设置为引导代理列表。
好了,现在应该可以正常运行了。启动后,您可以通过访问localhost:9000来启动 Kafka Web UI 。
注意:以上示例假设连接是通过明文 TCP 套接字进行的身份验证连接。如果您的集群配置为使用身份验证和/或传输层加密,请参阅README.md连接选项。实际上,为 SASL/SSL 加密集群配置 Kafdrop 非常简单。
Kafka Web UI 导航
浏览集群
集群概览屏幕是 Web 用户界面的首页。

您可以查看集群的整体布局——组成集群的各个代理、它们的地址以及一些关键的代理统计信息——例如它们是否是控制器以及每个代理拥有的分区数。后者非常重要——随着集群规模和主题(以及分区)数量的增长,您通常希望看到分区在整个集群中大致均匀分布。
接下来是主题列表,这通常才是您真正想看的。任何规模适中的微服务生态系统都可能包含数百甚至数千个主题。不出所料,该列表支持搜索。每个主题旁边显示的统计数据相当普通。值得注意的是“副本不足”列。它本质上告诉我们有多少分区副本落后于主副本。零是一个正常值。任何其他值都表明存在代理或网络问题,需要立即处理。
注意: Kafdrop 是一款发现探索工具,并非实时监控工具。您应该对您的经纪商进行监控,并在出现异常情况时发出警报。
列表主题
点击列表中的主题即可进入主题概览页面。

屏幕分为四个部分。
左上角是主题统计摘要——一个方便的视图,与你在集群概览中看到的内容非常相似。
在右上角,您可以查看自定义配置。在上面的示例中,主题运行的是标准配置,因此看不到任何内容。如果配置已被覆盖,您将看到一组自定义值,如下例所示。

左下角部分列出了各个分区。分区索引是链接——点击链接将显示该主题中的前 100 条消息。
本节展示了几个有趣的参数:
| 范围 |
描述 |
| 第一偏移 |
也称为低水位线,这是第一个保留消息的偏移量;如果分区当前没有消息,则称为高水位线。对于可能对分区执行的任何写入(以及由此推断的读取)操作,包括发布消息和例行的清除和压缩操作,第一个偏移量都是单调递增的。 |
| 最后偏移量 |
分配给下一条消息的偏移量。(也称为高水位线。)与第一个偏移量类似,最后一个偏移量也是单调递增的。 |
| 尺寸 |
分区内保留的消息数量。 |
| 领导节点 |
当前领导节点的ID。 |
| 副本节点 |
已分配分区副本的代理 ID。此集合包含领导节点。 |
| 同步副本节点 |
仅包含同步节点的副本节点子集。 |
| 离线副本节点 |
仅包含离线代理的副本节点子集。任何非空集合都表明代理节点或网络存在问题,需要紧急处理。 |
| 首选领导者 |
一个“是/否”值,表示当前领导者是否配置为首选领导者。 |
| 重复次数不足 |
一个“是/否”值,表示一个或多个副本节点落后于主节点。正常情况下,不应存在副本不足的分区。 |
右下角的消费者部分列出了消费者组名称及其总滞后(所有单独分区滞后的总和)。
查看消费者团体
点击主题概览中的消费者群体,即可进入消费者视图。此屏幕提供单个消费者群体的详细分析信息。

该视图按主题划分。每个主题对应一个单独的表格,其中列出了底层分区。对于每个分区,我们可以看到已提交的偏移量,我们可以将其与第一个和最后一个偏移量进行比较,以了解消费者的跟踪情况。Kafdrop 还方便地显示了每个分区的计算延迟,该延迟汇总显示在每个主题表格的底部。
注意:一定程度的延迟是不可避免的。对于发布的每条消息,从发布到消费之间必然存在一定的延迟。在 Kafka 中,这个延迟通常在几十到几百毫秒之间,具体取决于生产者和消费者客户端的选项、网络配置、代理的 I/O 能力、页面缓存的大小以及其他诸多因素。你需要注意的是延迟的增加——这表明消费者要么无法跟上,要么已经完全停止响应。在后一种情况下,即使生产者处于空闲状态,你也会注意到延迟并没有减少。这时,你需要切换到你常用的调试工具,而不是使用 Kafdrop。
查看消息
“消息视图”屏幕是您梦寐以求的主题查看器,很可能正是它将您带到了这里。您可以通过以下两种方式之一进入消息视图:
- 在主题概览屏幕中,点击“查看消息”按钮。
- 点击主题概述中的各个分区链接。

这正是你所期望的——按时间顺序排列的所选分区的消息(或用 Kafka 术语来说是记录)列表。
每个条目都会方便地显示偏移量、记录键(如果已设置)、发布时间戳以及制作者可能附加的任何标头。
Kafdrop 还有个小技巧。如果消息恰好是有效的 JSON 文档,主题查看器可以对其进行格式化。点击消息左侧的绿色箭头即可展开消息。

综上所述
你使用 Kafka 的次数越多,就越能发现和欣赏它的真正潜力——它不仅是一个多功能的事件流平台,而且还是一个通用的消息中间件,可以让你从异步、松耦合的服务中组装复杂的业务系统。
与过去那些更成熟的消息队列代理相比,这项技术才刚刚进入主流市场,难免会遇到一些令人沮丧的问题。令人欣慰的是,开源社区并没有停滞不前,而是不断发展完善,构建了一个生态系统,其中包含了我们开展工作所需的文档和工具。我们至少可以偶尔提交一个 pull request,或者回答一两个 Stack Overflow 上的问题。
这篇文章对您有用吗?请花点时间收藏它,以便其他人也能看到。我非常期待您的反馈,所以请不要犹豫!如果您对 Kafka 或事件流感兴趣,或者有任何疑问,欢迎在 Twitter 上关注我。
文章来源:https://dev.to/ekoutanov/kafdrop-an-open-source-kafka-web-ui-mbn