ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

EFAK:Kafka 可视化监控与运维治理核心工具

EFAK:Kafka 可视化监控与运维治理核心工具 1. EFAK 是什么为什么 Kafka 工程师离不开它EFAKEagle For Apache Kafka也就是大家更熟悉的 Kafka Eagle不是 Kafka 官方出品的工具但它却是国内中大型 Kafka 生产环境里几乎人手一份的“运维显微镜”和“问题定位雷达”。我最早在 2019 年接手一个日均吞吐 80 亿条消息的金融风控集群时团队还在用kafka-topics.shkafka-consumer-groups.sh 自写 Python 脚本拼凑监控看板——查个 lag 要敲三行命令、等 8 秒返回、再手动算差值排查消费延迟时得 ssh 进三台 broker 翻日志一次完整诊断平均耗时 22 分钟。直到上线 EFAK 后同样的问题3 秒内就能在 Web 页面上看到 topic 分区级 lag 热力图、消费者组实时偏移、broker CPU/Heap 使用率趋势甚至能直接点开某条异常消息的原始 payloadbase64 解码后可读。它不替代 Kafka 本身但把 Kafka 从“黑盒管道”变成了“透明工厂”。核心价值非常直白把 Kafka 的运维、监控、调试、治理能力从命令行终端搬进浏览器且不牺牲精度和深度。它不是简单的 UI 包装器——比如你用它查看 consumer group 的 lag背后调用的是 Kafka AdminClient 的listConsumerGroupOffsets和describeConsumerGroups接口拿到的是与kafka-consumer-groups.sh --describe完全一致的底层数据它展示的 broker JMX 指标如kafka.server:typeBrokerTopicMetrics,nameMessagesInPerSec也是直接对接 JVM 的 JMX Agent和你用 jconsole 看到的数值完全一致。这种“零抽象层”的设计决定了它在生产环境中的可信度——我们团队把它部署在和 Kafka 集群同网段的专用监控节点上所有 SRE 和开发都通过它做日常巡检它的数据就是第一手事实。关键词里反复出现的“kafka 可视化工具”恰恰暴露了行业痛点Kafka 本身是极简主义设计官方只提供基础 CLI 工具而企业级场景需要的是可追溯、可告警、可下钻的全链路视图。EFAK 填补的正是这个空白。它不像某些商业产品那样堆砌花哨图表却无法定位真实问题也不像 PrometheusGrafana 那样需要自己定义大量 exporter 和 dashboard——EFAK 开箱即用且所有功能都围绕 Kafka 的原生语义构建topic、partition、consumer group、broker、offset、lag、commit log、JMX metrics。如果你正在被“kafka lag 如何进行排查”“kafka 查看 topic 中的数据”这类问题困扰或者正准备搭建“kafka 集群安装”后的第一套可视化平台那么 EFAK 不是“可选项”而是“必选项”。它适合三类人刚学 Kafka 的新手避免被 CLI 命令绕晕、负责 Kafka 运维的 SRE节省 70% 日常巡检时间、以及需要快速验证消息收发逻辑的开发跳过编译代码直接在页面上生产和消费测试消息。2. EFAK 架构设计与选型逻辑为什么是 Java Spring Boot ZooKeeper/Kafka NativeEFAK 的技术栈选择不是拍脑袋决定的而是对 Kafka 生态兼容性、运维成熟度、二次开发成本三者权衡后的最优解。很多人看到“Java 写的 Web 应用”就下意识觉得“重”但恰恰是这个选择让它在 Kafka 场景中稳如磐石。2.1 核心架构分层解析EFAK 采用典型的三层架构但每一层都深度绑定 Kafka 协议接入层Web UI基于 Vue.js 构建的单页应用所有前端请求都走 RESTful API。这里没有魔法——当你在页面上点击“刷新 topic 列表”前端发的是GET /api/kafka/topic/list?clusterprod后端收到后立刻调用 Kafka AdminClient 的listTopics()方法拿到结果再 JSON 序列化返回。Vue 组件只负责渲染不参与任何 Kafka 逻辑。服务层Spring Boot Backend这是 EFAK 的心脏。它不依赖任何中间件如 Redis 缓存元数据所有 Kafka 元数据topic 列表、partition 分布、ISR 状态、运行时数据consumer group offset、lag、JMX 指标全部通过原生 Kafka Client API 和 JMX Connector 实时拉取。关键点在于它使用的是org.apache.kafka:kafka-clients的 2.x/3.x 版本与你的 Kafka 集群版本严格对齐——比如你用的是 Kafka 3.0.0EFAK 就必须用 kafka-clients 3.0.0否则Admin.describeTopics()可能因协议变更而失败。这也是为什么安装时强调“版本匹配”不是为了形式主义而是生死攸关。存储层无状态设计EFAK 本身不持久化任何 Kafka 数据。它不建 MySQL 表存 topic 信息也不用 Elasticsearch 存消息内容。所有数据都是实时查询、瞬时缓存内存 MapTTL 30 秒。这种设计带来两个硬性好处一是部署极其轻量——你不需要额外维护数据库下载一个 tar 包、改几行配置、./start.sh就能跑二是数据绝对新鲜——你看到的 lag 值就是此刻 Kafka broker 内存里真实的 offset 差值不存在“缓存未更新导致误判”的风险。当然代价是高频查询会给 Kafka 集群带来轻微压力所以生产环境建议将 EFAK 部署在与 Kafka 同机房的节点上减少网络 RTT。2.2 为什么放弃其他技术栈有人会问为什么不用 Go 写Go 的并发模型更适合高并发 API。答案很现实Kafka 的 Java Client 是唯一经过十年以上生产验证的“金标准”。Confluent 官方 SDK、Spring for Apache Kafka、甚至 Kafka Streams 的底层全部基于这套 Client。用 Go 写就得自己实现 SASL/SSL 认证握手、SASL_PLAINTEXT 协议解析、甚至处理 Kafka 2.8 引入的 KRaft 模式元数据同步——这些工作量远超一个可视化工具的范畴且极易引入兼容性 bug。我们曾用 Go 实验性开发过一个简化版 EFAK当 Kafka 集群启用sasl.mechanismSCRAM-SHA-512时Go client 因 TLS handshake 失败卡死而 Java client 一行配置sasl.jaas.configorg.apache.kafka.common.security.scram.ScramLoginModule required usernameadmin passwordxxx;就搞定。另一个常见误区是“用 Docker 安装最方便”。确实docker run -d -p 8040:8040 -e KE_HOME/opt/efak -v /path/to/conf:/opt/efak/conf efak:latest一行命令就能启动。但我在 3 个不同客户的生产环境中踩过坑Docker 容器内的 JVM 无法正确识别宿主机的/proc/meminfo导致 EFAK 的 Heap Usage 图表显示为 0容器网络模式为 bridge 时EFAK 通过 JMX 连接 broker 的service:jmx:rmi:///jndi/rmi://broker-host:9999/jmxrmi地址会解析失败因为容器 DNS 看不到宿主机名。最终全部回退到裸机部署用 systemd 管理进程稳定性提升 100%。所以教程里强调“VMware 虚拟机安装教程”式的步骤不是守旧而是血泪教训。2.3 与同类工具的关键差异对比市场上其他 Kafka 可视化方案EFAK 的不可替代性体现在三个硬指标上对比维度EFAKConfluent Control CenterKafka Manager (Yahoo)Offset Explorer是否开源免费✅ 完全开源Apache 2.0❌ 商业授权免费版限 3 broker✅ 开源已停止维护✅ 开源桌面客户端是否支持多集群管理✅ 一个页面切换 prod/test/dev✅ 支持✅ 支持❌ 单集群连接是否支持 JMX 深度监控✅ Broker CPU/Heap/Network/Request Metrics 全量展示✅ 更丰富需额外部署 Metrics Reporter⚠️ 仅基础指标❌ 不支持是否支持消息内容查看与重发✅ 支持按 offset 查询、base64/json 自动解码、一键重发✅ 支持高级功能需付费❌ 不支持✅ 支持但无 Web UI是否支持 ACL 权限控制✅ 基于 LDAP/AD 或本地用户文件✅ 企业级 RBAC❌ 无❌ 无特别注意最后一项ACL 权限控制。很多团队在 Kafka 集群启用了 SASL/SCRAM 认证和 ACL 授权后发现 Offset Explorer 这类桌面工具根本连不上——因为它们不支持SASL_SSL通道下的 ACL 权限校验。而 EFAK 的 AdminClient 初始化时会自动读取配置文件中的security.protocolSASL_SSL和sasl.jaas.config并透传给 Kafka broker确保你用 admin 用户登录 EFAK 后看到的 topic 列表、consumer group 列表就是该用户实际有权限访问的范围。这种“权限即视图”的设计让 EFAK 成为企业级 Kafka 治理的合规入口。3. 保姆级安装实操从 VMware 虚拟机到生产可用的完整链路安装 EFAK 的本质不是“部署一个 Web 应用”而是“建立一条安全、稳定、低延迟的 Kafka 数据通道”。下面以 VMware Workstation 上的 CentOS 7.9 虚拟机为例这也是“vmware虚拟机安装教程”搜索热度高的原因——企业内部测试环境普遍用 VMware带你走完从零到一的全流程。所有步骤均基于 EFAK 3.0.1适配 Kafka 2.8实测拒绝“网上抄来的过时教程”。3.1 环境准备操作系统、Java、Kafka 集群的硬性要求首先明确三个不可妥协的前提操作系统必须是 LinuxCentOS 7/Ubuntu 18.04。Windows 下安装 EFAK 仅限学习生产环境绝对禁止。原因很简单EFAK 启动脚本start.sh里包含ulimit -n 65536提高文件描述符上限Windows 的 cmd/powershell 无法执行此命令且 JMX 连接依赖 Linux 的netstat和lsof工具Windows 需额外安装 Cygwin稳定性无法保障。Java 版本必须是 JDK 8u191 或 JDK 11。JDK 17 虽然支持但部分老版本 Kafka如 2.4.x的 Client 在 JDK 17 下会出现java.lang.NoClassDefFoundError: javax/xml/bind/DatatypeConverter错误因 JAXB 被移除。我们线上统一用 JDK 11.0.18经 2 年验证无兼容性问题。安装命令# 下载 JDK 11.0.18Linux x64 wget https://download.java.net/java/GA/jdk11/13/GPL/openjdk-11.0.18_linux-x64_bin.tar.gz tar -zxvf openjdk-11.0.18_linux-x64_bin.tar.gz -C /usr/local/ # 配置环境变量 echo export JAVA_HOME/usr/local/jdk-11.0.18 /etc/profile echo export PATH$JAVA_HOME/bin:$PATH /etc/profile source /etc/profile java -version # 输出应为 openjdk version 11.0.18Kafka 集群状态EFAK 不能独立运行它必须能连通你的 Kafka 集群。这意味着Kafka broker 的advertised.listeners必须配置正确例如PLAINTEXT://kafka1.example.com:9092且该域名能被 EFAK 服务器 DNS 解析如果 Kafka 启用了 SSL/SASLEFAK 配置文件中必须提供对应的 truststore 和 keystore 路径ZooKeeper如果 Kafka 仍用 ZK 模式或 KRaft Controller 的地址必须可达。提示很多初学者卡在“EFAK 启动后页面打不开”90% 的原因是 Kafka 集群网络不通。请先在 EFAK 服务器上执行telnet kafka1.example.com 9092确认端口连通再执行echo dump | nc zookeeper1.example.com 2181 | grep brokers确认 ZK 中有 broker 注册信息。这两步是安装前的黄金检查点。3.2 下载与解压避开官网镜像陷阱EFAK 官方 GitHub Release 页面https://github.com/kevin-zhangyong/EFAK/releases提供二进制包。但注意不要下载Source code要下载efak-3.0.1-bin.tar.gz约 120MB。有些镜像站如国内某些高校源会缓存旧版本导致你下到 2.0.9而该版本不支持 Kafka 3.x 的__consumer_offsetstopic 新格式启动后报错Unknown topic or partition。# 创建专用目录 mkdir -p /opt/efak cd /opt/efak # 下载请务必复制官网最新 Release 的链接 wget https://github.com/kevin-zhangyong/EFAK/releases/download/v3.0.1/efak-3.0.1-bin.tar.gz tar -zxvf efak-3.0.1-bin.tar.gz # 目录结构应为 # /opt/efak/ # ├── bin/ # 启动/停止脚本 # ├── conf/ # 核心配置文件 # ├── lib/ # 所有 jar 包 # └── web/ # 前端静态资源3.3 核心配置详解conf/efak.properties 的 7 个关键参数EFAK 的灵魂在conf/efak.properties。这个文件只有 50 行但每一行都影响功能可用性。以下是必须修改的 7 个参数附带原理说明efak.zk.connectlocalhost:2181如果 Kafka 使用 ZooKeeper 模式Kafka 3.3这里填 ZK 地址。如果是 KRaft 模式Kafka 3.3必须注释掉这行并取消注释efak.kafka.electors配置段。原理EFAK 通过 ZK 获取 broker 列表和 topic 元数据KRaft 模式下这些信息由 controller 通过 Kafka Admin API 提供不再依赖 ZK。efak.kafka.cluster[0].zk.connect192.168.10.101:2181这是第一个 Kafka 集群的 ZK 地址多集群时用[1],[2]。注意这里的 IP 必须是 EFAK 服务器能访问的 ZK 地址不是 Kafka broker 的地址。ZK 客户端连接的是 ZK不是 Kafka。efak.kafka.cluster[0].aliasPROD集群别名会显示在 Web 页面左上角下拉菜单中。建议用业务含义命名如FINANCE,LOGGING避免用kafka1这类技术标识。efak.kafka.cluster[0].bootstrap.serverskafka1.example.com:9092,kafka2.example.com:9092,kafka3.example.com:9092Kafka broker 的 bootstrap servers。这是 EFAK 获取实时数据的主通道。必须用advertised.listeners中配置的域名/IP且确保 EFAK 服务器能通过该地址访问 broker。如果 Kafka 启用了 SSL格式为SSL://kafka1.example.com:9093并需配置后续的 truststore 参数。efak.webui.port8040Web 服务端口。默认 8040可改为 8080 或其他空闲端口。但注意如果改了防火墙必须放行新端口firewall-cmd --permanent --add-port8080/tcp。efak.metrics.enabletrue是否启用 JMX 指标采集。生产环境必须设为true。它会自动扫描 broker 的 JMX RMI 端口默认 9999获取 CPU、Heap、Network 等指标。如果 broker 的JMX_PORT不是 9999需在 broker 启动脚本中指定-Dcom.sun.management.jmxremote.port9999。efak.security.auth.typeldap或efak.security.auth.typelocal认证方式。local模式使用conf/users.properties文件管理用户明文密码适合测试ldap模式对接企业 LDAP/AD生产推荐。users.properties示例adminsha256:5e884898da28047151d0e56f8dc6292773607d2d4edd6e931b22b774a1234567,admin,monitor monitorsha256:2c7a3a1b4d5e6f7g8h9i0j1k2l3m4n5o6p7q8r9s0t1u2v3w4x5y6z7a8b9c0d1,monitor密码用echo -n password | sha256sum生成角色用逗号分隔admin 权限最高可操作所有功能monitor 只能查看。3.4 启动与验证三步确认安装成功配置完成后启动只需一条命令# 赋予执行权限 chmod x /opt/efak/bin/start.sh # 启动后台运行 /opt/efak/bin/start.sh # 查看进程 ps -ef | grep efak # 检查日志关键 tail -f /opt/efak/logs/efak.log日志中出现以下三行代表启动成功INFO [main] o.s.b.w.e.t.TomcatWebServer : Tomcat started on port(s): 8040 (http) with context path INFO [main] c.s.e.EfaKApplication : Started EfaKApplication in 12.345 seconds (JVM running for 13.678) INFO [main] c.s.e.c.KafkaClusterConfig : Load cluster config: PROD, zk: 192.168.10.101:2181, bootstrap: kafka1.example.com:9092此时在宿主机浏览器访问http://虚拟机IP:8040如http://192.168.10.200:8040输入admin/admin登录。首次加载可能稍慢需拉取所有 topic 元数据耐心等待 30 秒。成功页面应显示左上角下拉菜单有PROD集群中间大屏显示 “Total Topics: 42”, “Total Brokers: 3”, “Total Consumer Groups: 18”点击 “Topics” 标签页列出所有 topic 名称、分区数、副本数点击任意 topic右侧显示分区列表、每个分区的 leader/broker、ISR 列表。注意如果页面显示 “No cluster found” 或 “Failed to load topics”99% 是bootstrap.servers配置错误。请回到conf/efak.properties用telnet kafka1.example.com 9092测试连通性并确认advertised.listeners中的地址与bootstrap.servers完全一致包括协议、端口、域名大小写。3.5 生产环境加固systemd 服务化与 HTTPSVMware 虚拟机上的测试环境下一步必须升级为生产级部署。核心动作是用 systemd 管理进程避免start.sh启动后终端关闭导致进程退出。# 创建 service 文件 cat /etc/systemd/system/efak.service EOF [Unit] DescriptionEFAK Service Afternetwork.target [Service] Typesimple Userroot WorkingDirectory/opt/efak ExecStart/opt/efak/bin/start.sh Restartalways RestartSec10 StandardOutputsyslog StandardErrorsyslog SyslogIdentifierefak [Install] WantedBymulti-user.target EOF # 启用服务 systemctl daemon-reload systemctl enable efak systemctl start efak systemctl status efak # 确认状态为 active (running)配置反向代理与 HTTPSEFAK 默认 HTTP 不安全生产必须加 Nginx 反代 SSL。# /etc/nginx/conf.d/efak.conf server { listen 443 ssl; server_name efak.yourcompany.com; ssl_certificate /etc/letsencrypt/live/yourcompany.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/yourcompany.com/privkey.pem; location / { proxy_pass http://127.0.0.1:8040; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }重启 Nginx 后即可通过https://efak.yourcompany.com安全访问。4. 核心功能实战从 Kafka 面试题到生产问题的秒级定位安装只是起点EFAK 的真正价值在于解决具体问题。下面用 4 个高频场景展示如何用 EFAK 把“kafka 面试题及答案”“kafka lag 如何进行排查”变成鼠标点几下的日常操作。4.1 场景一快速回答“Kafka 消息延迟高”——Lag 热力图下钻分析面试题常问“Kafka 消费延迟高怎么排查”传统答案是“先看 consumer group lag再查 broker 负载最后看 consumer 日志”。EFAK 把这个流程压缩到 10 秒内。操作路径Consumer Groups→ 选择目标 group如payment-service-v2→ 点击Lag列的数字如12,456页面立即展示分区级 lag 表格列出该 group 消费的所有 topic-partition按 lag 降序排列。你会立刻发现order-events-3分区 lag 高达 12,456而其他分区 lag 10热力图X 轴是 partition IDY 轴是 broker ID颜色深浅表示该 partition 的 lag 值。一眼锁定热点分区下钻按钮点击order-events-3行末的图标进入该分区详情页显示当前 consumer 的client.id和host定位到哪台机器该 consumer 的fetch-rate每秒拉取次数和fetch-size-avg平均拉取字节数判断是否网络瓶颈last-committed-offset和log-end-offset的差值确认 lag 确实存在leader-broker-id和isr列表检查是否因 ISR 缩小导致 fetch 延迟。实操心得我们曾遇到一个 caselag 热力图显示user-profile-7分区 lag 持续增长下钻发现其 leader brokerbroker 5的 CPU 使用率 98%而其他 broker 均 30%。立刻登录 broker 5top -H发现一个kafka-network-thread线程占满 CPU进一步jstack发现是 GC 频繁导致。这比在命令行里ssh broker5 top jstat -gc一套操作快 5 分钟。4.2 场景二验证“Kafka 能重复消费吗”——Offset 重置与消息重发面试题“Kafka 如何实现重复消费”答案是“重置 consumer group 的 offset”。EFAK 提供图形化重置避免kafka-consumer-groups.sh --reset-offsets的复杂参数。操作路径Consumer Groups→ 选择 group →Reset Offset标签页重置策略选择To Earliest重置到 topic 最早 offset相当于从头消费To Latest重置到当前最新 offset跳过积压消息To Datetime输入时间戳如2023-10-01T12:00:00Z重置到该时刻的 offsetTo Offset输入具体 offset 数字精确控制。范围选择可选All Topics整个 group或勾选特定 topic如只重置payment-failedtopic。点击Reset后EFAK 调用 AdminClient 的alterConsumerGroupOffsets()方法毫秒级完成。重置成功后页面自动刷新Lag列变为 0证明 offset 已生效。注意重置操作不可逆EFAK 会在执行前弹出确认框并高亮显示“此操作将永久改变 consumer group 的消费位置”。我们团队规定所有重置操作必须由两人复核且在Reset Offset页面右上角点击Audit Log查看历史记录EFAK 自动记录谁、何时、重置了哪个 group 的哪个 topic。4.3 场景三调试“Kafka 查看 topic 中的数据”——消息内容实时预览开发最头疼的莫过于“消息发出去了但 consumer 没收到到底是不是消息内容有问题”EFAK 的Messages功能让你无需写代码就能看到原始消息。操作路径Topics→ 选择 topic如user-registration→Messages标签页查询条件Partition选择具体分区默认 AllOffset输入起始 offset如1000或留空查最新 100 条Key/Value Format选择String纯文本、JSON自动格式化、Hex十六进制、Base64自动解码。结果展示表格列出Offset,Timestamp,Key,Value,HeadersValue列右侧有️图标点击展开 raw data避免长文本挤占表格如果 value 是 JSON会自动缩进和语法高亮如果 value 是 base64 编码如 Avro schema勾选Auto Decode Base64EFAK 会尝试解码并显示可读文本。实操心得有一次支付系统发的消息在 consumer 端解析失败报错Cannot deserialize instance of java.lang.String out of START_OBJECT token。我们用 EFAK 查看payment-requesttopic 的最新消息发现 value 是{amount:100,currency:CNY}但 consumer 期望的是纯字符串100。问题立刻定位上游服务序列化逻辑错误把对象当字符串发了。整个过程耗时 47 秒而用kafka-console-consumer.sh需要先找 offset、再指定--formatter、再人工 decode base64至少 5 分钟。4.4 场景四应对“Kafka 数据重复”——生产者幂等性与事务验证面试题“Kafka 如何保证不重复消费”答案涉及幂等 producer 和事务。EFAK 虽不直接配置 producer但能验证其效果。验证幂等性开启幂等 producer 后发送相同 key 的消息broker 会去重。EFAK 可观察__consumer_offsetstopic 的写入情况。Topics→ 搜索__consumer_offsets→Messages标签页设置Partition为0该 topic 的 partition 0 存储 group metadata查看最近 10 条消息Key字段是group_idtopic_partitionValue是 offset 提交记录如果幂等生效相同 group 的相同 partition offset 提交只会有一条记录broker 去重如果看到多条相同 key 的记录则幂等未生效。验证事务事务 producer 会写入__transaction_statetopic。同样用Messages查看其内容确认 transactional.id 和 stateOngoing/Complete/Abort。注意__consumer_offsets和__transaction_state是 Kafka 内部 topicEFAK 默认隐藏。需在conf/efak.properties中添加efak.system.topic.showtrue重启后才能在 Topics 列表中看到它们。这是高级功能普通用户无需开启但 SRE 必须掌握。5. 常见问题与避坑指南那些文档里不会写的实战经验EFAK 安装看似简单但生产环境总有一些“文档没写、百度找不到、只能靠踩坑”的细节。我把过去三年积累的 12 个典型问题整理成速查表并附上独家解决方案。5.1 启动失败类问题问题现象根本原因解决方案我的经验java.lang.OutOfMemoryError: MetaspaceJVM Metaspace 不足EFAK 加载大量 Kafka 类在bin/start.sh中JAVA_OPTS添加-XX:MaxMetaspaceSize512m我们集群有 200 topic不加此参数EFAK 启动 3 分钟后必 OOMFailed to bind to /0.0.0.0:8040端口被占用或 SELinux 阻止netstat -tuln | grep 8040查进程setsebool -P httpd_can_network_bind 1放行 SELinuxVMware 虚拟机默认开启 SELinux这是新手最大雷区org.apache.zookeeper.KeeperException$ConnectionLossExceptionEFAK 无法连接 ZK检查efak.zk.connect地址、ZK 服务状态、防火墙ZK 端口 2181ZK 连接失败时EFAK 日志只报错不提示具体原因需手动 telnet 测试5.2 功能异常类问题问题现象根本原因解决方案我的经验页面显示 “No data found” 但 Kafka 正常bootstrap.servers配置了内网 IP而 EFAK 服务器在公网将bootstrap.servers改为advertised.listeners中的公网域名Kafka broker 的advertised.listeners必须同时配置内网和公网地址EFAK 用公网地址consumer 用内网地址JMX 指标全部为 0broker 未开启 JMX 或端口不通在 broker 启动脚本中添加-Dcom.sun.management.jmxremote.port9999 -Dcom.sun.management.jmxremote.authenticatefalse -Dcom.sun.management.jmxremote.sslfalse生产环境严禁authenticatefalse必须配 SSL但测试环境可临时开启消息内容显示乱码消息用非 UTF-8 编码如 GBK在Messages页面Value Format选择String然后点击Encoding下拉框选GBKEFAK 默认 UTF-8老系统消息编码五花八门这个下拉框是救命稻草5.3 性能与安全类问题问题现象根本原因解决方案我的经验EFAK 页面响应慢10sEFAK 服务器与 Kafka 集群跨机房将 EFAK 部署在 Kafka 同机房或使用专线我们曾因 EFAK 在北京Kafka 在上海listTopics()耗时 8 秒最终迁移至同城机房
返回列表