ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

kafka-ui 开源实践指南:用 Web UI 一站式监控与管理 Apache Kafka 集群

kafka-ui 开源实践指南:用 Web UI 一站式监控与管理 Apache Kafka 集群 kafka-ui 开源实践指南用 Web UI 一站式监控与管理 Apache Kafka 集群【免费下载链接】kafka-uiOpen-Source Web UI for Apache Kafka Management项目地址: https://gitcode.com/GitHub_Trending/ka/kafka-ui导读kafka-ui 是一款免费、开源的 Apache Kafka 管理 Web UI目标是让数据流可观测、可排查、可运维。本文以本仓库 README 为主线完整讲解其核心功能多集群管理、Broker/Topic/Consumer Group 查看、消息浏览、Schema Registry、动态 Topic 配置、数据脱敏等并给出可直接运行的 Docker 快速启动与持久化部署方案同时结合仓库源码与 compose 配置深入解析环境变量的真实解析逻辑、SASL 认证接入、健康检查端点等底层细节。读完本文你将能够独立部署 kafka-ui并基于配置文件将本地或生产 Kafka 集群含 Schema Registry、Kafka Connect、ksqlDB接入该 UI。一、kafka-ui 是什么kafka-uiUI for Apache Kafka是一个免费、开源的 Web UI用于监控和管理 Apache Kafka 集群。它的定位是由开发者构建、为开发者服务Built by developers, for developers用轻量级仪表盘轻松跟踪 Kafka 集群的关键指标——Brokers、Topics、Partitions、生产和消费情况让数据流变得可观测帮助更快定位和排查问题、获得更优性能。从仓库结构可以清晰看到它的技术栈分层根 pom.xmlkafka-ui-contract前后端共享的契约模块OpenAPI 契约与生成的 DTO前端kafka-ui-react-app通过gen:sources脚本见 package.json从 OpenAPI 规范生成 API 客户端代码kafka-ui-api后端服务基于Spring Boot 3.1.3、Kafka Clients 3.5.0并集成 Avro 1.11.1、Protobuf 3.23.3、ANTLR4用于 ksqlDB 语法解析见 KsqlGrammar.g4Java 版本要求 17见根 pom.xmlkafka-ui-react-app前端 SPA基于React 18 Vite 4 TypeScript Redux Toolkit React Query见 package.jsonNode 要求 v18.17.1、包管理器为 pnpm见 package.jsonkafka-ui-serde-api自定义序列化/反序列化Serde插件 APIkafka-ui-e2e-checks基于 Selenoid 的端到端测试套件见 README.md。后端入口 KafkaUiApplication.java 使用SpringBootApplication启动并通过DynamicConfigOperations.dynamicConfigPropertiesInitializer()注册初始化器以支持运行时动态配置DYNAMIC_CONFIG_ENABLEDtrue时启用。官方声明README 中的 DISCLAIMER本项目由开源社区构建并维护由 Provectus 策展将始终保持免费与开源不会加入任何付费功能或订阅计划。二、核心功能全景kafka-ui 的核心能力可归纳为以下十项完整继承自 README.md 的 Features 列表并补充源码佐证功能说明Multi-Cluster Management多集群管理在一个界面中监控和管理所有集群Performance Monitoring指标仪表盘用轻量级仪表盘跟踪关键 Kafka 指标View Kafka Brokers查看 Topic/Partition 分配情况、Controller 状态View Kafka Topics查看分区数、副本状态与自定义配置View Consumer Groups查看每个分区的 parked offsets、combined lag 与 per-partition lagBrowse Messages支持 JSON、纯文本、Avro 编码的消息浏览Dynamic Topic Configuration用动态配置创建和配置新 TopicConfigurable Authentication可选 OAuth 2.0GitHub/GitLab/Google保护安装Custom serde plugins直接使用 AWS Glue、Smile 等现成 serde或编写自己的序列化插件RBAC基于角色的访问控制以细粒度精确控制对 UI 的访问权限Data masking数据脱敏对 Topic 消息中的敏感数据进行混淆这些功能在后端均有对应实现模块从 controller 目录 可以看到BrokersController、TopicsController、ConsumerGroupsController、MessagesController、SchemasController、KafkaConnectController、KsqlController、AclsController、ClustersController等 REST 控制器分别支撑上述各功能消息浏览则依赖 emitter 目录 下的TailingEmitter、ForwardEmitter、BackwardEmitter、RangePollingEmitter等流式拉取实现配合PollingThrottler、ResultSizeLimiter控制拉取频率与结果大小。三、界面与典型操作流程kafka-ui 将 Apache Kafka 的主要管理操作封装为直观的图形界面。3.1 Topics浏览器中创建与管理主题只需几次点击即可在浏览器中创建 Topic粘贴自定义参数、在列表中查看主题。界面层面由 Topics 列表页含批量操作栏BatchActionsBar、主题表格TopicTable与 新建主题表单含共享的TopicForm与CustomParams自定义参数组件见 shared/Form支撑。kafka-ui 还支持在连接器Connectors视图与对应 Topic 之间、Topic 与消费组之间来回跳转方便导航同时可在 Topic 详情页直接查看概览Overview、设置Settings、消息Messages、消费组Consumer Groups、统计Statistics等标签页页面主文件见 Topic.tsx。3.2 Messages向 Topic 生产并浏览消息无需编写代码即可向 Kafka Topic 发送/写入数据指定参数key/value、分区、时间戳等然后以列表形式查看消息。前端入口为 SendMessage 组件 与 Messages 组件支持消息过滤Filters、消息内容预览PreviewModal与多种 Serde 展示后端由 MessagesController 提供 SSE 流式接口。3.3 Schema RegistryAvro / JSON Schema / Protobufkafka-ui 支持3 种类型的 SchemaAvro®、JSON Schema 和 Protobuf。在向 Topic 生产 avro/protobuf 编码的消息之前需要先在 Schema Registry 中为 Topic 添加 Schema——这些步骤都可以在友好的界面中点击完成新建、编辑、查看版本、Diff 对比前端见 Schemas 目录后端见 SchemasController。四、快速开始Docker 一键体验运行 kafka-ui 可以使用预构建的 Docker 镜像也可以自行构建镜像或 jar 包。4.1 Demo 快速运行一条命令即可体验docker run -it -p 8080:8080 -e DYNAMIC_CONFIG_ENABLEDtrue provectuslabs/kafka-ui随后访问 http://localhost:8080 即可打开 Web UI。该命令足够用于试用试用结束后可继续采用下面的持久化安装方案。参数说明-e DYNAMIC_CONFIG_ENABLEDtrue用于开启动态配置能力在界面上通过集群配置向导维护集群而不是依赖静态配置文件/环境变量这也是快速演示推荐开启的原因。镜像内部默认以非 root 用户kafkaui运行并创建了/etc/kafkaui/目录用于存放动态配置所需的证书上传等文件见 kafka-ui-api/Dockerfile。4.2 持久化安装Docker Compose以下 compose 配置源自仓库 documentation/compose/kafka-ui.yaml 的精简版把 kafka-ui 与本地 KafkaKRaft 模式、Schema Registry、Kafka Connect 组合起来services: kafka-ui: container_name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - 8080:8080 environment: DYNAMIC_CONFIG_ENABLED: true volumes: - ~/kui/config.yml:/etc/kafkaui/dynamic_config.yaml要点解析image: provectuslabs/kafka-ui:latest官方发布镜像镜像内通过EXPOSE 8080暴露 Web 端口见 Dockerfileports: 8080:8080宿主机与容器 8080 端口映射DYNAMIC_CONFIG_ENABLED: true启用动态配置此时初始集群信息可由挂载到/etc/kafkaui/dynamic_config.yaml的配置文件提供见 Dockerfile 中该目录的创建也可在 UI 的配置向导中维护~/kui/config.yml宿主机上的配置目录按需替换为你自己的配置文件路径。仓库 documentation/compose 目录下还提供了丰富的现成 compose 模板可直接参考使用kafka-ui.yaml双 KafkaKRaft 双 Schema Registry Kafka Connect ksqlDB 的完整环境kafka-ui-sasl.yamlSASL_PLAINTEXT PLAIN 机制认证接入示例kafka-ssl.yml 与 kafka-ssl-components.yamlTLS/SSL 加密接入示例相关证书生成脚本见 ssl/generate_certs.shkafka-ui-acl-with-zk.yaml基于 ZooKeeper 的 ACL 场景kafka-ui-serdes.yaml自定义 Serde 插件加载示例kafka-ui-auth-context.yaml认证上下文配置示例kafka-ui-jmx-secured.yml 与 kafka-ui-with-jmx-exporter.yamlJMX 指标采集含安全认证示例e2e-tests.yaml端到端测试用的完整环境含健康检查与初始化 Topic 的kafka-init-topics服务。完整的 Compose 使用说明见 documentation/DOCKER_COMPOSE.md。五、深入理解集群配置环境变量与配置文件kafka-ui 的所有集群配置环境变量/配置属性最终都由后端的 ClustersProperties.java 承载该类使用ConfigurationProperties(kafka)绑定前缀kafka其中clusters是Cluster对象的列表。这意味着每个集群都是一组以KAFKA_CLUSTERS_N_...为前缀的环境变量对应 YAML 中的kafka.clusters[N]....。5.1 Cluster 支持的核心配置项依据 ClustersProperties.java 的 Cluster 内部类每个集群可配置环境变量名按驼峰转大写并以下划线连接如name→KAFKA_CLUSTERS_0_NAME配置项YAML 路径对应环境变量说明nameKAFKA_CLUSTERS_0_NAME集群显示名称多集群时必须提供且不能重名源码validateClusterNames()会在启动时校验并抛异常见 ClustersProperties.java单集群时可不填默认命名为DefaultbootstrapServersKAFKA_CLUSTERS_0_BOOTSTRAPSERVERSBroker 地址列表逗号分隔必填schemaRegistryKAFKA_CLUSTERS_0_SCHEMAREGISTRYSchema Registry 地址如http://schemaregistry0:8085schemaRegistryAuthKAFKA_CLUSTERS_0_SCHEMAREGISTRYAUTH_*Schema Registry 的用户名/密码认证ksqldbServerKAFKA_CLUSTERS_0_KSQLDBSERVERksqlDB 服务器地址如http://ksqldb:8088kafkaConnect[]KAFKA_CLUSTERS_0_KAFKACONNECT_i_NAME/ADDRESSKafka Connect 集群列表可多个每项含名称与 REST 地址metricsKAFKA_CLUSTERS_0_METRICS_*JMX 指标采集配置type缺省自动填充为 JMX见 setMetricsDefaults、port、ssl、用户名密码等propertiesKAFKA_CLUSTERS_0_PROPERTIES_*透传给 Kafka 客户端的任意配置如SECURITY_PROTOCOL、SASL_MECHANISM、SASL_JAAS_CONFIG支持嵌套 Map启动时会被递归拍平为key.subkeyvalue形式见 flattenClusterPropertiesreadOnlyKAFKA_CLUSTERS_0_READONLY是否为只读集群禁止写操作serde[]KAFKA_CLUSTERS_0_SERDE_i_*自定义序列化插件声明name、className、filePath、properties、topicKeysPattern/topicValuesPattern按 Topic 名正则匹配生效defaultKeySerde/defaultValueSerdeKAFKA_CLUSTERS_0_DEFAULTKEYSERDE/..._DEFAULTVALUESERDE默认 key/value Serde 名称masking[]KAFKA_CLUSTERS_0_MASKING_i_*数据脱敏规则type取REMOVE/MASK/REPLACEfields、fieldsNamePattern、replacement等见 Masking 类sslKAFKA_CLUSTERS_0_SSL_*truststore 位置与密码auditKAFKA_CLUSTERS_0_AUDIT_*审计日志配置topic、auditTopicsPartitions、topicAuditEnabled、consoleAuditEnabled、level默认ALTER_ONLY等见 AuditProperties5.2 多集群 Schema Registry Kafka Connect 完整示例下面这段配置直接取自仓库 documentation/compose/kafka-ui.yaml演示了同时接入两个 Kafka 集群各自挂 Schema Registry 与 Kafka Connect的完整写法services: kafka-ui: container_name: kafka-ui image: provectuslabs/kafka-ui:latest ports: - 8080:8080 depends_on: - kafka0 - kafka1 - schemaregistry0 - schemaregistry1 - kafka-connect0 environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka0:29092 KAFKA_CLUSTERS_0_METRICS_PORT: 9997 KAFKA_CLUSTERS_0_SCHEMAREGISTRY: http://schemaregistry0:8085 KAFKA_CLUSTERS_0_KAFKACONNECT_0_NAME: first KAFKA_CLUSTERS_0_KAFKACONNECT_0_ADDRESS: http://kafka-connect0:8083 KAFKA_CLUSTERS_1_NAME: secondLocal KAFKA_CLUSTERS_1_BOOTSTRAPSERVERS: kafka1:29092 KAFKA_CLUSTERS_1_METRICS_PORT: 9998 KAFKA_CLUSTERS_1_SCHEMAREGISTRY: http://schemaregistry1:8085 DYNAMIC_CONFIG_ENABLED: true其中KAFKA_CLUSTERS_0_METRICS_PORT: 9997对应 broker 暴露的 JMX 端口broker 侧通过KAFKA_JMX_PORT启用见 kafka-ui.yamlKAFKA_CONNECT下标从 0 开始可声明多个 Connect 集群。同文件还给出了 Confluent 7.2.1 的 KRaft 模式 Kafka、cp-schema-registry、cp-kafka-connect 以及用kafka-init-topics容器初始化示例 Topic 并灌入data/message.json消息的完整编排可作为本地开发环境的一键全家桶。5.3 SASL 认证接入示例当 Kafka 集群启用了 SASL 认证时通过KAFKA_CLUSTERS_0_PROPERTIES_*透传客户端认证参数即可接入。以下精简自 documentation/compose/kafka-ui-sasl.yamlservices: kafka-ui: image: provectuslabs/kafka-ui:latest ports: - 8080:8080 environment: KAFKA_CLUSTERS_0_NAME: local KAFKA_CLUSTERS_0_BOOTSTRAPSERVERS: kafka:29092 KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL: SASL_PLAINTEXT KAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM: PLAIN KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIG: org.apache.kafka.common.security.plain.PlainLoginModule required usernameadmin passwordadmin-secret;三个关键透传属性KAFKA_CLUSTERS_0_PROPERTIES_SECURITY_PROTOCOL设为SASL_PLAINTEXT加密场景用SASL_SSLKAFKA_CLUSTERS_0_PROPERTIES_SASL_MECHANISM认证机制如PLAIN、SCRAM-SHA-256、SCRAM-SHA-512等KAFKA_CLUSTERS_0_PROPERTIES_SASL_JAAS_CONFIGJAAS 配置串指定 LoginModule 与用户名/密码。这些PROPERTIES_*最终会被flattenClusterProperties()拍平后原样传给 Kafka 客户端见 ClustersProperties.java因此任何 Kafka 客户端支持的安全配置SSL truststore、kerberos 等都可以通过相同方式透传。仓库中 jaas/ 目录还提供了kafka_server.conf、client.properties等配套 JAAS 文件。5.4 UI 内配置向导与 Web 表单除了静态配置kafka-ui 还提供Web UI 集群配置向导在界面上以表单方式新增/编辑集群前端实现见 widgets/ClusterConfigForm支持 AuthenticationBasic/OAuth2 等、KafkaConnect、SchemaRegistry、Metrics、KSQL 等分区块表单数据通过transformFormDataToPayload转换后提交见 transformFormDataToPayload.ts并配套 schema.ts 做前端校验。该能力依赖DYNAMIC_CONFIG_ENABLEDtrue开启后端初始化器见 KafkaUiApplication.java。六、健康检查与运维端点kafka-ui 提供 Spring Boot Actuator 端点README 明确说明Liveliness / Readiness 探针/actuator/healthInfo 端点构建信息/actuator/info。在容器编排中可直接用于健康检查。仓库 e2e-tests.yaml 给出了 Docker Compose 场景下的标准写法healthcheck: test: wget --no-verbose --tries1 --spider http://localhost:8080/actuator/health interval: 30s timeout: 10s retries: 10七、从源码构建与运行除 Docker 外也可以从源码构建。仓库采用 Maven 多模块结构根 pom.xml并提供 Maven Wrappermvnw / mvnw.cmd# 使用项目自带 Maven Wrapper 构建后端含前端构建产物 ./mvnw clean package构建流程要点依据 pom.xml 与 package.json后端编译要求Java 17maven.compiler.release17见 pom.xml前端构建需要Node.js v18.17.1与pnpm 8.6.12见根 pom.xml 的 frontend 依赖版本及 package.json 的engines字段前端代码通过frontend-maven-plugin1.12.1在 Maven 生命周期中执行pnpm install、vite build等步骤产物由后端打包为单 jar前端也支持独立开发在 kafka-ui-react-app 目录执行pnpm install pnpm start即vite见 package.json即可启动 Vite Dev Server后端 Docker 镜像入口以java --add-opens java.rmi/javax.rmi.sslALL-UNNAMED $JAVA_OPTS -jar kafka-ui-api.jar启动该--add-opens与 JMX SSL 套接字工厂实现有关见 Dockerfile。八、更多参考与后续路线Compose 使用总览documentation/DOCKER_COMPOSE.md覆盖本文未展开的 SSL、SASL、JMX、ACL 等全部 compose 场景配置示例集documentation/compose 目录下所有*.yaml认证与 RBAC后端认证安全配置见 config/auth包含 Basic、LDAP、OAuth、RBAC 等实现类前端权限控制见 permissions.ts前端界面源码kafka-ui-react-app/src/components 按功能模块Topics、Schemas、Connect、ConsumerGroups、Brokers、KsqlDb、ACLPage 等组织参与贡献请阅读仓库根目录的 CONTRIBUTING.md 与 CODE-OF-CONDUCT.md。总而言之kafka-ui 以开箱即用为设计哲学——Docker 一条命令即可获得完整的 Kafka 可视化运维面板当需要接入生产集群时通过KAFKA_CLUSTERS_N_...系列环境变量即可完成多集群、认证、Schema Registry、Kafka Connect、指标、Serde 与数据脱敏的全方位配置配合DYNAMIC_CONFIG_ENABLED还能在 UI 中动态维护集群信息是日常监控与故障排查的实用工具。【免费下载链接】kafka-uiOpen-Source Web UI for Apache Kafka Management项目地址: https://gitcode.com/GitHub_Trending/ka/kafka-ui创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表