【问题标题】:Kafka Python consumer API returns nothingKafka Python 消费者 API 不返回任何内容
【发布时间】:2018-02-27 18:35:45
【问题描述】:

我正在使用 Kafka-Python 从 kafka 代理读取主题,但我似乎无法让消费者迭代器返回任何内容

consumer = KafkaConsumer("topic",bootstrap_servers=bootstrap_server + ":" + str(port), group_id="mygroup")

for record in consumer:
    print(record)

它似乎只是挂起。我已经验证了该主题存在并且在代理上有数据并且正在生成新数据。当我更改对KafkaConsumer 构造函数的调用并添加auto_offset_reset="earliest" 时,一切都按预期工作,并且消费者迭代器返回记录。此参数的默认值为"latest",但使用该值我似乎无法使用数据。

为什么会这样?

【问题讨论】:

    标签: python apache-kafka kafka-consumer-api


    【解决方案1】:

    您还需要在实例化KafkaConsumer 时包含auto_offset_reset='smallest',这相当于命令行工具kafka-console-consumer.sh--from-beginning

    consumer = KafkaConsumer("topic",bootstrap_servers=bootstrap_server + ":" + str(port), group_id="mygroup", auto_offset_reset='smallest')
    

    您可能会看到没有数据被消费的原因可能是因为当您的消费者启动并运行时,生产者端没有产生任何数据。因此,您需要表明您要消费该主题中的所有数据(即使此时没有插入数据)。

    根据official documentation

    Kafka 消费者通过向代理发出“获取”请求来工作 引导它想要使用的分区。消费者指定其 每个请求在日志中的偏移量并接收回一大块日志 从那个位置开始。因此,消费者具有显着 控制这个位置,并且可以倒带它以重新使用数据,如果 需要。

    【讨论】:

      猜你喜欢
      • 2019-05-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多