Kafka 开启 SASL_PLAINTEXT 双监听器认证(内网/外网)

  • 背景:云上部署 Kafka 时,由于业务需要,需要开放外网端口进行访问。为保证安全,需要开启 SASL_PLAINTEXT 认证。

文章目录

1️⃣修改Kafka配置文件server.properties

bash 复制代码
vim /opt/kafka/config/server.properties

# 内外网监听器
listeners=INTERNAL://192.168.162.99:9093,EXTERNAL://0.0.0.0:9092

# 映射监听器对应协议
listener.security.protocol.map=INTERNAL:SASL_PLAINTEXT,EXTERNAL:SASL_PLAINTEXT

# 广播给客户端的地址
advertised.listeners=INTERNAL://192.168.162.99:9093,EXTERNAL://YOUR_PUBLIC_IP:9092

# 内部 Broker 间通信使用内网
inter.broker.listener.name=INTERNAL

# SASL 配置
sasl.mechanism.inter.broker.protocol=PLAIN
sasl.enabled.mechanisms=PLAIN

2️⃣ 配置 JAAS 文件 config/jaas.conf

bash 复制代码
vim /opt/kafka/config/jaas.conf
KafkaServer {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="YourPassword123!"
    user_admin="YourPassword123!"
    user_zhangsan="123456";  # 可配置多个客户端账号
};

说明:

username/password:Kafka Broker 自身认证

user_XXX="密码":客户端可用账号

保证至少有一条 user_XXX 的密码与 username 一致

3️⃣修改启动脚本

bash 复制代码
vim /opt/kafka/bin/kafka-run-class.sh
if [ -z "$KAFKA_OPTS" ]; then
  KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/jaas.conf"
fi

然后用:

bash 复制代码
nohup bin/kafka-server-start.sh config/server.properties >> logs/kafka-console.log 2>&1 &

4️⃣ 客户端连接配置

创建 config/admin-sasl-plain.properties:

bash 复制代码
security.protocol=SASL_PLAINTEXT
sasl.mechanism=PLAIN
sasl.jaas.config=org.apache.kafka.common.security.plain.PlainLoginModule required username="admin" password="YourPassword123!";

5️⃣ 测试客户端连接

测试 1:使用密码

bash 复制代码
/opt/kafka/bin/kafka-topics.sh --list \
  --bootstrap-server YOUR_PUBLIC_IP:9092 \
  --command-config config/admin-sasl-plain.properties

测试 2:不使用密码

bash 复制代码
/opt/kafka/bin/kafka-topics.sh --list --bootstrap-server YOUR_PUBLIC_IP:9092

结果会报错:TimeoutException,说明 SASL 认证生效。

6️⃣日志提示

如果日志出现:

bash 复制代码
Failed authentication ... (Authentication failed: Invalid username or password)

说明客户端密码错误或未配置。正常现象,可忽略。

7️⃣ SpringBoot 使用示例

bash 复制代码
spring:
  kafka:
    bootstrap-servers: YOUR_PUBLIC_IP:9092
    producer:
      properties:
        sasl.mechanism: PLAIN
        security.protocol: SASL_PLAINTEXT
    consumer:
      properties:
        sasl.mechanism: PLAIN
        security.protocol: SASL_PLAINTEXT

kafka-jaas.conf:

bash 复制代码
KafkaClient {
    org.apache.kafka.common.security.plain.PlainLoginModule required
    username="admin"
    password="YourPassword123!";
};

启动时加载 JAAS 配置:

bash 复制代码
@SpringBootApplication
public class Application {
    public static void main(String[] args) throws IOException {
        File file = ResourceUtils.getFile("classpath:kafka-jaas.conf");
        System.setProperty("java.security.auth.login.config", file.getAbsolutePath());
        SpringApplication.run(Application.class, args);
    }
}

✅ 总结

  1. 内外网双监听器可同时支持云主机内网和公网访问 SASL_PLAINTEXT
  2. 提供基本认证,但明文传输,需要结合 VPN 或 SSL
  3. 客户端必须使用 JAAS 配置才能访问 Kafka
相关推荐
ACP广源盛1392462567317 小时前
GSV5600@ACP#多接口协议转换芯片,物理 AI 便携终端的互联核心
大数据·人工智能·分布式·嵌入式硬件·spark
极客先躯1 天前
高级java每日一道面试题-2026年02月12日-实战篇[Docker]-什么是容器的 Seccomp 配置?如何自定义?
java·运维·分布式·docker·容器·自动化·文件
Francek Chen1 天前
【大数据处理与分析】MapReduce:06 MapReduce编程实践
大数据·hadoop·分布式·mapreduce
小马爱打代码1 天前
Kafka消息队列监控:Topic积压、吞吐量、Broker负载及消费者组全观测
分布式·kafka
轻口味1 天前
轻规划鸿蒙开发实战10:分布式数据同步深度博弈,UserId 隔离与并发数据冲突消解机
分布式·华为·harmonyos·鸿蒙
Solis程序员1 天前
Raft:分布式系统的定海神针
java·分布式·kafka·rabbitmq·agent·raft
我是一颗柠檬1 天前
【Java项目技术亮点】Leaf号段模式双Buffer优化
java·开发语言·分布式·后端·架构
芒鸽1 天前
HarmonyOS 分布式开发实战:设备协同、数据共享与跨设备迁移
分布式·wpf·harmonyos
省四收割者1 天前
从硬件中断到分布式协程:全景解构高并发机制与 C / Golang 的巅峰对决
c++·分布式·嵌入式硬件·golang
知识分享小能手1 天前
Hadoop学习教程,从入门到精通, HBase 分布式数据库 — 完整知识点与案例代码(8)
数据库·hadoop·分布式