我在向Kafka主题(名为 secure.topic
)用acl保护。我的groovy制作人抛出了以下错误:
Error while fetching metadata with correlation id 9 : {secure.topic=LEADER_NOT_AVAILABLE}
有关配置的一些说明:
1台kafka服务器,版本2.11\u 1.0.0(服务器和java客户端libs)
主题acl设置为 All
(也用 --producer
)用户是证书中指定的全名
使用自生成的证书启用客户端身份验证
其他服务器配置:
security.inter.broker.protocol = SSL
ssl.client.auth = required
authorizer.class.name=kafka.security.auth.SimpleAclAuthorizer
如果我移除 authorizer.class.name
属性,则我的客户机可以生成消息(因此,ssl和证书没有问题)。
此外,kafka-authorizer.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)
你知道是什么引起的吗 LEADER_NOT_AVAILABLE
启用acl时出错?
1条答案
按热度按时间1sbrub3j1#
从授权人日志来看,授权人好像被拒绝了
ClusterAction
上Cluster
资源。如果您检查主题状态(例如使用
kafka-topic.sh
),我希望看到它没有一个领导人(-1)。启用授权时,它们将应用于到达集群的所有kafka api消息,包括代理间消息,如stopreplica、leaderandisr、controlledshutdown等。因此,看起来您只是为客户端添加了ACL,但忘记了添加代理运行所需的ACL。
所以你至少需要添加一个acl
ClusterAction
上Cluster
你经纪人的委托人的资源。iirc这是代理间消息唯一需要的acl。接下来,集群应该能够正确地为分区选择一个引导者,使您的客户机能够生成。