Docker 运行 Kafka 带 SASL 认证教程

news2025/6/12 22:18:20

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: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     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 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 文件保存到本地,然后在终端中执行以下命令启动服务:

# 使用默认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 文件,避免泄露认证信息。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2407830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

《从零掌握MIPI CSI-2: 协议精解与FPGA摄像头开发实战》-- CSI-2 协议详细解析 (一)

CSI-2 协议详细解析 (一) 1. CSI-2层定义(CSI-2 Layer Definitions) 分层结构 :CSI-2协议分为6层: 物理层(PHY Layer) : 定义电气特性、时钟机制和传输介质(导线&#…

基于uniapp+WebSocket实现聊天对话、消息监听、消息推送、聊天室等功能,多端兼容

基于 ​UniApp + WebSocket​实现多端兼容的实时通讯系统,涵盖WebSocket连接建立、消息收发机制、多端兼容性配置、消息实时监听等功能,适配​微信小程序、H5、Android、iOS等终端 目录 技术选型分析WebSocket协议优势UniApp跨平台特性WebSocket 基础实现连接管理消息收发连接…

Swift 协议扩展精进之路:解决 CoreData 托管实体子类的类型不匹配问题(下)

概述 在 Swift 开发语言中,各位秃头小码农们可以充分利用语法本身所带来的便利去劈荆斩棘。我们还可以恣意利用泛型、协议关联类型和协议扩展来进一步简化和优化我们复杂的代码需求。 不过,在涉及到多个子类派生于基类进行多态模拟的场景下,…

无法与IP建立连接,未能下载VSCode服务器

如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…

基于Flask实现的医疗保险欺诈识别监测模型

基于Flask实现的医疗保险欺诈识别监测模型 项目截图 项目简介 社会医疗保险是国家通过立法形式强制实施,由雇主和个人按一定比例缴纳保险费,建立社会医疗保险基金,支付雇员医疗费用的一种医疗保险制度, 它是促进社会文明和进步的…

SCAU期末笔记 - 数据分析与数据挖掘题库解析

这门怎么题库答案不全啊日 来简单学一下子来 一、选择题(可多选) 将原始数据进行集成、变换、维度规约、数值规约是在以下哪个步骤的任务?(C) A. 频繁模式挖掘 B.分类和预测 C.数据预处理 D.数据流挖掘 A. 频繁模式挖掘:专注于发现数据中…

vscode(仍待补充)

写于2025 6.9 主包将加入vscode这个更权威的圈子 vscode的基本使用 侧边栏 vscode还能连接ssh? debug时使用的launch文件 1.task.json {"tasks": [{"type": "cppbuild","label": "C/C: gcc.exe 生成活动文件"…

解决Ubuntu22.04 VMware失败的问题 ubuntu入门之二十八

现象1 打开VMware失败 Ubuntu升级之后打开VMware上报需要安装vmmon和vmnet,点击确认后如下提示 最终上报fail 解决方法 内核升级导致,需要在新内核下重新下载编译安装 查看版本 $ vmware -v VMware Workstation 17.5.1 build-23298084$ lsb_release…

(二)TensorRT-LLM | 模型导出(v0.20.0rc3)

0. 概述 上一节 对安装和使用有个基本介绍。根据这个 issue 的描述,后续 TensorRT-LLM 团队可能更专注于更新和维护 pytorch backend。但 tensorrt backend 作为先前一直开发的工作,其中包含了大量可以学习的地方。本文主要看看它导出模型的部分&#x…

CMake基础:构建流程详解

目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成

关于nvm与node.js

1 安装nvm 安装过程中手动修改 nvm的安装路径, 以及修改 通过nvm安装node后正在使用的node的存放目录【这句话可能难以理解,但接着往下看你就了然了】 2 修改nvm中settings.txt文件配置 nvm安装成功后,通常在该文件中会出现以下配置&…

使用分级同态加密防御梯度泄漏

抽象 联邦学习 (FL) 支持跨分布式客户端进行协作模型训练,而无需共享原始数据,这使其成为在互联和自动驾驶汽车 (CAV) 等领域保护隐私的机器学习的一种很有前途的方法。然而,最近的研究表明&…

理解 MCP 工作流:使用 Ollama 和 LangChain 构建本地 MCP 客户端

🌟 什么是 MCP? 模型控制协议 (MCP) 是一种创新的协议,旨在无缝连接 AI 模型与应用程序。 MCP 是一个开源协议,它标准化了我们的 LLM 应用程序连接所需工具和数据源并与之协作的方式。 可以把它想象成你的 AI 模型 和想要使用它…

iPhone密码忘记了办?iPhoneUnlocker,iPhone解锁工具Aiseesoft iPhone Unlocker 高级注册版​分享

平时用 iPhone 的时候,难免会碰到解锁的麻烦事。比如密码忘了、人脸识别 / 指纹识别突然不灵,或者买了二手 iPhone 却被原来的 iCloud 账号锁住,这时候就需要靠谱的解锁工具来帮忙了。Aiseesoft iPhone Unlocker 就是专门解决这些问题的软件&…

【网络安全产品大调研系列】2. 体验漏洞扫描

前言 2023 年漏洞扫描服务市场规模预计为 3.06(十亿美元)。漏洞扫描服务市场行业预计将从 2024 年的 3.48(十亿美元)增长到 2032 年的 9.54(十亿美元)。预测期内漏洞扫描服务市场 CAGR(增长率&…

DAY 47

三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…

Linux相关概念和易错知识点(42)(TCP的连接管理、可靠性、面临复杂网络的处理)

目录 1.TCP的连接管理机制(1)三次握手①握手过程②对握手过程的理解 (2)四次挥手(3)握手和挥手的触发(4)状态切换①挥手过程中状态的切换②握手过程中状态的切换 2.TCP的可靠性&…

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…

【JVM】- 内存结构

引言 JVM:Java Virtual Machine 定义:Java虚拟机,Java二进制字节码的运行环境好处: 一次编写,到处运行自动内存管理,垃圾回收的功能数组下标越界检查(会抛异常,不会覆盖到其他代码…