> 技术文档 > Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer 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。

二、环境准备

在开始之前,确保你已经安装了 DockerDocker Compose。可以通过以下命令检查是否安装成功:

docker --versiondocker-compose --version

三、编写 Docker Compose 和 jaas文件

以下是一个完整的 docker-compose.yml 文件,用于启动 ZookeeperKafkaKafdrop(Kafka 监控工具),并开启 SASL PLAINTEXT认证:

docker-compose.yml

version: \'3\'services: zookeeper: image: wurstmeister/zookeeper:latest volumes: - /Users/tyy/Downloads/Guoye/docker-compose/kafka/server_jaas.conf:/etc/kafka/server_jaas.conf container_name: zookeeper environment: ZOOKEEPER_CLIENT_PORT: 2181 ZOOKEEPER_TICK_TIME: 2000 SERVER_JVMFLAGS: -Djava.security.auth.login.config=/etc/kafka/server_jaas.conf ports: - 2181:2181 restart: always kafka: image: wurstmeister/kafka:latest container_name: kafka depends_on: - zookeeper ports: - 9092:9092 volumes: - /Users/tyy/Downloads/Guoye/docker-compose/kafka/server_jaas.conf:/etc/kafka/server_jaas.conf environment: KAFKA_BROKER_ID: 0 KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181 KAFKA_LISTENERS: INTERNAL://:9093,EXTERNAL://:9092 KAFKA_ADVERTISED_LISTENERS: INTERNAL://kafka:9093,EXTERNAL://${KAFKA_HOST:-192.168.188.224}:9092 KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT ALLOW_PLAINTEXT_LISTENER: \'yes\' KAFKA_AUTO_CREATE_TOPICS_ENABLE: \'true\' KAFKA_INTER_BROKER_LISTENER_NAME: INTERNAL KAFKA_SASL_ENABLED_MECHANISMS: PLAIN KAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL: PLAIN KAFKA_OPTS: -Djava.security.auth.login.config=/etc/kafka/server_jaas.conf restart: always ## kafdrop 监控kafka的Ui工具 kafdrop: image: obsidiandynamics/kafdrop restart: always ports: - \"19001:9000\" environment: KAFKA_BROKERCONNECT: \"kafka:9093\" ## 如kafka开启了sasl认证后以下 sasl认证链接是必要的,下面的事经过base64加密后的结果 KAFKA_PROPERTIES: c2FzbC5tZWNoYW5pc206IFBMQUlOCiAgICAgIHNlY3VyaXR5LnByb3RvY29sOiBTQVNMX1BMQUlOVEVYVAogICAgICBzYXNsLmphYXMuY29uZmlnOiBvcmcuYXBhY2hlLmthZmthLmNvbW1vbi5zZWN1cml0eS5zY3JhbS5TY3JhbUxvZ2luTW9kdWxlIHJlcXVpcmVkIHVzZXJuYW1lPSdhZG1pbicgcGFzc3dvcmQ9JzJjUnZoTHNNY0lXeE1WczZ2WCc7 depends_on: - zookeeper - kafka cpus: \'1\' mem_limit: 1024m container_name: kafdrop

代码说明:

  1. Zookeeper 服务

    • image: wurstmeister/zookeeper:latest:使用最新版本的 Zookeeper 镜像。
    • volumes:将本地的 server_jaas.conf 文件挂载到容器/etc/kafka/server_jaas.conf 路径,用于 SASL 认证配置。
    • environment:设置 Zookeeper 的客户端端口和 Tick 时间,并指定 JVM 启动参数,加载 SASL 认证配置文件。
    • ports:将容器的 2181 端口映射到宿主机的 2181 端口。
  2. 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_LISTENERSKAFKA_ADVERTISED_LISTENERS:定义 Kafka 的监听地址和对外公布的地址,分别设置了内部和外部监听端口,默认配置了 IP192.168.188.224(需修改为你的 kafka 服务器 IP),也可运行时定义变量值IP 地址KAFKA_HOST
      • KAFKA_LISTENER_SECURITY_PROTOCOL_MAP:指定监听端口的安全协议为 SASL_PLAINTEXT。
      • KAFKA_SASL_ENABLED_MECHANISMSKAFKA_SASL_MECHANISM_INTER_BROKER_PROTOCOL:启用 PLAIN 认证机制。
      • KAFKA_OPTS:指定 JVM 启动参数,加载 SASL 认证配置文件。
  3. Kafdrop 服务

    • image: obsidiandynamics/kafdrop:使用 Kafdrop 镜像,用于监控 Kafka。
    • ports:将容器的 9000 端口映射到宿主机的 19001 端口。
    • environment
      • KAFKA_BROKERCONNECT:指定 Kafka 的连接地址。
      • KAFKA_PROPERTIES:经过 Base64 加密的 SASL 认证配置信息。
  4. 当前镜像image 版本
    避免在生产环境使用latest,应指定版本号或 sha256

