Kafka 多协议配置分步指南
阶段 1:仅启用 PLAINTEXT(基础配置)
https://www.cnblogs.com/jiaxzeng/p/15980245.html
阶段 2:添加 SSL 协议
生成 SSL 证书
- ca证书
# 1. 生成 CA 私钥和自签名证书
openssl req -new -x509 -nodes \
-keyout ca.key -out ca.crt \
-days 3650 -subj "/C=CN/ST=GuangDong/L=GuangZhou/CN=Kafka Root CA"
# 2. 将 CA 证书导入 PKCS#12 格式的 truststore(客户端和服务器共用)
keytool -keystore kafka.server.truststore.p12 -storetype PKCS12 \
-alias CARoot -import -file ca.crt \
-storepass truststore_password -noprompt
# 清理临时文件
rm -f ca.srl
- 服务证书
# 1. 生成服务器 PKCS#12 格式的 keystore(包含私钥和未签名证书)
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
-alias localhost -validity 3650 \
-genkey -keyalg RSA -keysize 2048 \
-storepass keystore_password \
-dname "C=CN/ST=GuangDong/L=GuangZhou/CN=kafka-server"
# 2. 生成证书签名请求 (CSR)
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
-alias localhost -certreq -file server.csr \
-storepass keystore_password
# 3. 使用 CA 签名服务器证书(添加 SAN 扩展)
openssl x509 -req -CA ca.crt -CAkey ca.key \
-in server.csr -out server-signed.crt \
-days 3650 -CAcreateserial \
-extfile <(printf "subjectAltName=IP:172.139.20.17,IP:172.139.20.81,IP:172.139.20.177") # 所有kafka地址
# 4. 将 CA 证书和签名后的证书导入服务器 keystore
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
-alias CARoot -import -file ca.crt \
-storepass keystore_password -noprompt
keytool -keystore kafka.server.keystore.p12 -storetype PKCS12 \
-alias localhost -import -file server-signed.crt \
-storepass keystore_password -noprompt
# 5. 验证服务证书是否有SAN扩展
$ keytool -list -v -keystore kafka.server.keystore.p12 -alias localhost -storepass keystore_password | grep -A4 SubjectAlternativeName
# 清理临时文件
rm -f server.csr
更新 Kafka 配置 (server.properties)
listeners=PLAINTEXT://:9092,SSL://:9093
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093
# SSL 配置
ssl.keystore.location=/app/kafka/pki/kafka.server.keystore.p12
ssl.keystore.password=keystore_password
ssl.keystore.type=PKCS12
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
ssl.truststore.type=PKCS12
ssl.client.auth=none
验证 SSL
- 客户端配置 (ssl-client.properties)
security.protocol=SSL
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
ssl.truststore.type=PKCS12
- 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9093 --topic test --consumer.config ~/ssl-client.properties --from-beginning
确保test主题有消息,才能输出消息。
阶段 3:添加 SASL_PLAINTEXT(SCRAM 认证)
创建 SCRAM 用户
bin/kafka-configs.sh --bootstrap-server localhost:9092 --alter --add-config 'SCRAM-SHA-512=[password=admin-password]' --entity-type users --entity-name admin
更新 Kafka 配置 (server.properties)
listeners=PLAINTEXT://:9092,SSL://:9093,SASL_PLAINTEXT://:9094
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093,SASL_PLAINTEXT://172.139.20.17:9094
# SASL 配置
sasl.enabled.mechanisms=SCRAM-SHA-512
配置 JAAS 文件 (kafka_server_jaas.conf)
KafkaServer {
org.apache.kafka.common.security.scram.ScramLoginModule required
username="admin"
password="admin-secret";
};
启动 Kafka(kafka-server-start.sh)
# kafka-server-start.sh脚本开头添加
export KAFKA_OPTS="-Djava.security.auth.login.config=/app/kafka/config/kafka_server_jaas.conf"
验证 SASL_PLAINTEXT
- 客户端配置 (sasl-plain-client.properties )
security.protocol=SASL_PLAINTEXT
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-password";
- 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9094 --topic test --consumer.config ~/sasl-plain-client.properties --from-beginning
阶段 4:添加 SASL_SSL(SSL + SCRAM)
更新 Kafka 配置 (server.properties)
listeners=PLAINTEXT://:9092,SSL://:9093,SASL_PLAINTEXT://:9094,SASL_SSL://:9095
advertised.listeners=PLAINTEXT://172.139.20.17:9092,SSL://172.139.20.17:9093,SASL_PLAINTEXT://172.139.20.17:9094,SASL_SSL://172.139.20.17:9095
验证 SASL_SSL
- 客户端配置 (sasl-ssl-client.properties )
security.protocol=SASL_SSL
sasl.mechanism=SCRAM-SHA-512
sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required username="admin" password="admin-password";
ssl.truststore.location=/app/kafka/pki/kafka.server.truststore.p12
ssl.truststore.password=truststore_password
- 消费消息(SSL)
bin/kafka-console-consumer.sh --bootstrap-server 172.139.20.17:9095 --topic test --consumer.config ~/sasl-ssl-client.properties --from-beginning
保持 kafka/bin 命令使用 PLAINTEXT
所有 kafka-topics.sh、kafka-configs.sh 等工具默认使用 PLAINTEXT 端口 9092
$ bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
$ bin/kafka-configs.sh --bootstrap-server localhost:9092 --describe --entity-type users
$ bin/kafka-consumer-groups.sh --bootstrap-server localhost:9092 --all-groups --list
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· AI 智能体引爆开源社区「GitHub 热点速览」
· Manus的开源复刻OpenManus初探
· 写一个简单的SQL生成工具