- 开发工具
- 数据库客户端
- 桌面应用
【免费下载链接】Kafka-King
A modern and practical kafka GUI client 💕🎉Kafka-King 是一款现代化、实用的 Kafka GUI 客户端,旨在通过直观的桌面界面简化 Apache Kafka 管理。作为一款跨平台应用程序,它为开发人员和管理员提供了强大的工具,可与 Kafka 集群交互,无需依赖命令行界面或基于 Web 的解决方案。
Kafka-King 是一款面向开发者和运维人员的现代化 Kafka 桌面 GUI 客户端,它以直观的图形界面覆盖了从集群浏览、Topic 管理、消息生产/消费到 offset 积压巡检的完整链路。本文以仓库根目录的 README-CN.md 为骨架,结合app/backend/service下的 Go 源码与测试用例,系统讲解 Kafka-King 的功能全景、连接配置原理、下载安装注意事项以及本地编译开发方法,读完后你可以独立完成 Kafka 集群的连接配置、Topic 与消息的日常管理,并理解其底层调用链。
一、项目定位与技术栈
Kafka-King 是一个适配 Windows、macOS、Linux 各主流桌面系统的 Kafka GUI 客户端(README-CN 明确注明不支持 Windows 7),其 Kafka 协议兼容范围覆盖0.8.0 到 3.8+。客户端采用 Go + Web 前端的混合架构:
- 桌面框架基于 Wails,Go 后端与 Vue 前端通过 Wails 运行时绑定通信;
- Kafka 协议栈基于 franz-go,使用其
kgo(客户端)、kadm(管理)与kmsg(协议消息)三个核心包; - 前端使用 Vue 3 + Naive UI + ECharts + vue-i18n(见 app/frontend/package.json),并内置中、日、英、韩、俄等多语言支持。
从入口文件 app/main.go 可以看到,应用通过wails.Run启动,后端绑定App(应用生命周期)、AppConfig(配置持久化)、Update(版本检查)与KafkaService(全部 Kafka 业务方法)四个对象;窗口默认尺寸 1180×760、无边框模式,相关常量定义在 app/backend/common/vars.go。
二、核心功能全景
README-CN.md 给出的功能清单覆盖了 Kafka 日常运维的几乎全部场景,下面逐项展开并结合源码说明其实现位置。
2.1 集群节点与 Broker 管理
- 查看集群节点列表:
GetBrokers调用kadm.ListBrokers获取所有 Broker 的 node_id、host、port、rack,并通过 Metadata 请求识别 Controller 节点(KRaft 模式下即 controller quorum leader),实现见 app/backend/service/kafka.go; - 动态配置 Broker 配置项:
GetBrokerConfig/AlterNodeConfig封装了DescribeBrokerConfigs/AlterBrokerConfigs,返回配置的Source(DYNAMIC_BROKER_CONFIG、DEFAULT_CONFIG、STATIC_BROKER_CONFIG)与Sensitive标记(app/backend/service/kafka.go 与 kafka.go); - 日志目录与分区占用:
GetLogDirs通过DescribeAllLogDirs汇总每个 Broker 每个日志目录的总大小,并按分区粒度输出 size 与 offset_lag(app/backend/service/cluster.go); - 客户端配额:
GetQuotas/AlterQuota支持按 user、client-id、ip 实体查询与增删改配额,如producer_byte_rate(app/backend/service/cluster.go)。
2.2 Topic 全生命周期管理
- 创建主题(支持批量、指定副本与分区数):
CreateTopics接收 topics 数组与numPartitions、replicationFactor,并可附带 topic 级 configs(如retention.ms、cleanup.policy),见 app/backend/service/kafka.go; - 删除主题 / 删除消费组:
DeleteTopic、DeleteGroup分别逐 topic、逐 group 调用 kadm 接口并在成功后清空本地缓存(kafka.go); - 查看分区详细信息(leader、replicas、ISR、OfflineReplicas、LeaderEpoch)并支持扩容:
GetTopics组装完整的分区维度信息(kafka.go),CreatePartitions为指定 topic 增加分区数(kafka.go); - 修改 topic 配置:
AlterTopicConfig通过AlterTopicConfigs执行 SetConfig 操作(kafka.go); - 分区副本重分配:
ListReassignments/AlterPartitionReassignments支持查询进行中的重分配并以{分区:[broker...]}形式发起新分配,replicas 传空则取消进行中的重分配(app/backend/service/cluster.go)。
2.3 消息消费:单次拉取与流式消费
消费者客户端支持按照指定的 group 对指定 topic、size、timeout 进行消费,并以表格展示消息的 Offset、Key、Value、Timestamp、Partition、Headers、LeaderEpoch、ProducerEpoch 等维度(行结构由buildMessageRow生成,见 app/backend/service/stream.go)。
消费分为两种模式:
- 单次拉取:
Consumer通过PollRecords(ctx, num)在 timeout 秒内拉取指定条数,消费起点由isLatest、startTimestamp、startOffset三者控制(优先级:startOffset > startTimestamp > isLatest > 默认 earliest),支持read_committed/read_uncommitted隔离级别,并可选择是否提交 offset。其 client 被缓存在oneShotCache中,key 由 group、topic、isolationLevel 与起点参数共同构成,参数不变则复用 client 继续上次进度(app/backend/service/kafka.go); - 流式消费:
StartStreamConsumer创建独立的StreamInstance(每路消费拥有独立 kgo.Client,互不干扰),在独立 goroutine 中循环 poll 并以事件consumer-msg/consumer-err/consumer-start/consumer-end推送到前端,批量拉取下限为 10000 条以减少 IPC 次数(app/backend/service/stream.go)。
2.4 模拟生产者与消息压缩
Produce支持批量发送消息,可指定 key、value、headers(map 数组)、分区号与压缩方式;分区号为 -1 或未指定时自动分配(按 key hash 的 sticky 策略),partition >= 0时精确写入指定分区。压缩方式支持 gzip、lz4、zstd、snappy,其底层实现在 app/backend/utils/compress/conpress.go(Gzip、Lz4、Zstd、Snappy及对应解压函数)。另外ReproduceMessages可以把消费到的消息(含 Headers 的 JSON 字符串)回放到目标 topic,实现"复制消息"场景(kafka.go)。
值得注意的分区器细节:franz-go 默认分区器会忽略 record 上已设置的分区,而 ManualPartitioner 又强制要求设置分区,因此仓库实现了"二合一"的autoPartitioner——record.Partition >= 0时直接使用指定分区,否则回退到StickyKeyPartitioner(app/backend/service/partitioner.go)。
2.5 消费组、积压统计与 offset 巡检
- 查看消费组与消费者:
GetGroups列出 group 的 State、ProtocolType、Coordinator;GetGroupMembers通过DescribeGroups展开每个 member 的 ClientID、ClientHost,并解析其实际生效的分区分配(SyncGroup 阶段元数据,见 kafka.go); - 积压统计:
GetTopicOffsets同时获取各分区 start / end offset 与消费组 committed offset,前端据此计算每个 topic 的消息总量、提交总量与积压量(lag)(kafka.go); - offset 巡检报表:README-CN 明确提到"offset巡检,v0.33版本上线,最直观的方式查看消息积压情况"。对应前端 app/frontend/src/components/Monitor.vue 中的巡检面板,按时间序列采集 lag、commit、end 以及生产/消费速率,并支持把巡检方案(选中的 topics/groups)保存到本地
kafkaKingMonitorSchemes; - 积压告警:
CheckAndSendAlert支持设置阈值与 Webhook,当总积压超过阈值时按模板(支持{{consumer_group}}、{{total_lag}}、{{threshold}}、{{timestamp}}、{{topics}}等占位符,兼容[...]写法)渲染消息并 POST 到 Webhook URL,也可自定义 Header(kafka.go)。
2.6 offset 重置与消息删除
ResetGroupOffsets支持四种重置策略:start(重置到最早)、end(重置到最晚)、timestamp(重置到大于给定毫秒时间戳的第一条消息)、absolute(所有分区重置到指定 offset);topics 为空时自动从该 group 已提交的 offsets 推断 topic 列表。重置前会先关闭本应用占用的该 group 的消费者,否则 broker 会以 UNKNOWN_MEMBER_ID / ILLEGAL_GENERATION 拒绝提交(app/backend/service/offsets.go)。
DeleteRecords可删除 topic 在指定 offset 之前的所有记录(不可恢复!),offset 传 -1 表示删除全部,目标 offset 超过分区水位时自动钳制为删除全部,删除后返回各分区新的 low watermark(offsets.go)。
2.7 安全与扩展能力
除 README-CN 清单外,仓库还实现了 ACL 管理(GetAcls/CreateAcl/DeleteAcl,覆盖 TOPIC/GROUP/CLUSTER/TRANSACTIONAL_ID/DELEGATION_TOKEN 资源类型,见 kafka.go)、SCRAM 用户管理(ManageKafkaSCRAMUsers,默认 SCRAM-SHA-512、4096 次迭代,kafka.go)以及 Schema Registry 集成(subject 列表、版本、schema 全文、兼容性级别、软/硬删除,见 app/backend/service/sr.go)。
三、下载安装与平台注意事项
README-CN 提供两条下载渠道:
- Releases 页面下载:展开【Assets】后选择自己平台的安装包,支持 Windows、macOS、Linux;
- QQ 群高速下载:官方研发交流群号为964440643。
macOS 用户需要注意架构差异:"M1"、"M2" 通常是 ARM64 架构,"Intel" 是 AMD64 架构。如果 macOS 提示应用"已损坏"无法打开,原因是应用未签名被 Gatekeeper 拦截,在终端执行以下命令即可解除隔离:
xattr -dr com.apple.quarantine /Applications/Kafka-King.appWindows 用户若遇到 WebView2 运行时错误,需要从微软官方渠道下载并重装 WebView2 运行时(Kafka-King 的界面依赖 WebView2 渲染前端资源)。
四、连接前必看的四项注意事项
README-CN 在下载说明后特别强调以下四点,直接决定连接成败:
检查
advertised.listeners:使用前请检查 Kafka 集群配置的advertised.listeners。如果未配置,或配置的是域名,那么在 King 中填写连接地址时,请提前在本机电脑的 hosts 文件中添加对应域名解析,否则会因无法解析域名而连接失败——哪怕在 King 输入框里填的是 IP 也一样。这是因为 Kafka 协议会把 broker 通告的地址返回给客户端,客户端会按该地址二次建连。SSL/TLS 连接:如果连接需要 SSL,勾选 TLS 并勾选"忽略验证"即可快速连通;如果手头有证书,则开启 TLS 验证并填入证书路径(包括 CA、客户端证书与私钥路径)。
SASL 机制:需要 SASL 认证时,勾选开启 SASL 并选择 SASL 协议(通常是 PLAIN),填入用户名和密码。
WebView2 运行时:遇到 WebView2 运行时错误时,下载重装对应运行时即可解决。
五、连接配置源码解析
Kafka-King 的每个连接本质上是一组可持久化的配置项,其字段完整定义在Connect结构体中(app/backend/types/resp.go),保存于用户主目录下的.kafka-king/config.yaml(通过 app/backend/config/app.go 读写)。核心字段如下:
| 字段 | 说明 |
|---|---|
bootstrap_servers | 逗号分隔的 broker 地址列表,必填 |
tls/skipTLSVerify | 是否启用 TLS 与是否跳过证书校验 |
tls_cert_file/tls_key_file/tls_ca_file | 客户端证书、私钥、CA 文件路径 |
sasl/sasl_mechanism/sasl_user/sasl_pwd | SASL 开关、机制、用户名、密码 |
kerberos_user_keytab/kerberos_krb5_conf/Kerberos_user/Kerberos_realm/kerberos_service_name | Kerberos 认证所需文件与参数 |
use_ssh/ssh_host/ssh_port/ssh_user/ssh_password/ssh_key_file | SSH 隧道配置 |
连接建立的核心逻辑集中在SetConnect(app/backend/service/kafka.go):
- SSH 隧道:若启用 SSH,先建立跳板机连接,并通过
kgo.Dialer把所有 Kafka broker 连接(包括元数据发现的新 broker)路由进隧道,解决"只有第一个 bootstrap server 走隧道"的经典问题;支持密码与私钥两种认证方式; - TLS:启用后构造
tls.Config,skipTLSVerify为 true 时设置InsecureSkipVerify;提供证书/私钥时通过tls.LoadX509KeyPair加载,提供 CA 时构建RootCAs证书池,最后以kgo.DialTLSConfig注入; - SASL:根据
sasl_mechanism分派不同机制,见下表:
| 机制 | 实现 | 说明 |
|---|---|---|
| PLAIN | plain.Auth | 用户名/密码明文,最常用 |
| SCRAM-SHA-256 / SCRAM-SHA-512 | scram.Auth | 加盐挑战式认证 |
| OAUTHBEARER | oauth.Auth | 静态令牌模式,token 填在 SASL 密码框 |
| AWS_MSK_IAM | aws.Auth | AccessKey 填用户名、SecretKey 填密码,要求同时启用 TLS |
| GSSAPI(Kerberos) | kerberos.Auth | 加载 keytab 与 krb5.conf,支持自定义 service name |
- 连接校验:创建
kgo.NewClient与kadm.NewClient后先执行ListTopics做连通性验证;TestClient模式(isTest=true)验证完成后立即关闭所有本次创建的资源,正式连接则先关闭旧客户端、流式消费、缓存与旧隧道,再切换新资源。
六、测试与质量保障
仓库在 app/backend/service/kafka_kfake_test.go 中利用 franz-go 的kfake包启动内存假集群(kfake.NewCluster),以SetConnect建立连接后直接验证生产、消费、offset 统计与 Webhook 告警模板渲染等逻辑,无需真实 Kafka 环境即可运行;kafka_test.go则提供面向真实集群的集成测试(需设置KAFKA_KING_INTEGRATION=1才会执行)。这说明核心业务方法均可在无外部依赖下被测试验证。
七、参与开发:本地编译与运行
参与开发需要安装 Go、Node.js、npm,并先安装 Wails CLI:
go install github.com/wailsapp/wails/v2/cmd/wails@latest进入app目录启动开发模式(Wails 会自动编译 Go 后端并启动 Vite 前端热更新,前端 dev server 端口配置在 app/wails.json):
cd app wails dev源码布局方面,后端全部业务逻辑位于 app/backend/service(kafka.go、cluster.go、offsets.go、stream.go、sr.go、partitioner.go),压缩工具位于 app/backend/utils/compress,前端页面组件位于 app/frontend/src/components(Conn、Nodes、Topics、Consumer、Producer、Groups、Monitor、Acl、Sr、Settings 等),可按需深入阅读。
八、许可证与多语言
项目采用 Apache-2.0 许可证。界面内置中文、日语、英语、韩语、俄语等多种语言的翻译资源,新增语言时修改 app/frontend/src/i18n 下的语言文件即可。
功能截图
以下截图来自仓库 docs/snap 目录,与 README-CN 中的展示一一对应。
总体而言,Kafka-King 把 Kafka 协议层的复杂度封装在 Go 服务层,前端提供开箱即用的可视化操作;无论是连接参数的安全配置、Topic 与分区的日常管理,还是积压巡检与告警,都能在仓库源码中找到对应的实现与测试依据,是一份学习 Kafka 管理协议(kadm/kmsg)与桌面 GUI 集成的良好参考。
- 开发工具
- 数据库客户端
- 桌面应用
【免费下载链接】Kafka-King
A modern and practical kafka GUI client 💕🎉Kafka-King 是一款现代化、实用的 Kafka GUI 客户端,旨在通过直观的桌面界面简化 Apache Kafka 管理。作为一款跨平台应用程序,它为开发人员和管理员提供了强大的工具,可与 Kafka 集群交互,无需依赖命令行界面或基于 Web 的解决方案。
相关推荐
Kafka-King 使用与源码解析:基于 Wails 和 franz-go 的跨平台 Kafka GUI 客户端
Kafka King 使用与源码解析:基于 Wails 和 franz go 的跨平台 Kafka GUI 客户端 本文以仓库内葡萄牙语版项目介绍文档 docs
开发工具数据库客户端桌面应用Kafka-King 实战指南:基于 Wails 与 franz-go 的跨平台 Kafka GUI 客户端全功能解析
Kafka King 实战指南:基于 Wails 与 franz go 的跨平台 Kafka GUI 客户端全功能解析 Kafka King 是一款现代化、实用
开发工具数据库客户端桌面应用Kafka-King 使用指南:基于 Wails 与 franz-go 的现代化 Kafka GUI 客户端
Kafka King 使用指南:基于 Wails 与 franz go 的现代化 Kafka GUI 客户端 Kafka King 是一款跨平台(Windows
开发工具数据库客户端桌面应用
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考