apache-kafka - Kafka Zookeeper 身份验证不起作用
问题描述
我正在尝试为没有 ssl 的 Kafka 集群启用 SASL 用户名和密码。我按照这个 Stackoverflow 上的步骤操作:
SASL 身份验证似乎适用于 Kafka 代理。消费者和生产者必须在写入或读取主题之前进行身份验证。到目前为止,一切都很好。
问题在于在 kafka 上创建和删除主题。例如,当我尝试使用以下命令时:
~/kafka/bin/kafka-topics.sh --list --zookeeper 10.x.y.z:2181
我能够列出 kafka 集群中的所有主题,并创建或删除任何没有身份验证的主题。
我尝试按照此处的步骤操作:
但似乎没有任何效果。
非常感谢您对此事的任何帮助。
谢谢和问候, Firas Khasawneh
解决方案
您需要将 zookeeper.set.acl=true 添加到您的 Kafka server.properties 中,以便 Kafka 使用 ACL 集在 zookeeper 中创建所有内容。对于已经存在的主题,将没有 ACL,每个人都可以直接从 zookeeper 中删除它们。
实际上,由于那一团糟,我不得不从我的 zookeeper 和 Kafka 中删除所有内容,然后从头开始。
但是一旦一切都设置好了,你可以打开 zookeeper shell 来验证 ACL 确实设置了:
KAFKA_OPTS="-Djava.security.auth.login.config=/path/to/your/jaas.conf" bin/zookeeper-shell.sh XXXXX:2181
您可以从 shell 运行:getAcl /brokers/topics 并检查世界上没有任何人拥有 cdrwa
附带说明一下,您提供的链接似乎并未反映当前版本的 Kafka 如何在 zookeeper 中存储信息。我简要查看了代码,对于那些 kafka-topics.sh 命令,主题信息来自 /brokers/topics 而不是 /config/topics
推荐阅读
- rust - Simplest way to match multiple fields of a struct against `None`
- java - Add all values of an instance of an object to a List
- svg - 在 SVG SMIL 中堆叠 animate 和 animateTransform 的正确方法?
- metpy - 计算可降水量
- python - Django Rest Framework many-to-many relation create the link
- python - How to prevent LabelEncoder from sorting label values?
- php - 如何从 MySQL 数据库中检索单行并仅显示包含大于零的值的列
- c++ - TCP sockets (client-server) recv() returning -1 value
- swift - 如何在 macOS / swift 的 AVAudioEngine 中选择音频输入设备(麦克风)?
- java - 为 minecraft 1.12 modding 设置编程环境,遇到 gradle 反编译错误