Kafka 单节点Kraft模式+ACL+Kafka-Console-UI
version: '3.8'
services:
kafka:
image: bitnami/kafka:3.8
container_name: "kafka"
restart: always
extra_hosts:
- "kafka-service:192.168.11.112"
environment:
# Kafka 同时作为 broker 和 controller 运行
- KAFKA_CFG_PROCESS_ROLES=broker,controller
# 节点 ID,必须唯一标识该节点
- KAFKA_CFG_NODE_ID=1
# 配置 controller 节点,用于管理集群元数据,监听端口为 9093
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=1@kafka:9093
# Kafka 各种协议的监听配置
# SASL_PLAINTEXT:用于 broker 与客户端通信的协议,端口为 9092
# CONTROLLER:用于 controller 间的通信,端口为 9093,采用 PLAINTEXT 协议
- KAFKA_CFG_LISTENERS=SASL_PLAINTEXT://kafka:9092,CONTROLLER://kafka:9093
# 告诉 Kafka CONTROLLER 使用哪个监听器
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
# Kafka 向客户端公布的监听地址,这里监听的是 SASL_PLAINTEXT 协议的 broker
- KAFKA_CFG_ADVERTISED_LISTENERS=SASL_PLAINTEXT://kafka-service:9092
# Kafka broker 间通信时使用 SASL_PLAINTEXT 协议
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=SASL_PLAINTEXT
# 定义各监听器的安全协议,SASL_PLAINTEXT 用于 broker,PLAINTEXT 用于 controller
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=SASL_PLAINTEXT:SASL_PLAINTEXT,CONTROLLER:PLAINTEXT
# 启用的 SASL 认证机制,这里使用 PLAIN 认证
- KAFKA_CFG_SASL_ENABLED_MECHANISMS=SCRAM-SHA-256
# 设置 broker 间通信的 SASL 认证机制,使用 PLAIN
- KAFKA_CFG_SASL_MECHANISM_INTER_BROKER_PROTOCOL=SCRAM-SHA-256
# 启用 ACL 权限控制,通过 SimpleAclAuthorizer 实现
# zk模式 kafka.security.authorizer.AclAuthorizer
# kraft模式 org.apache.kafka.metadata.authorizer.StandardAuthorizer
- KAFKA_CFG_AUTHORIZER_CLASS_NAME=org.apache.kafka.metadata.authorizer.StandardAuthorizer
# 禁止无 ACL 规则时默认允许所有用户访问
- KAFKA_CFG_ALLOW_EVERYONE_IF_NO_ACL_FOUND=true
# 设置 Kafka 的超级用户(具有所有资源的完全访问权限)
# User:Bob;User:Alice
- KAFKA_CFG_SUPER_USERS=User:admin
#配置controller用户信息
- KAFKA_CONTROLLER_USER=admin
- KAFKA_CONTROLLER_PASSWORD=admin@2024
# 配置 broker 的 SASL JAAS 认证信息
- KAFKA_INTER_BROKER_USER=admin
- KAFKA_INTER_BROKER_PASSWORD=admin@2024
# - KAFKA_CLIENT_USERS=junpzx,test
# - KAFKA_CLIENT_PASSWORDS=junpzx@2024,test@2024
# 配置 Kafka 数据存储目录,挂载到容器外部
- KAFKA_CFG_LOG_DIRS=/bitnami/kafka/data
- KAFKA_CFG_METADATA_LOG_DIR=/bitnami/kafka/metadata/
# KAFKA消息大小限制
- KAFKA_MESSAGE_MAX_BYTES=10000000
ports:
# 映射 Kafka 的 broker 端口 (SASL_PLAINTEXT://kafka:9092) 到宿主机的 9092 端口
- "9092:9092"
# 挂载卷,将 Kafka 数据目录映射到宿主机的 ./kafka-data 目录
volumes:
- ./workspace/kafka:/bitnami/kafka
# 服务名
kafka-console-ui:
# 配置kafka的服务地址
extra_hosts:
- "kafka-service:192.168.11.112"
image: "junpzx/kafka-console-ui:1.0.11"
container_name: "kafka-console-ui"
restart: always
ports:
- "7766:7766"
volumes:
- ./workspace/kafka-console-ui/data:/app/data
- ./workspace/kafka-console-ui/log:/app/log
privileged: true
Kafka-Console-Ui连接配置
- 客户端连接地址:
kafka-service:9092
- 客户端连接配置:
request.timeout.ms=100000
sasl.mechanism=SCRAM-SHA-256
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin@2024";
security.protocol=SASL_PLAINTEXT