Linux 部署 Kafka-Eagle(EFAK)单机
大纲
前言
本文将介绍在 Linux 系统上,手动部署 Kafka-Eagle(EFAK)的单机服务,实现对 Kafka 集群的管理和监控,适用于 CentOS/Debian/Ubuntu 等发行版。
官方资源
准备工作
部署依赖服务
- 在部署 Kafka Eagle(EFAK)之前,请确保已经部署好 ZooKeeper 集群、Kafka 集群、MySQL。
| 服务 | 版本 | 说明 |
|---|---|---|
| ZooKeeper | 3.8.4 | 集群(三节点) |
| Kafka | 3.9.0 | 集群(三节点) |
| MySQL | 8.4.2 | 单机 |
提示
- 从 Kafka
2.8.0版本开始,Kafka 自身实现了Raft分布式一致性机制,这意味着 Kafka 集群是可以脱离 ZooKeeper 独立运行的。但是,本文使用的 Kafka 集群是依赖于 ZooKeeper 的,因此需要提前将 ZooKeeper 集群部署好。 - Kafka Eagle(EFAK)集群需要一个数据库来统一存储其配置数据,如用户数据、Kafka 集群的监控指标数据等。当不使用 MySQL 来存储 Kafka 的监控指标数据时,Kafka Eagle(EFAK)默认使用的是 SQLite,而 SQLite 是存储在 EFAK 安装位置的嵌入式数据库。
初始化数据库
- 创建数据库,用于 Kafka Eagle(EFAK)存储 Kafka 的监控指标数据
1 | -- 创建数据库 |
- 创建数据库用户并授权访问,用于 Kafka Eagle(EFAK)连接 MySQL
1 | -- 创建用户 |
提示
在初始化 MySQL 数据库时,只需要创建数据库,而不需要手动创建数据库表。这是因为 Kafka Eagle(EFAK)会在启动的时候自动创建所需的 数据库表,前提是 Kafka Eagle(EFAK)用于连接 MySQL 的用户有对应的数据库操作权限。
Kafka Eagle 单机部署
本节将部署 Kafka Eagle(EFAK)单实例,以实现对 Kafka 集群的管理和监控。值得一提的是,Kafka Eagle(EFAK)的运行依赖于 JDK 1.8+,请提前安装并配置好 Java 运行环境,包括添加 JAVA_HOME 系统环境变量。
单机部署规划
| 服务 | 版本 | 说明 |
|---|---|---|
| Kafka Eagle(EFAK) | 3.0.1 | 单机 |
下载安装文件
- 浏览器访问 Kafka Eagle(EFAK)的 GitHub 项目,然后选择最新版本的二进制包进行下载并解压
1 | # 下载文件 |
更改配置文件
提示
Kafka Eagle(EFAK)是支持管理多个 Kafka 集群的,由于笔者只部署了一个 Kafka 集群,因此在下述配置内容中只配置了一个 Kafka 集群。
- 编辑 Kafka Eagle(EFAK)的配置文件
system-config.properties
1 | # 备份配置文件 |
- 然后更改配置文件的内容,更改后的完整配置内容如下所示
1 | ###################################### |
- 在上述配置内容中,最重要的是以下几个配置项,其他配置项一般使用默认值即可
1 | ###################################### |
重要参数说明
cluster1.zk.list:指定 Kafka 集群一连接的 ZooKeeper 节点列表。cluster1.efak.offset.storage:指定 Kafka 集群一存储 Offset 的位置。efak.username:指定 Kafka Eagle(EFAK)连接数据库的用户名。efak.password:指定 Kafka Eagle(EFAK)连接数据库的密码。efak.driver:指定 Kafka Eagle(EFAK)连接数据库的驱动。efak.url:指定 Kafka Eagle(EFAK)连接数据库的 URL。efak.distributed.enable:指定 Kafka Eagle(EFAK)是否以集群(分布式)模式运行。efak.metrics.charts:在 Kafka Eagle(EFAK)的 UI 中,是否允许实时显示 Kafka 的监控指标图表。efak.metrics.retain:Kafka Eagle(EFAK)保留 Kafka 监控指标数据的最长时间(比如 30 天),超过设定的时间监控指标数据就会被删除。
添加环境变量
1 | # 更改系统配置文件,添加环境变量 |
启动监控服务
特别注意
在启动 Kafka Eagle(EFAK)服务之前,必须保证 ZooKeeper 集群、Kafka 集群、MySQL 已经启动并正常运行。
- 启动 Kafka Eagle(EFAK)服务
1 | $ ke.sh start |
- Kafka Eagle(EFAK)服务正常启动后,终端输出的日志信息如下所示
1 | Welcome to |
- 若 Kafka Eagle(EFAK)服务启动失败,可以通过查看错误日志来排查问题
1 | $ vi /opt/efak/logs/error.log |
管理监控服务
- 关闭 Kafka Eagle(EFAK)服务
1 | $ ke.sh stop |
- 重启 Kafka Eagle(EFAK)服务
1 | $ ke.sh restart |
- 查看 Kafka Eagle(EFAK)服务的进程信息
1 | $ ke.sh status |
1 | [2024-12-06 23:29:22] INFO : EFAK-fd34:dd83:8cb9::350 192.168.1.140 is running, [71079] . |
- 查看 Kafka Eagle(EFAK)服务在 Linux 系统中的句柄数
1 | $ ke.sh stats |
1 | ===================== TCP Connections Count ========================== |
- 查看 Kafka Eagle(EFAK)服务的垃圾回收(GC)情况
1 | $ ke.sh gc |
1 | [2024-12-06 23:40:29] INFO : EFAK Process[52129] GC. |
验证监控服务
- (1) 浏览器通过
http://192.168.1.140:8048访问 Kafka Eagle(EFAK)的控制台管理页面(如下所示),默认的登录账号和密码是admin/123456,请记得将192.168.1.140更改为你自己机器的 IP 地址。

