我正在寻找一种“低成本”方法,以便在我不主动投票时让消费者保持活力。即,仍然处理上次轮询的记录,我不希望消费者连接超时。
一些看起来很有希望的功能:
在每种情况下,这都是API的非标准用法,因此我不确定这是一种合理/合理的方法。
RE:将连接超时设置得更高 - 如果消费者被楔入,我希望消费者超时。我的问题涉及一个部分,我已经获取了一个记录块,并且单独的线程正在处理它们。
答案 0 :(得分:3)
自Kafka 0.10.1起,消费者在poll
电话中不再发出心跳。它在一个单独的线程中运行听力。所以,如果这是你的版本,那么别无他法。见KIP-62
答案 1 :(得分:1)
documentation似乎建议您拨打pause()
,然后继续主动投票。如果您在暂停时拨打poll()
,则不会返回任何内容。
对于消息处理时间变化不可预测的用例, 这两种选择都不够。推荐的方式 处理这些情况是将消息处理移动到另一个线程, 这允许消费者在处理器时继续调用poll 还在工作必须注意确保承诺 偏移量不会超过实际位置。通常,你必须 禁用自动提交并手动提交已处理的偏移量 仅在线程完成处理后记录(取决于 你需要的交付语义)。另请注意,您需要 暂停分区,以便不从轮询中接收新记录 直到线程完成处理之前返回的那些之后。
pause()
的文档证实了这一点:
暂停从请求的分区中获取。未来的电话 poll(long)将不会返回来自这些分区的任何记录 他们已经恢复使用简历(收集)。注意这个方法 不影响分区订阅。特别是,它没有 在使用自动分配时导致组重新平衡。