wurstmeister/kafka latest sha256:2d4bbf9cc83d9854d36582987da5f939fb9255fb128d18e3cf2c6ad825a32751 a692873757c0 3 years ago 468MBwurstmeister/zookeeper latest sha256:7a7fd44a72104bfbd24a77844bad5fabc86485b036f988ea927d1780782a6680 3f43f72cb283 6 years ago 510MBobsidiandynamics/kafdrop latest sha256:6a2580833bafc05bfadb291d2be97b7c6c5e0e15238f8bdc4548310f4902bb68 b51547d96130 6 months ago 495MB

server_jaas.conf

Client { org.apache.zookeeper.server.auth.DigestLoginModule required username = \"admin\" password = \"2cRvhLsMcIWxMVs6vX\";};Server { org.apache.zookeeper.server.auth.DigestLoginModule required username = \"admin\" password = \"2cRvhLsMcIWxMVs6vX\" user_super = \"2cRvhLsMcIWxMVs6vX\" user_admin = \"2cRvhLsMcIWxMVs6vX\";};KafkaServer { org.apache.kafka.common.security.plain.PlainLoginModule required username = \"admin\" password = \"2cRvhLsMcIWxMVs6vX\" user_admin = \"2cRvhLsMcIWxMVs6vX\";};KafkaClient { org.apache.kafka.common.security.plain.PlainLoginModule required username = \"admin\" password = \"2cRvhLsMcIWxMVs6vX\";};

四、启动服务

将上述 docker-compose.yml 文件保存到本地,然后在终端中执行以下命令启动服务:

# 使用默认IPdocker-compose up -d# 配置 kafka 服务器 IP 运行KAFKA_HOST=192.168.16.10 docker-compose up -d

-d 参数表示在后台运行容器。

五、验证服务

  1. 检查容器是否正常运行:
docker ps

确保 ZookeeperKafkaKafdrop 容器都处于运行状态。

  1. 访问 Kafdrop 监控界面:
    打开浏览器,访问 http://192.168.188.224:19001,如果能够正常访问并看到 Kafka 的相关信息,说明服务已经成功启动。

  2. ZookeeperKafka 容器运行状态异常,请查看日志进行问题排查

# 查看容器日志docker logs 容器名称docker logs zookeeperdocker logs kafkadocker logs kafdrop

六、连接kafka服务

Mac 可使用 Offset Explorer3进行连接 kafka
软件下载地址:https://www.kafkatool.com/download.html

  1. 配置kafka IP,当前 IP 为 192.168.188.224
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

  2. 选择认证类型 SASL Plaintext
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

  3. 设置sasl.mechanism为PLAIN
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

  4. 设置认证信息
    org.apache.kafka.common.security.plain.PlainLoginModule required username=\"admin\" password=\"2cRvhLsMcIWxMVs6vX\";
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

  5. 保存并连接
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

  6. 连接成功,状态变为绿色
    Docker 运行 Kafka 带 SASL 认证教程_kafka dockeer sasl

七、总结

在实际生产环境中,你可以根据需要调整 docker-compose.yml 文件中的配置,以满足不同的需求。同时,要注意保护好 server_jaas.conf 文件,避免泄露认证信息。