【问题标题】:Kafka Consumer poll (timeout: 0) but actually fetch the records backKafka消费者轮询(超时:0)但实际上取回记录
【发布时间】:2018-03-22 19:53:54
【问题描述】:

我使用一个线程来轮询数据,而另一个线程来处理数据。 由于处理需要更长的时间,所以我想在数据变得越来越大时限制数据大小。我的计划是轮询(超时:0 毫秒),然后它将返回为空的记录。然而,事实是每 10 次左右,poll(0) 方法会获取已满的记录。

我的问题是,

  1. 为什么 poll(0) 有时会取回完整的记录?即使大多数时候不会。

  2. 有没有办法限制投票?

PS:我尝试了 consumer.pause() 方法。但是由于消费者随机获取分区。我不知道要暂停哪些分区。我如何知道消费者实例占用了哪些分区?

【问题讨论】:

  • 有这样的评论:在返回获取的记录之前,我们可以发送下一轮获取,避免在用户处理获取的记录时阻塞等待他们的响应以启用流水线 在 poll() 方法中。由此看来,这是在 poll(0) 上返回更多记录的预期行为。我希望我能更好地理解它的真正含义。对于 PS 部分 - 您可以使用 consumer.assignment() 获取分区。

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


【解决方案1】:

consumer.assignment() 会将分配的分区集返回给您的消费者。 max.poll.records 设置确定要返回的 ConsumerRecords 的最大数量,默认为 500。我猜如果线程在向 kafka 发出请求后但在选择响应之前暂停,则 poll(0) 只会在超级繁忙的系统上返回记录.

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    • 1970-01-01
    • 2022-10-15
    • 2019-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多