2016-10-20 4 views
0

방금 ​​Python과 Kafka를 배우기 시작했습니다. 이것은 처음 시도한 첫 번째 예입니다. http://www.giantflyingsaucer.com/blog/?p=5541Kafka 제작자가 Python을 사용하는 경우 : TypeError : 모두 메시지 페이로드가 null이거나 형식 바이트 여야합니다.

그리고 예외 가지고 :

Traceback (most recent call last): 
    File "producer.py", line 23, in <module> 
    main() 
    File "producer.py", line 18, in main 
    print_response(producer.send_messages(topic, msg)) 
    File "D:\Setups\Python35-32\lib\site-packages\kafka\producer\simple.py", line 50, in send_messages 
    topic, partition, *msg 
    File "D:\Setups\Python35-32\lib\site-packages\kafka\producer\base.py", line 379, in send_messages 
    return self._send_messages(topic, partition, *msg) 
    File "D:\Setups\Python35-32\lib\site-packages\kafka\producer\base.py", line 396, in _send_messages 
    raise TypeError("all produce message payloads must be null or type bytes") 
TypeError: all produce message payloads must be null or type bytes 

내가 구글에서 검색 한하지만 문제가 무엇인지 확실히 모르겠어요입니다. 누구든지 조언을 해 줄 수 있습니까? 대단히 감사합니다! 여기

내 코드입니다 :

from kafka import SimpleProducer, KafkaClient 

def print_response(response=None): 
    if response: 
     print('Error: {0}'.format(response[0].error)) 
     print('Offset: {0}'.format(response[0].offset)) 


def main(): 
    kafka = KafkaClient("10.2.5.53:9092") 
    producer = SimpleProducer(kafka) 

    topic = 'test' 
    msg = 'Hello World' 

    print_response(producer.send_messages(topic, msg)) 

    kafka.close() 

if __name__ == "__main__": 
    main() 
+0

내 생각에 당신이 얻는 오류는 생산자가 실제로 응답하기 전에 kafka 클라이언트를 닫는 것과 관련이 있습니다. 그것은 비동기 프로세스. – jimijazz

+0

단순 제작자 및 소비자 APIS는 [여기] (https://github.com/dpkp/kafka-python)에 명시된대로 사용되지 않습니다 (간단한 구현이지만 사용하기가 더 복잡합니다!). 대신 같은 페이지에서 언급 된 높은 수준의 제작물을 사용해야합니다. – jimijazz

답변

0

아, 난 그냥 당신이 게시 된 예를보고 실현 또한

here을 설명 된대로 문자열하는 b 문자 앞에 추가 바이트 문자열이어야한다는 것입니다 , try-except 절이 없어 서버가 준비되지 않은 경우에 대한 예외를 잡아냅니다 ...