You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Kafka 2.13-3.6.0配置SASL_SSL+SCRAM认证后启动失败,无法连接ZooKeeper

Kafka 2.13-3.6.0配置SASL_SSL+SCRAM认证后启动失败,无法连接ZooKeeper

看起来你遇到的核心问题是ZooKeeper默认启用了DIGEST-MD5认证机制,但你实际配置的是SCRAM,导致Kafka和ZK之间的SASL握手完全不匹配,才会报出那个无法获取密码的错误。咱们一步步来修正这些配置问题:

1. 修正ZooKeeper配置文件(zookeeper.properties)

首先给ZK明确指定要使用的SASL机制,不然它会默认用DIGEST-MD5,和你的SCRAM配置冲突。添加以下参数:

# 指定ZK支持的SASL机制为SCRAM-SHA-256
sasl.enabled.mechanisms=SCRAM-SHA-256
# 匹配你日志里显示的realm(日志里是zk-sasl-md5)
sasl.realm=zk-sasl-md5

另外注意你之前的配置里有个拼写错误:uorum.cnxn.threads.size=20 应该改成 quorum.cnxn.threads.size=20,别漏了修正这个小问题。

2. 修正ZooKeeper的JAAS配置文件(你之前写错成zookepr_jass.conf,应该是zookeeper_jaas.conf)

这里有两个关键错误:一是用了Kafka的SCRAM LoginModule,二是QuorumServer的用户凭证格式不对。ZK需要用自己的SCRAM模块,而且Server端的用户凭证格式是user_<你的用户名>="<密码>",修正后的配置如下:

QuorumServer {
    org.apache.zookeeper.server.auth.SCRAMLoginModule required
    user_user="sepultura1";  # 格式是user_<用户名>,值为密码
};

QuorumLearner {
    org.apache.zookeeper.server.auth.SCRAMLoginModule required
    username="user"
    password="sepultura1";
};

Server {
    org.apache.zookeeper.server.auth.SCRAMLoginModule required
    user_user="sepultura1";
};

Client {
    org.apache.zookeeper.server.auth.SCRAMLoginModule required
    username="user"
    password="sepultura1";
};

解释一下:之前你用的org.apache.kafka.common.security.scram.ScramLoginModule是给Kafka服务用的,ZooKeeper有自己的SCRAM处理模块,必须换成上面这个ZK专属的,否则无法正确解析SCRAM凭证。

3. 完善Kafka的server.properties,明确ZK连接的SASL规则

要让Kafka知道用SCRAM去连接ZK,得添加这些配置:

# 启用ZK的SASL客户端认证
zookeeper.sasl.client=true
# 指定连接ZK的SASL用户名
zookeeper.sasl.client.username=user
# 指定Kafka连接ZK时使用的JAAS上下文(对应你kafka.server.jaas.conf里的zkClient段)
zookeeper.sasl.login.context=zkClient
# 启用ZK ACL(如果你的场景需要的话)
zookeeper.set.acl=true

4. 确保JAAS配置文件被正确加载

启动ZK和Kafka的时候,一定要通过JVM参数指定JAAS配置文件的路径:

  • 启动ZooKeeper时,添加参数:-Djava.security.auth.login.config=/你的路径/zookeeper_jaas.conf
  • 启动Kafka时,添加参数:-Djava.security.auth.login.config=/你的路径/kafka.server.jaas.conf

最后验证步骤

先启动ZooKeeper,查看它的日志,确认没有SASL相关的错误;然后再启动Kafka,检查日志里是否成功连接到ZK了。

备注:内容来源于stack exchange,提问作者Petr Kostroun

火山引擎 最新活动