2016-09-06 24 views
7

Tôi đang cố kết nối với Kafka bằng Kafka-Python, cụm Kafka có Kerberos mà chúng ta cần xây dựng một số lệnh để thực hiện vài bước.Kết nối Kafka-Python với một cụm với Kerberos

Tôi đã tạo một Chủ đề tại cụm và tôi đã làm thử nghiệm với ./kafka-console-producer.sh./kafka-console-consumer.sh và hoạt động thực sự tốt.

Nhưng khi tôi cố kết nối với Kafka-Python, tôi gặp sự cố. Xem mã của tôi dưới đây:

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') 

Vâng, chạy công cụ này tôi nhận được tin nhắn Erro này sau 30 secconds:

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 

Tôi đang chạy nó trong một máy từ xa. Và bootstrap_server tôi đã sử dụng tên máy chủ và cổng Zookeeper nhưng cũng không hoạt động.

Tôi đã tìm thấy một số điều về nó, và trong git của Kafka-Python tôi thấy rằng họ có implemented.

Có cách nào khác để kết nối không?

+0

Sẽ hữu ích khi xem nội dung của tập lệnh đang hoạt động của bạn. Ngoài ra bạn có thấy OP này sử dụng kết nối đơn giản hơn nhiều không? http://stackoverflow.com/questions/35689238/kafka-python-producer-is-not-able-to-connect Nó có thể là một nơi để bắt đầu, ngay cả khi bạn phải thiết lập một cá thể riêng biệt mà không có Kerberos. –

+0

Cảm ơn @DanielWisehart! Tôi biết rằng chúng tôi có thể kết nối một cách đơn giản. Nhưng Kerberos làm cho mọi thứ trở nên khó khăn hơn một chút ... Tôi cần phải thực hiện một xác thực với KeyTab ... Và nó không thể làm điều đó trong lib python. –

+0

là địa chỉ của nhà môi giới kafka của bạn 'tên máy chủ: 6667'? điều đó không có vẻ ngay từ cái nhìn đầu tiên ... – jimijazz

Trả lời

2

Vâng Guys,

Tôi đã tìm thấy sự cố.

Vấn đề là Kerberos không được hỗ trợ cho nhà sản xuất Kafka bằng Python sử dụng Tab phím.

Để sử dụng Tab phím, chúng tôi cần đặt Biến môi trường java.

Theo Hortonworks chúng tôi cần đặt client_jaas_client để kết nối.

Giải pháp đã sử dụng Py4j để gọi cho Nhà sản xuất Kafka trong JVM.

Xem ví dụ here.

Các vấn đề liên quan