【问题标题】:Kafka ACL's cause topic replication to failKafka ACL 导致主题复制失败
【发布时间】:2018-11-16 10:58:37
【问题描述】:

早上好,

为您介绍一些背景知识:我们目前正在组建一个 POC,以使用 Apache Kafka 作为入站日志数据的消息传递队列,以供 Elastic Logstash 进行后期处理。目前我有 3 个代理节点配置为指向一个 Zookeeper 节点。我的默认复制因子为 3,最小 ISR 为 2,以解决单个节点故障(或本例中的可用区)。创建主题时,我将分区计数设置为 10,复制因子设置为 3 - Kafka 适时创建主题 - 快乐的日子!但是,因为我在入站接口上使用 SSL(因为它将面向 Internet),所以我需要确保主题可由某个主体写入,如下所示:

/opt/kafka-dq/bin/kafka-acls.sh --authorizer-properties zookeeper.connect=zookeeper-001:2181 --add --allow-principal User:USER01 --producer --topic 'USER01_openvpn'

当这种情况发生时,ISR 会下降到单个节点,并且由于我的最小 ISR 为 2,因此分区会脱机,这会导致 filebeat(客户端)开始抛出以下错误:

kafka/client.go:242     Kafka publish failed with: circuit breaker is open

在 kafka 服务器日志中也可以看到以下错误

2018-11-16 09:59:12,736] ERROR [Controller id=3] Received error in LeaderAndIsr response LeaderAndIsrResponse(responses={USER01_openvpn-3=CLUSTER_AUTHORIZATION_FAILED, USER01_openvpn-2=CLUSTER_AUTHORIZATION_FAILED...

[2018-11-16 10:09:46,852] ERROR [Controller id=2 epoch=23] Controller 2 
epoch 23 failed to change state for partition USER01_openvpn-4 from 
OnlinePartition to OnlinePartition (state.change.logger)
kafka.common.StateChangeFailedException: Failed to elect leader for 
partition USER01_openvpn-4 under strategy 
PreferredReplicaPartitionLeaderElectionStrategy

我试图通过将 ANONYMOUS 用户的 ACL 添加到所有主题来解决此问题,但这实际上导致集群进一步中断。为了更清楚起见,虽然我在入站接口上启用了 SSL,但我的集群代理间通信是纯文本的。

关于集群本身的 ACL 的文档充其量是有点“笨拙”,所以想知道如何最好地解决这个问题。

【问题讨论】:

    标签: apache-kafka


    【解决方案1】:

    您的代理的Cluster 资源上似乎缺少带有ClusterAction 的ACL。这是允许他们交换代理间消息所必需的。

    由于您的代理使用纯文本,您可能需要在 ANONYMOUS 主体上设置此 ACL。

    如果您只使用 SSL(不使用 SASL),您需要确保使用 SSL authentication,否则任何人都可以连接到您的集群并获得 ClusterAction 权限,从而造成严重破坏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-11-29
      • 2020-04-24
      • 2022-01-21
      • 2020-10-03
      • 2015-06-22
      • 2016-07-01
      • 1970-01-01
      • 2017-07-31
      相关资源
      最近更新 更多