使用Kafka保持消费者的活力

时间:2017-05-01 16:27:43

标签: java apache-kafka

我正在寻找一种“低成本”方法,以便在我不主动投票时让消费者保持活力。即,仍然处理上次轮询的记录,我不希望消费者连接超时。

一些看起来很有希望的功能:

在每种情况下,这都是API的非标准用法,因此我不确定这是一种合理/合理的方法。

RE:将连接超时设置得更高 - 如果消费者被楔入,我希望消费者超时。我的问题涉及一个部分,我已经获取了一个记录块,并且单独的线程正在处理它们。

2 个答案:

答案 0 :(得分:3)

自Kafka 0.10.1起,消费者在poll电话中不再发出心跳。它在一个单独的线程中运行听力。所以,如果这是你的版本,那么别无他法。见KIP-62

答案 1 :(得分:1)

documentation似乎建议您拨打pause(),然后继续主动投票。如果您在暂停时拨打poll(),则不会返回任何内容。

  

对于消息处理时间变化不可预测的用例,   这两种选择都不够。推荐的方式   处理这些情况是将消息处理移动到另一个线程,   这允许消费者在处理器时继续调用poll   还在工作必须注意确保承诺   偏移量不会超过实际位置。通常,你必须   禁用自动提交并手动提交已处理的偏移量   仅在线程完成处理后记录(取决于   你需要的交付语义)。另请注意,您需要   暂停分区,以便不从轮询中接收新记录   直到线程完成处理之前返回的那些之后。

pause()的文档证实了这一点:

  

暂停从请求的分区中获取。未来的电话   poll(long)将不会返回来自这些分区的任何记录   他们已经恢复使用简历(收集)。注意这个方法   不影响分区订阅。特别是,它没有   在使用自动分配时导致组重新平衡。