在我的几个集群上,我发现zookeeper返回的主题列表与代理之间存在差异,即以下命令返回的结果不同(对于代理来说更少)
kafka-topics.sh --zookeeper $zookeeper --list
kafka-topics.sh --bootstrap-server $broker --command-config $clientProperties --list
我在多个客户端版本中看到过这种行为,这让我认为问题出在服务器端,但我不知道根本原因是什么,也不知道如何解决。
这给我带来了一个问题,因为我使用了一些代码,这些代码将代理用于get操作,比如列出主题,将zookeeper用于set操作(创建/更新主题)。如果代理没有返回列表中的主题,那么代码路径将导致针对zookeeper的create操作,该操作将被拒绝(它将失败)。不幸的是,我无法控制代码,因此无法在那里应用修复程序。
尽管如此,zookeeper中的主题列表是否应该与broker中的列表相同?
我使用的是kafka(amazonmsk)2.2.1版
1条答案
按热度按时间uwopmtnx1#
谢谢你的建议。以下是解释和解决方法:
命令“kafka-topics.sh--zookeeper”和“kafka-topics.sh--bootstrap server”返回两个不同的输出,因为后者考虑了配置的ACL,在本例中,ACL阻止访问主题元数据。因此,通过zookeeper的命令提供主题的完整列表,而通过broker的命令只提供未配置acl的主题。
为了确保第二个命令按预期工作,您需要显式地将对“descripe”操作的访问添加到受影响主题的acl列表中
(^^感谢aws支持解决这个问题)