首页 文章

卡夫卡 ACL - LEADER_NOT_AVAILABLE

提问于
浏览
4

我有一个问题是生成使用 ACL 保护的 Kafka 主题(名为secure.topic)的消息。我的 Groovy-based 生产者抛出了这个错误:

Error while fetching metadata with correlation id 9 : {secure.topic=LEADER_NOT_AVAILABLE}

关于配置的一些注意事项:

  • 1 Kafka 服务器,版本 2.11_1.0.0(服务器和 Java 客户端库)

  • 主题 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)

知道启用 ACL 时会导致LEADER_NOT_AVAILABLE错误的原因吗?

1 回答

  • 2

    从授权程序日志看,授权程序在Cluster资源上拒绝ClusterAction

    如果您检查主题状态(例如使用kafka-topic.sh),我希望在没有 Leader(-1)的情况下看到它。

    启用授权时,它们将应用于到达群集的所有 Kafka API 消息,包括_11_消息,如 StopReplica,LeaderAndIsr,ControlledShutdown 等。因此,您似乎只为客户端添加了 ACL,但忘记添加代理所需的 ACL 。

    因此,您需要至少添加一个 ACL,为您的经纪人的主体在Cluster资源上授予ClusterAction。 IIRC 是 inter-broker 消息唯一需要的 ACL。

    在此之后,您的群集应该能够正确选择分区的领导者,使您的客户能够生成。

相关问题