【问题标题】:Connecting Kafka-Python with a cluster with Kerberos使用 Kerberos 将 Kafka-Python 与集群连接起来
【发布时间】:2017-01-14 00:45:42
【问题描述】:

我正在尝试使用 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')

好吧,运行这个东西我在 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

我在远程机器上运行它。而 bootstrap_server 我使用了 Zookeeper 主机名和端口,但效果不佳。

我发现了一些关于它的东西,在 Kafka-Python 的 git 中我发现他们有 implemented

还有其他连接方式吗?

【问题讨论】:

  • 查看工作脚本的内容会很有帮助。您还看到这个 OP 使用更简单的连接吗? stackoverflow.com/questions/35689238/… 这可能是一个开始的地方,即使您必须在没有 Kerberos 的情况下设置单独的实例。
  • 感谢@DanielWisehart!我知道我们可以以一种简单的方式建立联系。但是 Kerberos 让事情变得有点困难......我需要使用 KeyTab 进行身份验证......而且它无法在 python lib 中做到这一点。
  • 是你的 kafka 经纪人的地址hostname:6667 吗?乍一看似乎不对...

标签: python apache-kafka


【解决方案1】:

如果任务是在 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 - python中可以传入confluent_kafka.Producerconfluent_kafka.Consumer的构造函数的属性

【讨论】:

    【解决方案2】:

    伙计们,

    我发现了问题。

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

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

    根据Hortonworks我们需要设置client_jaas_client进行连接。

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

    参见示例here

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-10-31
    • 2018-04-15
    • 2022-01-19
    • 2016-09-12
    • 2021-03-10
    • 2019-07-05
    • 1970-01-01
    • 2021-04-16
    相关资源
    最近更新 更多