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

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

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

相关文章

​​CentOS 7.9​​ 上配置 ​​Fail2ban 自动封禁 IP​​ 的完整步骤,整合了多篇权威资料的最佳实践

🔧 ​​一、安装 Fail2ban​​ ​​启用 EPEL 仓库​​ yum install epel-release -y ​​安装 Fail2ban​​ yum install fail2ban -y ​​启动并设置开机自启​​ systemctl start fail2ban systemctl enable fail2ban ⚠️ 注意:CentOS 7.9 默认 Py…

损坏的RAID5 第十六次CCF-CSP计算机软件能力认证

纯大模拟 提前打好板子 我只通过4个用例点 然后就超时了。 #include<iostream> #include<cstring> #include<algorithm> #include<unordered_map> #include<bits/stdc.h> using namespace std; int n, s, l; unordered_map<int, string>…

Kafka Topic中的数据在消费后还存在吗

在 Kafka 的主题(Topic)和分区(Partition)中,数据在被消费者消费后是否仍然存在,取决于 Kafka 的设计机制和配置策略。

Linuxkernel学习-deepseek-2

以下是国际上广受好评的 Linux 内核权威公开课&#xff0c;均来自顶级高校和技术组织&#xff0c;附课程链接和特色说明&#xff1a; —### 一、殿堂级大学课程1. MIT 6.S081: Operating System Engineering - 核心&#xff1a;基于 RISC-V 架构 重写 Unix 内核&#xff08;xv6…

高频面试之6Hive

Hive 文章目录 Hive6.1 Hive的架构6.2 HQL转换为MR流程6.3 Hive和数据库比较6.4 内部表和外部表6.5 系统函数6.6 自定义UDF、UDTF函数6.7 窗口函数6.8 Hive优化6.8.1 分组聚合6.8.2 Map Join6.8.3 SMB Map Join6.8.4 Reduce并行度6.8.5 小文件合并6.8.6 谓词下推6.8.7 并行执行…

分类场景数据集大全「包含数据标注+训练脚本」 (持续原地更新)

一、作者介绍&#xff1a;六年算法开发经验、AI 算法经理、阿里云专家博主。擅长&#xff1a;检测、分割、理解、大模型 等算法训练与推理部署任务。 二、数据集介绍&#xff1a; 质量高&#xff1a;高质量图片、高质量标注数据&#xff0c;吐血标注、整理&#xff0c;可以作为…

从硬件视角审视Web3安全:CertiK CTO主持Proof of Talk圆桌论坛

6月10日&#xff0c;在备受瞩目的全球Web3与AI峰会Proof of Talk 2025上&#xff0c;CertiK首席技术官Li Kang博士主持了一场聚焦“Web3钱包与托管安全”&#xff08;Web3 Wallet and Custodial Security&#xff09;的圆桌论坛。本次论坛从硬件与系统软件的底层视角出发&#…

从DevOps到AIOps:智能体如何接管持续交付流程

引言&#xff1a;从DevOps到AIOps的时代跃迁 DevOps 作为软件开发与运维一体化的最佳实践&#xff0c;已经广泛应用于现代软件工程体系中。在 CI/CD&#xff08;持续集成/持续交付&#xff09;的支撑下&#xff0c;软件交付从季度变为月度、从周变为日&#xff0c;乃至分钟级更…

MAC-安装Homebrew、安装Git

1.首先尝试用中科大和清华的源发现不行 中国科学技术大学(USTC)提供了 Homebrew 的镜像仓库,同步官方更新,适合国内用户。 安装命令​​: /bin/bash -c "$(curl -fsSL https://mirrors.ustc.edu.cn/brew/install.sh)" 步骤说明​​: 复制上述命令到终端,按…

flutter基础面试知识汇总(二)

一、全局状态管理工具-----GetX、Provider、Bloc 1.Provider Provider 是 Flutter 中一个流行的状态管理库&#xff0c;它简化了数据共享和状态管理的过程。它通过依赖注入的方式&#xff0c;让不同的 Widget 共享数据&#xff0c;而无需过多地传递参数。Provider也是官方推荐…

