我已经使用kafka-python
库编写了一个python脚本,该库将消息写入kafka
和从中读取消息。我写消息没有任何问题;我可以使用kafka
控制台工具来检索它们。但是我无法使用python脚本读取它们。我的消费者有一个for,它冻结在迭代的第一行,并且永远不会返回。这是我的代码:
from kafka import KafkaConsumer
consumer = KafkaConsumer(
"my-topic",
bootstrap_servers="localhost:9092"),
value_deserializer=lambda v: json.dumps(v).encode("utf-8")
)
for msg in consumer:
print(type(msg))
创建并完全订阅了使用者;我可以看到my-topic
在其_client
属性的主题列表中。
有什么主意吗?
答案 0 :(得分:1)
默认情况下,kafka python从上一个偏移量开始,即仅读取新消息。 一种方法是从头开始阅读,另一种方法是将轮询主题保持在无限循环中,如以下代码所示:
while True:
try:
records = consumer.poll(60 * 1000) # timeout in millis , here set to 1 min
record_list = []
for tp, consumer_records in records.items():
for consumer_record in consumer_records:
record_list.append(consumer_record.value)
print(record_list) # record_list will be list of dictionaries
要从头开始阅读,我们需要在使消费者成为对象时尽早添加auto_offset_reset=earliest
consumer = KafkaConsumer(
"my-topic",
bootstrap_servers="localhost:9092"),
value_deserializer=lambda v: json.dumps(v).encode("utf-8"),
auto_offset_reset='earliest')
让我知道这是否有帮助!