代理复制错误“无权访问主题:[主题授权失败。]”

Sha*_*Guo 5 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
Run Code Online (Sandbox Code Playgroud)

kafka_server_jaas.conf 也配置了管理员用户。

KafkaServer {
        org.apache.kafka.common.security.plain.PlainLoginModule required
        username="admin"
        password="welcome1"
        user_guest="welcome1";
};
Run Code Online (Sandbox Code Playgroud)

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

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

bin/kafka-acls.sh --authorizer-properties zookeeper.connect=xxxx:2181/kafka10  --add --allow-principal User:guest --producer --topic page_visits_10k  
Run Code Online (Sandbox Code Playgroud)

经纪商输出

[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)
Run Code Online (Sandbox Code Playgroud)

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

Sai*_*dam 5

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

log4j.logger.kafka.authorizer.logger=DEBUG, authorizerAppender
Run Code Online (Sandbox Code Playgroud)

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

PS:生成的授权日志会很长并且消耗大量空间。因此,请记住在完成调试后将其关闭。


Sha*_*Guo 4

终于我弄清楚了这个问题。
该错误是由以下原因引起的:
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)
Run Code Online (Sandbox Code Playgroud)