我正在使用 Kafka 消费者,该消费者在处理来自分区的消息时偶尔会挂起或滞后。这引起了一些问题,我需要有关最佳实践和配置的指导来解决这些问题:
Fallback Consumer:如果 Kafka Consumer 挂起或滞后,我如何启动另一个 Consumer 来接管并读取同一分区中的消息?
未处理的消息:如果消费者读取了消息但挂起/不处理它们,那些未处理的消息会发生什么?它们会保留在分区中,还是会被视为已处理?
解决消费者挂起/延迟:Kafka消费者挂起或延迟的常见原因是什么,可以调整哪些配置或属性来防止这种情况发生?具体来说:
应该修改哪些 Kafka 消费者属性(例如 session.timeout.ms、max.poll.interval.ms 等)的默认值来处理这种情况? 我可以实施其他策略,例如监控、错误处理或重试吗? 这是该问题的一个简单示例:
Kafka 消费者开始从主题读取消息并处理它们。 在处理过程中,消费者挂起或滞后,处理后的消息未提交。 我想确保这些未处理的消息得到正确处理并防止消息丢失或重复。 任何关于解决这些问题的指导以及配置 Kafka 消费者处理此类场景的最佳实践将不胜感激。
无法保证新消费者也不会挂起
如果不使用分配 API 而不是订阅,新消费者可能必须加入同一个消费者组。但在这种情况下,您需要手动管理“卡住”消费者组的偏移量。
经纪人不跟踪处理情况。消费者组跟踪偏移量。记录也不知道数据处理是否/何时/在哪里发生......经纪人是愚蠢的/基本的
我的最佳猜测是,您的一些消费者/经纪人配置与生产者设置的内容不匹配,并且记录正在网络中的某个位置丢失。例如。生产者允许发送 > 1MB 的记录,代理也可以存储这些记录,但您的消费者只是使用默认设置。查看最大消息获取字节 - 如何使用 Kafka 发送大消息(超过 15MB)?
我可以实现的监控、错误处理或重试
以上所有,是的。
希望确保这些未处理的消息得到正确处理并防止消息丢失或重复