早上好
为您提供一些背景知识:我们目前正在整理一个POC,以将Apache Kafka用作入站日志数据的消息传递队列,以供Elastic Logstash进行后处理。目前,我已将3个代理节点配置为指向单个Zookeeper节点。我的默认复制因子为3,最低ISR为2,以说明单节点故障(在这种情况下为可用区)。创建主题时,我将分区计数设置为10,复制因子设置为3-Kafka适当地创建了主题-快乐的日子!但是,由于我在入站接口上使用SSL(因为它将面向互联网),因此需要确保主题可由某些委托人写成如下内容:
/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的文档充其量不过是“吸引人的”,因此想知道如何最好地解决此问题。
答案 0 :(得分:1)
您似乎缺少经纪人在ClusterAction
资源上带有Cluster
的ACL。允许他们交换经纪人之间的消息是必需的。
由于您的经纪人使用纯文本,因此您可能需要在ANONYMOUS
主体上设置此ACL。
如果仅使用SSL(不使用SASL),则要确保执行SSL authentication,否则任何人都可以连接到您的群集并获得ClusterAction
权限,从而使他们造成破坏。