- (2) 浏览器通过
http://192.168.1.140:8048/tv就可以访问监控数据大屏的页面(如下所示),请记得将192.168.1.140更改为你自己机器的 IP 地址。

- (3) 浏览器通过
http://192.168.1.140:8048/cluster/kafka就可以访问 Kafka 的监控页面(如下所示),请记得将192.168.1.140更改为你自己机器的 IP 地址。

- (4) 浏览器通过
http://192.168.1.140:8048/cluster/zookeeper就可以访问 ZooKeeper 的监控页面(如下所示),请记得将192.168.1.140更改为你自己机器的 IP 地址。

Kafka Eagle 部署问题
无法监控 Kafka 集群
在 Kafka Eagle(EFAK)的控制台中访问 Kafka 的监控页面时,发现无法正常显示 Kafka 的运行状态,如下图所示:

这通常是由于 Kafka 服务没有配置 JMX 服务或者 JMX 服务配置不正确导致的,因为 Kafka Eagle(EFAK)是基于 JMX 服务来实现 Kafka 运行状态的监控。解决办法是,为 Kafka 服务添加对应的 JMX 配置。
- (1) 如果 Kafka 服务是通过手动部署的(基于二进制安装包),那么可以在执行
kafka-server-start.sh启动脚本时,添加JMX_PORT环境变量来启用 JMX 服务(如下所示),详细教程请参考 这里
1 | JMX_PORT=19999 ./kafka-server-start.sh -daemon ../config/server.properties |
- (2) 如果 Kafka 服务是通过 Docker-Compose 部署的,那么可以参考以下配置内容,详细教程请参考 这里
1 | version: '3.5' |
Kafka Eagle 无法监控自己
在 Kafka Eagle(EFAK)的控制台中访问 EfakServer 的监控页面时,发现无法正常显示 EfakServer 的运行状态,监控页面一直显示提示信息 Processing 或者节点状态显示为 Offline,如下图所示:

这个问题可以忽略不解决,猜测(待验证)只有当 Kafka Eagle(EFAK)以集群(分布式)模式部署时,EfakServer 的监控页面才会正常显示相关监控信息,详细说明请看 这里。如果不希望 UI 将节点状态显示为 Offline,可参考以下配置信息:
1 | ###################################### |
内存不足导致服务启动失败
在 Kafka Eagle(EFAK)的项目源码中,有一个 ke.sh 启动脚本,该脚本里面有以下一行代码:
1 | export KE_JAVA_OPTS="-server -Xmx2g -Xms2g -XX:MaxGCPauseMillis=20 -XX:+UseG1GC -XX:MetaspaceSize=128m -XX:InitiatingHeapOccupancyPercent=35 -XX:G1HeapRegionSize=16M -XX:MinMetaspaceFreeRatio=50 -XX:MaxMetaspaceFreeRatio=80" |
其中 JVM 参数 -Xms2g 指定了初始堆内存为 2G,因此当操作系统的空闲内存不足 2G 时,会导致 Kafka Eagle(EFAK)服务启动失败。解决办法是,更改 Shell 脚本代码,或者增加机器的物理内存(强烈推荐)。
监控大屏无法实时更新显示
在 Kafka Eagle(EFAK)的控制台中访问监控大屏页面时,发现即使有生产者正在发送消息和消费者正在消费消息,Kafka 集群的监控指标图表也无法实时更新显示或者没有任何监控数据显示(如下图所示)。这是因为 Kafka Eagle(EFAK)禁用了 Kafka 集群的监控指标图表实时更新。

解决办法是,在 Kafka Eagle(EFAK)的 system-config.properties 配置文件中,更改或添加以下配置:
1 | =true |
特别注意
在 Kafka Eagle(EFAK)的控制台中,Kafka 集群监控指标图表的渲染和数据获取会消耗一定的资源。如果 Kafka 的集群规模较大或者系统资源有限,建议通过禁用 efak.metrics.charts 选项来减少系统负载。
