将Kafka-Python与具有Kerberos的集群连接

Thi*_*dim 7 python apache-kafka

我正在尝试使用Kafka-Python连接到Kafka,Kafka集群具有Kerberos,我们需要构建一些命令来执行几个步骤.

我已创建了一个主题在集群和我做了测试与./kafka-console-producer.sh./kafka-console-consumer.sh和的作品真的很好.

但是当我尝试连接Kafka-Python时,我遇到了问题.请参阅下面的代码:

def produce():
    print ('Producer')
    k_producer = KafkaProducer(bootstrap_servers='hostname:6667', 
                               security_protocol='SASL_PLAINTEXT',
                               sasl_plain_username='machine_usr',
                               sasl_plain_password='machine_pwd',
                               sasl_mechanism='PLAIN')
    for i in range(10):
        print ('Before send')
        k_producer.send('myTopic', 'Testing My Topic  ' + str(i))
        print ('After send')
Run Code Online (Sandbox Code Playgroud)

好吧,运行这些东西我在30秒后得到了这个错误消息:

File "C:\Users\m\kafka-python-1.3.1\kafka.zip\kafka\producer\kafka.py", line 328, in __init__
File "C:\Users\m\kafka-python-1.3.1\kafka.zip\kafka\client_async.py", line 202, in __init__
File "C:\Users\m\kafka-python-1.3.1\kafka.zip\kafka\client_async.py", line 791, in check_version
kafka.errors.NoBrokersAvailable: NoBrokersAvailable
Run Code Online (Sandbox Code Playgroud)

我在远程机器上运行它.而bootstrap_server我使用了Zookeeper主机名和端口但是也没有用.

我发现了一些关于它的东西,并且在Kafka-Python的git中我发现它们已经实现了.

还有其他连接方式吗?

小智 5

如果任务是在 python 中解决这个问题,另一种选择是使用confluent-kafka-python库,该库内部使用用 C 编写的librdkafka,并支持 SASL,并使用 keytab 文件。这不需要有一个单独的 Java 进程来通过 SASL 与 kafka 进行通信。

有关说明,请参阅librdkafka库的文档:

https://github.com/edenhill/librdkafka/wiki/Using-SASL-with-librdkafka - 一般介绍 https://github.com/edenhill/librdkafka/blob/master/CONFIGURATION.md - 可以传递的属性进入confluent_kafka.Producerconfluent_kafka.Consumer在python中的构造函数


Thi*_*dim 4

好吧,伙计们,

我发现了这个问题。

问题是 Python 中使用 Key Tab 的 Kafka 生产者不支持 Kerberos。

要使用 Key Tab,我们需要设置一个 java 环境变量。

根据Hortonworks,我们需要设置 client_jaas_client 来连接。

解决方案是使用 Py4j 在 JVM 中调用 Kafka Producer。

请参阅此处的示例。