我们应该使用 max.poll.records 还是 max.poll.interval.ms 来处理在 kafka 消费者中需要更长时间处理的记录?

Raj*_*Raj 4 apache-kafka kafka-consumer-api

我试图了解在 kafka 消费者中处理需要更长时间处理的记录的更好选择是什么?我进行了一些测试来理解这一点,并观察到我们可以通过修改max.poll.records或来控制这一点max.poll.interval.ms

现在我的问题是,什么是更好的选择?请建议。

Gio*_*ous 6

max.poll.records简单地定义在一次调用中返回的最大记录数poll()

现在max.poll.interval.ms定义调用之间的延迟poll()

max.poll.interval.ms:poll()使用消费者组管理时调用之间的最大延迟 。这为消费者在获取更多记录之前可以空闲的时间设置了上限。如果poll()在此超时到期之前未调用,则认为消费者失败,组将重新平衡以将分区重新分配给另一个成员。对于使用group.instance.id达到此超时的非空值的消费者,不会立即重新分配分区。相反,消费者将停止发送心跳,分区将在 到期后重新分配session.timeout.ms。这反映了已关闭的静态消费者的行为。


我相信您可以调整两者以获得预期的行为。例如,您可以计算消息的平均处理时间。如果平均处理时间是 1 秒,max.poll.records=100那么您应该为轮询间隔留出大约 100+ 秒的时间。