当前位置: 首页 > news >正文

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。

二、环境准备

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

docker --version
docker-compose --version

三、编写 Docker Compose 和 jaas文件

以下是一个完整的 docker-compose.yml 文件,用于启动 ZookeeperKafkaKafdrop(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

代码说明:

  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     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 参数表示在后台运行容器。

五、验证服务

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

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

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

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

# 查看容器日志
docker logs 容器名称
docker logs zookeeper
docker logs kafka
docker logs kafdrop

六、连接kafka服务

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

  1. 配置kafka IP,当前 IP 为 192.168.188.224
    在这里插入图片描述

  2. 选择认证类型 SASL Plaintext
    在这里插入图片描述

  3. 设置sasl.mechanism为PLAIN
    在这里插入图片描述

  4. 设置认证信息
    org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="2cRvhLsMcIWxMVs6vX";
    在这里插入图片描述

  5. 保存并连接
    在这里插入图片描述

  6. 连接成功,状态变为绿色
    在这里插入图片描述

七、总结

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

相关文章:

  • CARSIM-车速、油门、刹车练习
  • 破界协同:解锁电商平台混合云架构的双引擎效能
  • 微信小程序之bind和catch
  • Qt5 框架 CMake 探秘
  • C++11 花括号等式初始化器(Brace-or-Equal Initializers):从入门到精通
  • 顺应智能化建筑趋势,IBMS管理平台应用前景无限延伸
  • DMA:在不同内存空间建立目的地址的情况分析及后果
  • 服务器内存能不能用在台式机上
  • 网格布局示例代码解析
  • VSCode中PHP使用Xdebug
  • Easy系列PLC变频器控制功能块(ST源代码)
  • VsCode 离线插件下载
  • (1-6-5)Java 多线程(定长线程池)下载器(案例)
  • React 中的TypeScript开发范式
  • ubuntu桌面x11异常修复
  • 上位机开发过程中的设计模式体会(2):观察者模式和Qt信号槽机制
  • ubuntu + nginx 1.26 + php7.4 + mysql8.0 调优
  • 机器学习中的优化问题描述
  • Python列表:高效灵活的数据存储与操作指南
  • 讲讲JVM的垃圾回收机制
  • wordpress+dns预读/武汉seo人才
  • 大网站制作公司/seo优化的主要内容
  • wordpress用户可见/搜索引擎优化的常用方法
  • 广州企业网站建设开发/百度安装下载
  • 哪个cms方便快速建站/线上如何推广自己的产品
  • 分销系统网站建设/运营是做什么的