我在cloudera集群上运行kafka,并有一个kerberos用户(用户名/密码)进行身份验证。我正在尝试验证汇合的kafka生产者/消费者,但我遇到了麻烦。我能够在本地站起来kafka并且没有任何问题地生成/消费,并且能够在添加kerberos之前击中群集上的kafka实例。我能够找到一些关于为集群设置Kerberos的文档(这已经完成),但不是如何使用username / pass从客户端进行身份验证。
以下是我正在使用的版本的一些信息:
Kafka版本:0.11.0-kafka3.0.0 confluent-kafka版本:confluent-kafka(0.11.0) librdkafka版本:0.11.3
这是我没有身份验证的简单Producer conf:
Producer({'bootstrap.servers': broker_url}, {'api.version.request': True})
通过一些谷歌搜索,我尝试过这样的事情(以及一些细微的修改):
p = Producer({'bootstrap.servers': broker_url}, {'api.version.request': True}, {"security.protocol", "PLAINTEXT"}, {'sasl.username': 'username'}, {'sasl.password': 'password'})
我收到此错误消息(快速连续重复,出于安全目的删除了cluster_broker_name)
%5 | 1521746707.533 | FAIL | rdkafka#生产者 - 1 | [thrd:kafka_url:9092 / bootstrap]:kafkaPurl:9092 / bootstrap:连接已关闭 %3 | 1521746707.533 | ERROR | rdkafka#生产-1 | [thrd:kafka_url:9092 / bootstrap]:kafka_url:9092 / bootstrap:连接已关闭 %3 | 1521746708.538 | FAIL | rdkafka#生产-1 | [thrd:kafka_url:9092 / bootstrap]:kafka_url:9092 / bootstrap:接收失败:断开连接 %3 | 1521746708.538 | ERROR | rdkafka#生产-1 | [thrd:kafka_url:9092 / bootstrap]:kafka_url:接收失败:已断开连接 %3 | 1521746708.538 | ERROR | rdkafka#生产-1 | [thrd:kafka_url:9092 / bootstrap]:1/1经纪人失败
我正在尝试找出要添加到配置以进行身份验证的内容(使用用户名和密码)。如果附加到配置不是这样做的方式,那么我希望有人指出我正确的方向。
基本上,我想在kafka-python中使用confluent-kafka等价物:
from kafka import KafkaProducer
producer = KafkaProducer(bootstrap_servers='example.com:9095', security_protocol="SASL_PLAINTEXT", sasl_mechanism='PLAIN', sasl_plain_username='username', sasl_plain_password='password')
我是汇合卡夫卡的新手(并且对安全性不太熟悉)所以如果这是一个愚蠢的问题我会提前道歉..在此先感谢,我将非常感谢所有的帮助!
答案 0 :(得分:1)
您是否100%确定您的经纪人的侦听器配置为使用Kerberos?(SASL机制GSSAPI)?
我问,因为您提供的示例显示了PLAIN机制的使用。
security_protocol="SASL_PLAINTEXT", sasl_mechanism='PLAIN'
这也可以解释为什么您的Java客户端无需使用keytab即可登录。或者,他们可能将JAAS登录模块配置为使用本地凭据缓存。
如果经纪人的听众实际上被配置为使用PLAIN SASL机制,那么你需要传递sasl.mechanism =" PLAIN"除了security.protocol =" PLAINTEXT",sasl.username ="用户名"和sasl.password =密码。
请注意,他的经纪人也需要配置为接受此用户名和密码。我已经链接了下面的文档,其中包括有关如何配置代理的说明。
https://docs.confluent.io/current/kafka/authentication_sasl.html#plain