You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Kafka与ZooKeeper用SASL_PLAINTEXT、与生产者用SCRAM认证可行吗

方案可行性结论

你的配置方案完全可落地,不存在实现障碍。
Kafka将SCRAM认证的加密凭证存储在ZooKeeper是SCRAM机制的标准设计,和你要配置的ZooKeeper-Kafka之间的SASL_PLAINTEXT认证是两条完全独立的认证链路,不存在冲突:

  • ZooKeeper与Kafka Broker之间的SASL_PLAINTEXT认证:是Broker作为客户端连接ZooKeeper时的身份校验,凭证独立配置在ZooKeeper和Broker的JAAS文件中
  • Kafka Broker与生产者客户端之间的SCRAM认证:是客户端连接Broker时的身份校验,SCRAM的用户凭证会被加盐迭代哈希后持久化到ZooKeeper存储,仅用于客户端和Broker之间的校验逻辑,和ZK-Broker之间的认证没有关联
具体配置步骤

1. 配置ZooKeeper侧SASL认证(供Broker连接使用)

  • 新建ZooKeeper的JAAS配置文件zookeeper_jaas.conf,配置允许Broker连接的账号:
Server {
  org.apache.zookeeper.server.auth.DigestLoginModule required
  user_kafka_broker="broker_connect_zk_pwd";
};
  • 修改ZooKeeper启动参数,添加JVM参数指定JAAS文件路径:
    -Djava.security.auth.login.config=/path/to/zookeeper_jaas.conf
  • 在ZooKeeper配置文件zoo.cfg中添加以下配置开启SASL校验:
authProvider.1=org.apache.zookeeper.server.auth.SASLAuthenticationProvider
requireClientAuthScheme=sasl
  • 启动ZooKeeper节点。

2. 配置Kafka Broker双链路SASL

  • 新建Broker的JAAS配置文件kafka_server_jaas.conf,同时配置ZK连接凭证和SCRAM认证模块:
// Broker连接ZooKeeper使用的凭证,和ZK侧配置的账号密码完全对应
Client {
  org.apache.zookeeper.server.auth.DigestLoginModule required
  username="kafka_broker"
  password="broker_connect_zk_pwd";
};

// Broker侧SCRAM认证模块入口
KafkaServer {
  org.apache.kafka.common.security.scram.ScramLoginModule required;
};
  • 修改Broker配置文件server.properties,核心配置如下:
# 监听配置,本地测试用SASL_PLAINTEXT即可
listeners=SASL_PLAINTEXT://0.0.0.0:9092
advertised.listeners=SASL_PLAINTEXT://localhost:9092
security.inter.broker.protocol=SASL_PLAINTEXT
sasl.mechanism.inter.broker.protocol=PLAIN

# ZK相关ACL配置
zookeeper.connect=localhost:2181
zookeeper.set.acl=true

# 客户端SCRAM认证配置
listener.name.sasl_plaintext.sasl.enabled.mechanisms=SCRAM-SHA-256,SCRAM-SHA-512
listener.name.sasl_plaintext.scram-sha-256.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;
listener.name.sasl_plaintext.scram-sha-512.sasl.jaas.config=org.apache.kafka.common.security.scram.ScramLoginModule required;
  • 修改Kafka启动参数,添加JVM参数指定Broker的JAAS文件路径:
    -Djava.security.auth.login.config=/path/to/kafka_server_jaas.conf
  • 启动Kafka Broker节点。

3. 创建生产者使用的SCRAM用户

Broker启动完成后,执行Kafka自带的命令创建生产者账号,创建完成后账号的加盐哈希凭证会自动加密存储到ZooKeeper:

kafka-configs.sh --zookeeper localhost:2181 --alter \
--add-config 'SCRAM-SHA-256=[password=producer_user_pwd],SCRAM-SHA-512=[password=producer_user_pwd]' \
--entity-type users --entity-name producer_user

这里的producer_user和producer_user_pwd就是你生产者代码中需要填入的用户名、密码。

4. 修正生产者客户端代码

你原有代码的JAAS配置字符串缺少必要的引号和结尾分号,会直接导致认证失败,同时需要补充两个必填的SASL参数,修正后代码如下:

String username = "producer_user";
String pass = "producer_user_pwd";
String saslJaasConfigValue =
        String.format(
            "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"%s\" password=\"%s\";",
            username, pass);

props.put(SaslConfigs.SASL_JAAS_CONFIG, saslJaasConfigValue);
// 补充必填安全配置
props.put(SaslConfigs.SASL_MECHANISM, "SCRAM-SHA-256");
props.put(CommonClientConfigs.SECURITY_PROTOCOL_CONFIG, "SASL_PLAINTEXT");

注意:SASL_PLAINTEXT模式下传输层无加密,凭证和业务数据会明文在网络传输,仅适合本地Docker测试场景使用,生产环境请替换为SASL_SSL协议。

内容的提问来源于stack exchange,提问作者sphoenix

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:09:59