Apache Kafka 可视化工具调研

背景

随着流式计算和消息解耦的需求越来越多,消息队列(Apache Kafka)也成为了中台架构中的一个重要组件,Apache Kafka 的可观察性已经是一个很迫切的需求。基于我们当前的技术栈,和现有的解决方案,对 Apache Kafka 的可观察性需求描述如下:

  1. Kafka 官方 cli 工具命令参数较长,命令有限,都是基于后台,使用起来不方便
  2. 需要可以查询 topic 列表,以及 topic 内部的数据
  3. 需要可以通过容器进行云原生部署
  4. 最好可以支持 SSO 和基于角色的权限控制(下文简称 RBAC)
  5. 已经通过 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 截图

grafana可视化kafka_Apache

grafana可视化kafka_Apache_02

  • Kafka UI
  • 支持通过 UI 显示 topic 列表和 topic 内部的消息
  • 支持时间、offset 进行范围数据过滤,支持简单表达式过滤,支持关键字模糊搜索
  • 支持 live tail(实时读取)模式
  • Kafka UI 截图

grafana可视化kafka_Apache_03

grafana可视化kafka_kafka_04

grafana可视化kafka_grafana可视化kafka_05

  • EFAK
  • 支持通过 UI 显示 topic 列表,但只能通过 SQL 查看 topic 内部的消息
  • 使用 SQL 方式实现 topic 中的数据进行可视化查询,几乎支持 SQL 的所有语法,包括精准、模糊、范围查询,指定 topic 分区查询,支持查看历史查询的结果
  • 不支持 live tail(实时读取)模式
  • EFAK 截图

grafana可视化kafka_Apache_06

 

grafana可视化kafka_UI_07

总结

在数据可观察性上三款工具提供的能力都基本满足使用,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 将无法对接。

结论

通过横向对比 Apache Kafka 观察工具,我们得出以下结论:

  1. AKHQ 是当前最符合要求的组件,建议使用
  2. Kafka UI 的发展值得关注
  3. EFAK 功能丰富,但是无法满足我们的需求(部署、SSO接入、Kafka 连接)