我有一个问题,生成一个用ACL保护的卡夫卡主题(名为secure.topic)的消息。我的基于Groovy的生产者抛出了这个错误:
Error while fetching metadata with correlation id 9 : {secure.topic=LEADER_NOT_AVAILABLE}关于配置的一些注意事项:
All (也使用--producer测试),用户是证书中指定的全名。附加服务器配置:
security.inter.broker.protocol = SSL
ssl.client.auth = required
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer如果我删除了authorizer.class.name属性,那么我的客户端就可以生成消息(因此,无问题与SSL和证书)。
此外,kafka-Authizer.log生成以下消息:
[2018-01-25 11:57:02,779] INFO Principal = User:CN= User,OU=XXX,O=XXX,L=XXX,ST=Unknown,C=X is Denied Operation = ClusterAction from host = 127.0.0.1 on resource = Cluster:kafka-cluster (kafka.authorizer.logger)在启用ACL时,您知道什么会导致LEADER_NOT_AVAILABLE错误吗?
发布于 2018-01-25 12:47:37
从授权程序日志来看,它看起来像是拒绝了ClusterAction资源上的Cluster。
如果您检查您的主题状态(例如使用kafka-topic.sh),我希望看到它没有领导者(-1)。
当启用授权时,它们将应用于到达集群的所有Kafka消息,包括代理间消息(如StopReplica、LeaderAndIsr、ControlledShutdown等)。因此,看起来您只为客户添加all,而忘记添加代理运行所需的all。
因此,您至少需要为代理的主体在ClusterAction资源上添加一个授予Cluster的ACL。IIRC,这是代理间消息唯一需要的ACL。
在此之后,您的集群应该能够正确地为分区选择一个领导者,从而使您的客户端能够生成。
https://stackoverflow.com/questions/48442647
复制相似问题