代理复制错误"未授权访问主题:[主题授权失败。]"

时间:2016-05-31 03:11:08

标签: apache-kafka

我有三个Kafka经纪人( kafka_2.11-0.10.0.0 ),每个经纪人的安全性配置如下,

listeners=PLAINTEXT://xxxx:9093,SASL_PLAINTEXT://xxxx:10093
advertised.listeners=PLAINTEXT://xxxx:9093,SASL_PLAINTEXT://xxxx:10093
security.inter.broker.protocol=PLAINTEXT
sasl.enabled.mechanisms=PLAIN
sasl.mechanism.inter.broker.protocol=PLAIN
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
allow.everyone.if.no.acl.found=true
super.users=User:admin

kafka_server_jaas.conf也配置了admin用户。

KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="welcome1"
        user_guest="welcome1";
};

当我连接使用PLAINTEXT监听器并生成和使用消息时,一切正常。

但是当我尝试将ACL添加到某个主题时,群集将输出如下错误消息:

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=xxxx:2181/kafka10  --add --allow-principal User:guest --producer --topic page_visits_10k  

经纪人输出

[2016-05-31 10:49:57,497] ERROR [ReplicaFetcherThread-0-2], Error for partition [page_visits_10k,1] to broker 2:org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [Topic authorization failed.] (kafka.server.ReplicaFetcherThread)
[2016-05-31 10:49:59,003] ERROR [ReplicaFetcherThread-0-2], Error for partition [page_visits_10k,1] to broker 2:org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [Topic authorization failed.] (kafka.server.ReplicaFetcherThread)

错误输出看起来像代理间复制错误,感谢任何帮助。

3 个答案:

答案 0 :(得分:2)

我在Kafka v.0.10中使用ACL时遇到过类似的问题。我发现this讨论很有帮助。特别是启用授权日志以检查请求的传入用户名是什么以及ACL中指定的内容。
可以通过修改config文件夹中的log4j.properties来启用授权日志。在log4j.properties文件中,将WARN更改为DEBUG并重新启动kafka-servers。

log4j.logger.kafka.authorizer.logger=DEBUG, authorizerAppender

这帮助我解决了我的问题。希望有所帮助。

PS:生成的授权日志非常冗长,占用大量空间。所以,记得在完成调试后关闭它。

答案 1 :(得分:0)

运行以下脚本启动zookeeper之后和启动Kafka之前。

sh kafka_2.11-0.9.0.1/bin/kafka-acls.sh --authorizer-properties 
zookeeper.connect=localhost:2181 --operation All --allow-principal 
User:*   --allow-host <server host> --add --cluster`

这将允许本地服务器机器进行所有ACL。

答案 2 :(得分:0)

最后我弄明白了这个问题 错误是由以下原因引起的:
security.inter.broker.protocol = PLAINTEXT

应该是:
security.inter.broker.protocol = SASL_PLAINTEXT

[2016-05-31 10:49:57,497] ERROR [ReplicaFetcherThread-0-2], Error for partition [page_visits_10k,1] to broker 2:org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [Topic authorization failed.] (kafka.server.ReplicaFetcherThread)
[2016-05-31 10:49:59,003] ERROR [ReplicaFetcherThread-0-2], Error for partition [page_visits_10k,1] to broker 2:org.apache.kafka.common.errors.TopicAuthorizationException: Not authorized to access topics: [Topic authorization failed.] (kafka.server.ReplicaFetcherThread)