Confluent6.0.1 Kafka配置ACL报/kafka-acl/TransactionalId无权限
问题根因
- ZooKeeper服务端配置了
requireClientAuthScheme=sasl,强制所有客户端通过SASL digest认证才能访问节点。 - 执行
kafka-acls.sh命令时,当前执行环境未加载ZK客户端的SASL认证配置,工具以匿名身份连接ZK,无权限创建/kafka-acl/TransactionalId等子节点,触发NoAuth异常。 - 存在两处配置不匹配,可能导致认证失效:
- ZooKeeper JAAS定义的
user_kafka密码为Kafka@20,但Kafka节点JAAS的Client块(ZK连接客户端)配置的kafka用户密码为kafka-secret,二者不一致。 - 节点专属
server.properties的advertised.listeners中SSL监听项缺少端口,虽不直接影响当前认证,但会导致后续客户端连接异常。
- ZooKeeper JAAS定义的
修复步骤
1. 修正配置不匹配项
- 修改Kafka节点JAAS文件的Client块,将密码调整为与ZooKeeper端一致的
Kafka@20:
Client { org.apache.zookeeper.server.auth.DigestLoginModule required username="kafka" password="Kafka@20" user-admin="admin"; };
- 修正所有节点的
advertised.listeners配置,补全SSL监听端口:
advertised.listeners=PLAINTEXT://kafkaserver1:9092,SSL://kafkaserver1:9093,SASL_SSL://kafkaserver1:9094
(注:kafkaserver2、kafkaserver3需对应替换节点主机名)
2. 确保服务启动时加载正确的JAAS配置
- ZooKeeper进程启动参数需添加JVM参数,指定服务端JAAS文件路径:
-Djava.security.auth.login.config=/opt/confluent-community/conf/zookeeper_jaas.conf(路径根据实际部署调整) - Kafka进程启动参数需添加JVM参数,指定服务端JAAS文件路径:
-Djava.security.auth.login.config=/opt/confluent-community/conf/kafka_jaas.conf(路径根据实际部署调整)
3. 执行ACL命令时携带认证配置
在执行kafka-acls.sh前,临时在当前shell环境中指定JAAS配置路径,让工具能以合法身份连接ZK:
export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/confluent-community/conf/kafka_jaas.conf" $KAFKA_HOME/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=kafkaserver1:2181,kafkaserver2:2181,kafkaserver3:2181 --add --allow-principal User:demouser --operation Create --operation Describe --topic demo-topic
4. (可选)验证ZK权限
可通过ZK CLI工具验证认证是否生效:
$KAFKA_HOME/bin/zkCli.sh -server kafkaserver1:2181 addauth digest kafka:Kafka@20 ls /kafka-acl
若能正常返回节点列表,说明认证配置生效。
内容的提问来源于stack exchange,提问作者Andy Johnson
相关产品推荐
相关产品推荐

