Docker 运行 Kafka 带 SASL 认证教程
Docker 运行 Kafka 带 SASL 认证教程
- Docker 运行 Kafka 带 SASL 认证教程
- 一、说明
- 二、环境准备
- 三、编写 Docker Compose 和 jaas文件
- docker-compose.yml
- 代码说明:
- server_jaas.conf
- 四、启动服务
- 五、验证服务
- 六、连接kafka服务
- 七、总结
Docker 运行 Kafka 带 SASL 认证教程
一、说明
Kafka 是一个高性能、分布式的消息队列系统,在生产环境中,为了保证数据的安全性,通常需要对 Kafka 进行认证。SASL(Simple Authentication and Security Layer)是一种用于在应用层协议中提供认证和数据安全服务的机制,下面详细介绍如何使用 Docker 运行 Kafka 并开启 SASL_PLAINTEXT 认证。
代码文件已经运行及调试成功 成功运行时间:2025-6-10 。
当前kafka 服务 IP 为:192.168.188.224
以下涉及此 IP,都需要统一将 IP 替换为实际的 kafka 服务 IP。
二、环境准备
在开始之前,确保你已经安装了 Docker
和 Docker Compose
。可以通过以下命令检查是否安装成功:
docker --version
docker-compose --version
三、编写 Docker Compose 和 jaas文件
以下是一个完整的 docker-compose.yml
文件,用于启动 Zookeeper
、Kafka
和 Kafdrop
(Kafka 监控工具),并开启 SASL PLAINTEXT认证:
docker-compose.yml
version: '3'
services:zookeeper:image: wurstmeister/zookeeper:latestvolumes:- /Users/tyy/Downloads/Guoye/docker-compose/kafka/server_jaas.conf:/etc/kafka/server_jaas.confcontainer_name: zookeeperenvironment:ZOOKEEPER_CLIENT_PORT: 2181ZOOKEEPER_TICK_TIME: 2000SERVER_JVMFLAGS: -Djava.security.auth.login.config=/etc/kafka/server_jaas.confports:- 2181:2181restart: alwayskafka:image: wurstmeister/kafka:latestcontainer_name: kafkadepends_on:- zookeeperports:- 9092:9092volumes:- /Users/tyy/Downloads/Guoye/docker-compose/kafka/server_jaas.conf:/etc/kafka/server_jaas.confenvironment:KAFKA_BROKER_ID: 0KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181KAFKA_LISTENERS: INTERNAL://:9093,EXTERNAL://:9092KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://${KAFKA_HOST:-192.168.188.224}:9092KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXTALLOW_PLAINTEXT_LISTENER: 'yes'KAFKA_AUTO_CREATE_TOPICS_ENABLE: 'true'KAFKA_INTER_BROKER_LISTENER_NAME: INTERNALKAFKA_SASL_ENABLED_MECHANISMS: PLAINKAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAINKAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/server_jaas.confrestart: always## kafdrop 监控kafka的Ui工具kafdrop:image: obsidiandynamics/kafdroprestart: alwaysports:- "19001:9000"environment:KAFKA_BROKERCONNECT: "kafka:9093"## 如kafka开启了sasl认证后以下 sasl认证链接是必要的,下面的事经过base64加密后的结果KAFKA_PROPERTIES: c2FzbC5tZWNoYW5pc206IFBMQUlOCiAgICAgIHNlY3VyaXR5LnByb3RvY29sOiBTQVNMX1BMQUlOVEVYVAogICAgICBzYXNsLmphYXMuY29uZmlnOiBvcmcuYXBhY2hlLmthZmthLmNvbW1vbi5zZWN1cml0eS5zY3JhbS5TY3JhbUxvZ2luTW9kdWxlIHJlcXVpcmVkIHVzZXJuYW1lPSdhZG1pbicgcGFzc3dvcmQ9JzJjUnZoTHNNY0lXeE1WczZ2WCc7depends_on:- zookeeper- kafkacpus: '1'mem_limit: 1024mcontainer_name: kafdrop
代码说明:
-
Zookeeper 服务:
image: wurstmeister/zookeeper:latest
:使用最新版本的 Zookeeper 镜像。volumes
:将本地的server_jaas.conf
文件挂载到容器的/etc/kafka/server_jaas.conf
路径,用于 SASL 认证配置。environment
:设置 Zookeeper 的客户端端口和 Tick 时间,并指定 JVM 启动参数,加载 SASL 认证配置文件。ports
:将容器的 2181 端口映射到宿主机的 2181 端口。
-
Kafka 服务:
image: wurstmeister/kafka:latest
:使用最新版本的 Kafka 镜像。depends_on
:表示 Kafka 服务依赖于 Zookeeper 服务。ports
:将容器的 9092 端口映射到宿主机的 9092 端口。volumes
:同样挂载server_jaas.conf
文件。environment
:KAFKA_BROKER_ID
:指定 Kafka 代理的 ID。KAFKA_ZOOKEEPER_CONNECT
:指定 Zookeeper 的连接地址。KAFKA_LISTENERS
和KAFKA_ADVERTISED_LISTENERS
:定义 Kafka 的监听地址和对外公布的地址,分别设置了内部和外部监听端口,默认配置了 IP192.168.188.224
(需修改为你的 kafka 服务器 IP),也可运行时定义变量值IP 地址KAFKA_HOST
。KAFKA_LISTENER_SECURITY_PROTOCOL_MAP
:指定监听端口的安全协议为 SASL_PLAINTEXT。KAFKA_SASL_ENABLED_MECHANISMS
和KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL
:启用 PLAIN 认证机制。KAFKA_OPTS
:指定 JVM 启动参数,加载 SASL 认证配置文件。
-
Kafdrop 服务:
image: obsidiandynamics/kafdrop
:使用 Kafdrop 镜像,用于监控 Kafka。ports
:将容器的 9000 端口映射到宿主机的 19001 端口。environment
:KAFKA_BROKERCONNECT
:指定 Kafka 的连接地址。KAFKA_PROPERTIES
:经过 Base64 加密的 SASL 认证配置信息。
-
当前镜像image 版本
避免在生产环境使用latest,应指定版本号或 sha256
wurstmeister/kafka latest sha256:2d4bbf9cc83d9854d36582987da5f939fb9255fb128d18e3cf2c6ad825a32751 a692873757c0 3 years ago 468MB
wurstmeister/zookeeper latest sha256:7a7fd44a72104bfbd24a77844bad5fabc86485b036f988ea927d1780782a6680 3f43f72cb283 6 years ago 510MB
obsidiandynamics/kafdrop latest sha256:6a2580833bafc05bfadb291d2be97b7c6c5e0e15238f8bdc4548310f4902bb68 b51547d96130 6 months ago 495MB
server_jaas.conf
Client {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername = "admin"password = "2cRvhLsMcIWxMVs6vX";
};
Server {org.apache.zookeeper.server.auth.DigestLoginModule requiredusername = "admin"password = "2cRvhLsMcIWxMVs6vX"user_super = "2cRvhLsMcIWxMVs6vX"user_admin = "2cRvhLsMcIWxMVs6vX";
};
KafkaServer {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername = "admin"password = "2cRvhLsMcIWxMVs6vX"user_admin = "2cRvhLsMcIWxMVs6vX";
};
KafkaClient {org.apache.kafka.common.security.plain.PlainLoginModule requiredusername = "admin"password = "2cRvhLsMcIWxMVs6vX";
};
四、启动服务
将上述 docker-compose.yml
文件保存到本地,然后在终端中执行以下命令启动服务:
# 使用默认IP
docker-compose up -d# 配置 kafka 服务器 IP 运行
KAFKA_HOST=192.168.16.10 docker-compose up -d
-d
参数表示在后台运行容器。
五、验证服务
- 检查容器是否正常运行:
docker ps
确保 Zookeeper
、Kafka
和 Kafdrop
容器都处于运行状态。
-
访问 Kafdrop 监控界面:
打开浏览器,访问http://192.168.188.224:19001
,如果能够正常访问并看到 Kafka 的相关信息,说明服务已经成功启动。 -
若
Zookeeper
、Kafka
容器运行状态异常,请查看日志进行问题排查
# 查看容器日志
docker logs 容器名称
docker logs zookeeper
docker logs kafka
docker logs kafdrop
六、连接kafka服务
Mac 可使用 Offset Explorer3
进行连接 kafka
软件下载地址:https://www.kafkatool.com/download.html
-
配置kafka IP,当前 IP 为
192.168.188.224
-
选择认证类型
SASL Plaintext
-
设置sasl.mechanism为
PLAIN
-
设置认证信息
org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="2cRvhLsMcIWxMVs6vX";
-
保存并连接
-
连接成功,状态变为绿色
七、总结
在实际生产环境中,你可以根据需要调整 docker-compose.yml
文件中的配置,以满足不同的需求。同时,要注意保护好 server_jaas.conf
文件,避免泄露认证信息。