Apache Kafka 可视化工具调研
随着流式计算和消息解耦的需求越来越多,消息队列(Apache Kafka)也成为了中台架构中的一个重要组件,Apache Kafka 的可观察性已经是一个很迫切的需求。基于我们当前的技术栈,和现有的解决方案,对 Apache Kafka 的可观察性需求描述如下:
- Kafka 官方 cli 工具命令参数较长,命令有限,都是基于后台,使用起来不方便
- 需要可以查询 topic 列表,以及 topic 内部的数据
- 需要可以通过容器进行云原生部署
- 最好可以支持 SSO 和基于角色的权限控制(下文简称 RBAC)
- 已经通过 Prometheus + Grafana 实现了运维侧的监控和告警
针对以上的问题,社区也提供了很多优秀的方案和工具:
- AKHQ [GITHUB] Star:2.6K
AKHQ 是一款轻量级的 Apache Kafka 观察工具,具有 topic 消息管理、查询,支持多种鉴权方式。
- UI for Apache Kafka(Kafka UI)[GITHUB] Star:3.2K
Kafka UI 作为 Provectus NextGen 数据平台的一部分,是一款轻量级的 Apache Kafka 观察工具。支持 KSQL DB 作为插件集成,同时支持通过多种 Connector 连接不同的数据源。
- Kafka Eagle(EFAK)[GITHUB] Star:2.5K
EFAK 是一款功能丰富的开源 Apache Kafka 观察工具,结合了运维管理、指标统计以及可观察性等功能,告警模块集成了 IM。自带 KSQL 能力,可以让开发者像操作表数据一样操作 DataSream。
- kafka-console-ui [GITHUB] Star:98
Kafka-console-ui 是一款轻量级比较小众的工具。
- Kafka Manager(CMAK)[GITHUB] Star:10.9K
Yahoo 推出的老牌开源 Apache Kafka 管理工具,已经很久没有维护了。
- LogiKM [GITHUB] Star:4.3K
滴滴开源的 Apache Kafka 管理平台,比较重度,且和滴滴云有较强的绑定。
- kafka tools
kafka tools 是 一个基于 Java GUI 开发的闭源工具,只适合在 windows 上使用。
经过筛选,去掉了较为重度的 LogiKM 和闭源的 kafka tools 后,对剩下的 5 款工具进行功能对比。
AKHQ
UI for Apache Kafka
Kafka Eagle(EFAK)
kafka-console-ui
多集群管理
支持
支持
支持
支持
topic 和消息查看
支持
支持
支持
不支持
SSO 接入
LDAP
OAuth 2.0/LDAP
不支持
不支持
RBAC
支持
不支持*
支持(内部)
不支持
官方容器镜像
支持
支持
自行构建镜像
不支持
开发语言
Java + JavaScript
Java + TypeScript
Java
Java + vue
外部数据库
无
无
mysql5 以上
无
连接方式
broker
broker/zookeeper
zookeeper
broker
文档
少
少
丰富
少
注:UI for Apache Kafka 有支持 RBAC 的计划,在社区的路线图里,但当前版本还不够成熟
基于以上表格信息,我们排除掉有较多 feature 不支持的 kafka-console-ui。接下来,将对 AKHQ 、Kafka UI 以及 EFAK 这三款工具进行横向对比。
数据可观察性
-
AKHQ
-
支持通过 UI 显示 topic 列表和 topic 内部的消息
-
支持时间、offset 进行范围数据过滤,支持简单表达式过滤,支持关键字模糊搜索,支持分区过滤
-
支持 live tail(实时读取)模式
-
AKHQ 截图
-
-
Kafka UI
-
支持通过 UI 显示 topic 列表和 topic 内部的消息
-
支持时间、offset 进行范围数据过滤,支持简单表达式过滤,支持关键字模糊搜索
-
支持 live tail(实时读取)模式
-
Kafka UI 截图
-
-
EFAK
-
支持通过 UI 显示 topic 列表,但只能通过 SQL 查看 topic 内部的消息
-
使用 SQL 方式实现 topic 中的数据进行可视化查询,几乎支持 SQL 的所有语法,包括精准、模糊、范围查询,指定 topic 分区查询,支持查看历史查询的结果
-
不支持 live tail(实时读取)模式
-
EFAK 截图
-
总结
在数据可观察性上三款工具提供的能力都基本满足使用,Kafka UI 和 AKHQ 的功能几乎是一样,UI 也更直观,EFAK 通过 KSQL 的方式操作相对来说繁琐,但也提供了更多可能性。
运维 & 部署
-
AKHQ
-
官方有提供镜像,版本更新频率正常
-
支持 LDAP 方式,有原生登录界面
-
支持 RBAC 功能,通过配置文件管理用户权限,可以实现 topic 级别的控制
-
不需要依赖外部组件
-
-
Kafka UI
-
官方有提供镜像,版本更新频率正常
-
支持 LDAP 方式,但是没有原生登录界面,关闭浏览器需要重新登录
-
支持 OAuth2 方式,当前世游 SSO 系统不符合指定标准,无法对接
-
暂不支持 RBAC 功能,只支持 readonly 开关,作者计划在近几个月发布 RBAC 功能 [ISSUE]
-
不需要依赖外部组件
-
-
EFAK
- 官方没有提供镜像,需要自己构建镜像,升级版本需要重新构建
-
不支持 SSO 接入
-
仅支持基于内部系统的 RBAC
-
需要依赖 mysql5.7+,存储相关元数据
总结
AKHQ 功能最全面,最符合我们对 Apache Kafka 观察工具的想象。Kafka UI 还在持续的发展和迭代中,仍不够成熟,后续可以继续关注。EFAK 不支持 SSO 接入,还需要外部依赖,相对来说比较复杂。
Kafka 特性
-
AKHQ
-
只支持配置 broker 地址
-
-
Kafka UI
-
同时支持配置 broker 和 zookeeper 地址
-
-
EFAK
-
只支持配置 zookeeper 地址
-
我们知道当前 Kafka 无法支持数据倾斜之后进行自平衡,所以 EFAK 提供了手动方式的数据迁移能力
-
EFAK 截图
-
总结
Apache Kafka 3.1+ 引入了 Kafka Raft。Raft 是一种共识协议,它的引入是为了消除 Kafka 对 ZooKeeper 的依赖。如果后续 Kafka 升级到了 3.x 版本,EFAK 将无法对接。