【问题标题】:Handling backpressure and avoiding rebalances on a slow consumer kafka在缓慢的消费者 kafka 上处理背压并避免重新平衡
【发布时间】:2018-12-11 22:26:01
【问题描述】:

用例是我的消费者偶尔会执行一些需要很长时间的 I/O 工作。我正在使用 Spring 2.0.1 和 <spring-cloud.version>Elmhurst.RELEASE</spring-cloud.version</spring-cloud.version>

最初的解决方案是将max.poll.interval.ms 设置为高于默认值,将max.poll.records 设置为低于默认值。这确实减少了重新平衡的数量,但仍然存在 I/O 操作花费的时间超过max.poll.interval.ms 的情况,并且重新平衡的成本很高,会产生相当大的延迟。如果没有重新平衡,处理将及时完成,即使考虑到 I/O 持续时间达到峰值的情况。

我可以使用哪些设置和代码或架构使系统既响应(当消费者实际被阻止时重新平衡)而不触发重新平衡当一个消费者花费异常长时间来处理消息时?

【问题讨论】:

    标签: java apache-kafka spring-cloud-stream spring-kafka


    【解决方案1】:

    我知道的唯一解决方案是调整这两个属性(或减少侦听器花费的时间)。

    【讨论】:

    • 真的没有办法让特定消费者注意到他处理事情的时间太长并告诉kafka“嘿,我在这里还活着,没有卡住,如果我保证不要惊慌不要再 poll() 多毫秒”?我用 consumer.pause() 和 consumer.resume() 做了一些尝试,但没有骰子,尤其是当消息处理时间超过 session.timeout.ms
    • 否;没有这样的机制,pause() 无济于事——它只是告诉 Kafka 不要从poll() 返回任何记录,但它仍然需要在max.poll.interval.ms 内进行轮询。您可以将工作交给另一个线程,设置max.poll.records=1pause() 消费者;使用手动确认;然后在工作完成后确认/恢复。底线是 Kafka 并不是这个用例的最佳选择,
    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2020-02-13
    • 1970-01-01
    • 2018-05-23
    • 2017-06-19
    • 2020-08-04
    • 1970-01-01
    • 2021-01-26
    相关资源
    最近更新 更多