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