我想通过卡夫卡制作人发送一些清单。
listA [1,2,3]
listB ["cat", "dog", "fish"]
生产者将消息作为字节发送,因此我不确定如何正确设置消息,以便在需要引号发送消息时将列表发送。这是我目前拥有的。
producer = KafkaProducer(bootstrap_servers='localhost:9092')
for _ in range(1):
print(producer.send('test', b'"worker_id": listA , "worker_name" : listB'))
此方法只是给我一个SyntaxError。 我也在下面尝试了这种方法,并且得到了类似的结果
print(producer.send('test', b("worker_uuid": worker_uuid))
答案 0 :(得分:0)
这可以通过首先将列表转换为字节数组来解决。
rList = [1, 2, 3, 4, 5]
arr = bytes(rList)
print(arr)
结果是
b'\x01\x02\x03\x04\x05'
答案 1 :(得分:0)
您是否考虑过JSON编码?如果您使用这样的value_serializer配置KafkaProducer:
KafkaProducer(value_serializer=lambda v: json.dumps(v).encode('utf-8'))
那么您应该可以像这样直接发送列表:
producer.send('test', [1, 2, 3])
producer.send('test', ["cat", "dog", "fish"])
还需要将消费者配置为通过json进行解码。如果您使用的是kafka-python,则可以执行以下操作:
KafkaConsumer(value_deserializer=lambda v: json.loads(v.decode('utf-8')))