2016-12-14 595 views
2

我是Apache Kafka技術的新手。我試圖通過使用python 2.7發送消息作爲JSON對象到一個kafka主題,但我得到了「AssertionError:Value must be bytes」錯誤。我可以成功發送字符串消息,我可以用kafka-console-consumer.sh查看我的消息。我正在使用apache kafka 2.10-0.8.2.1版本。我在下面給我的代碼。如何修復Python2.7中的「AssertionError:Value must bytes」錯誤與Apache Kafka

from kafka import KafkaProducer 
import yaml 

producer = KafkaProducer(bootstap_servers="localhost:9092") 
msg = yaml.safe_load('{"id":1, "name":"oguz"}') 

producer.send("my-topic", msg) 

感謝您的幫助。

回答

6

yaml.safe_load()返回一個字典,所以有兩件事情需要將它轉換爲字節 - 通過JSON將其序列化爲字符串,然後將其編碼爲UTF-8字節。

>>> import json 
>>> producer = KafkaProducer(value_serializer=lambda v: json.dumps(v).encode('utf-8')) 
>>> producer.send('my-topic', msg) 

或者你可以隻手動序列化,當你調用send()

>>> producer.send('my-topic', json.dumps(msg).encode('utf-8')) 
+0

感謝

從例子中in the kafka-python docs兩者,當你實例化KafkaProducer可以使用value_serializer關鍵字參數你的幫助Ben,它運作良好。 – Oguz