基于YOLOv12的电力高空作业安全检测:为电力作业“保驾护航”,告别安全隐患!

在电力行业&#xff0c;尤其是高空作业场景&#xff0c;安全隐患无处不在。高空作业本身就存在着极高的风险&#xff0c;尤其是对于电力维护和检修工作来说&#xff0c;稍有不慎便可能造成严重的安全事故。传统的安全监管方式&#xff0c;如人工巡检和视频监控&#xff0c;存在…

大话软工笔记—需求分析汇总

需求调研和分析完成&#xff0c;可汇总形成两份文档&#xff1a;需求规格说明书和解决方案。 1. 需求规格说明书 1.1 主要内容 引言&#xff0c;包括项目目的、背景、用语等基础信息。项目概述&#xff0c;对项目自身的说明、包括范围、主要处理对象、与其他系统的关系等。功…

openstack实例创建过程分析

用户验证 1、某用户以登录web界面或执行rc文件的方式&#xff0c;通过RESTful API向keystone获取credentials&#xff1b; 2、keystone进行authentication&#xff0c;若正确则生成并返回auth-token&#xff1b; 3、以携带auth-token的形式&#xff0c;在web界面或命令行cli&a…

安卓首次启动Fallbackhome是否可以直接去除?--学员作业

背景&#xff1a; 有学员朋友在vip群提出一个需求相关的问题&#xff0c;他想要把settings裁剪掉&#xff0c;但是发现裁剪后Fallbackhome肯定就没了&#xff0c;发现Launcher居然无法启动了&#xff0c;一直处于Bootanimation的画面&#xff0c;无法进入系统。 针对这个去除…

C++ 实现环形缓冲区

环形缓冲区&#xff08;Ring Buffer&#xff09;是一种常见的用于数据流缓冲的结构&#xff0c;通常用于生产者-消费者模型、音视频处理等场景。 因为环形缓冲区使用的场景大多为性能敏感的场景&#xff0c;我们采用数组的数据结构和位运算来实现&#xff0c;以提高代码效率。…

MySQL虚拟列:一个被低估的MySQL特性

前言 最近在做订单系统重构时&#xff0c;遇到了一个有趣的问题。 系统里有很多地方都要计算订单的总价&#xff08;数量单价&#xff09;&#xff0c;这个计算逻辑分散在各个服务中&#xff0c;产生了不少相似甚至重复的代码。 代码评审时&#xff0c;同事提出了一个建议 —…

音频导入规范

一般音频可以交给策划来导入提交&#xff0c;需要遵循一些规范&#xff0c;下面是我们实际项目用到的一些规范 1、Force To Mono&#xff1a; 勾选&#xff0c;强制单声道。&#xff08;可以减少音效文件的内存占用&#xff09; 2、Normalize&#xff1a; 勾选&#xff0c;引…

使用html写一个倒计时页面

一个使用 HTML、CSS 和 JavaScript 实现的倒计时页面,包含动态效果和响应式布局: 功能特点: 动态效果: 每个时间单元带有 hover 动画(悬浮时轻微上浮)倒计时数字实时更新,精确到秒结束时自动更换背景颜色并显示提示信息响应式设计: 适配移动端屏幕(屏幕宽度小于600px…

spring boot源码和lib分开打包

1.项目通过maven引入的jar多了之后&#xff0c;用maven打出的jar会非常庞大&#xff0c;我的是因为引入了ffmpeg的相关jar,所以&#xff0c;每次上传服务更新都要传输好久&#xff0c;修改maven打包方式&#xff0c;改为源码和lib分离模式 2.maven的pom.xml配置如下 <build…

计算机网络笔记(三十)——5.2用户数据报协议UDP

5.2.1UDP概述 一、UDP 的定义 用户数据报协议 (User Datagram Protocol, UDP) 是传输层的无连接、不可靠协议。它提供最小化的协议机制&#xff0c;仅支持数据报的简单传输&#xff0c;不保证数据顺序或可靠性。 二、UDP 的核心特点 无连接 通信前无需建立连接&#xff0c;直…