簡體   English   中英

將Kafka-Python與具有Kerberos的集群連接

[英]Connecting Kafka-Python with a cluster with Kerberos

我正在嘗試使用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中我發現它們已經實現了

還有其他連接方式嗎?

好伙計們,

我發現了這個問題。

問題是使用Key Tab,Python中的Kafka生產者不支持Kerberos。

要使用Key Tab,我們需要設置一個java Environment Variable。

根據Hortonworks,我們需要將client_jaas_client設置為connect。

解決方案是使用Py4j在JVM中調用Kafka Producer。

請參閱此處的示例。

如果任務是在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的構造函數

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM