Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用kafka python检索主题中的消息_Python_Apache Kafka_Kafka Consumer Api_Kafka Python - Fatal编程技术网

使用kafka python检索主题中的消息

使用kafka python检索主题中的消息,python,apache-kafka,kafka-consumer-api,kafka-python,Python,Apache Kafka,Kafka Consumer Api,Kafka Python,我使用kafka-python库编写了一个python脚本,该库将消息写入kafka。我写信息没有任何问题;我可以使用kafka控制台工具检索它们。但是我不能用我的python脚本阅读它们。我的消费者有一个for,它在迭代的第一行冻结,永远不会返回。这是我的密码: from kafka import KafkaConsumer consumer = KafkaConsumer( "my-topic", bootstrap_servers="localhost:9092"),

我使用
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))
消费者已完全创建和订阅;我可以看到
我的主题
列在其
\u客户端
属性的主题列表中


有什么想法吗?

默认情况下,kafka python从最后一个偏移量开始,ie将只读取新的mesages。 一种方法是从头开始读取,或者另一种方法是将轮询主题保持在无限循环中,如下代码所示:

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\u offset\u reset=earliest
earlies

consumer = KafkaConsumer(
    "my-topic",
    bootstrap_servers="localhost:9092"),
    value_deserializer=lambda v: json.dumps(v).encode("utf-8"),
    auto_offset_reset='earliest')

让我知道这是否有帮助

谢谢你的解释;你能给我举一个从头开始阅读的例子吗?这更适合我的情况。我从一开始就添加了一个阅读示例。希望这有帮助!!