如何处理Kafka消费者挂起/滞后和未处理的消息?

问题描述 投票:0回答:1

我正在使用 Kafka 消费者,该消费者在处理来自分区的消息时偶尔会挂起或滞后。这引起了一些问题,我需要有关最佳实践和配置的指导来解决这些问题:

Fallback Consumer:如果 Kafka Consumer 挂起或滞后,我如何启动另一个 Consumer 来接管并读取同一分区中的消息?

未处理的消息:如果消费者读取了消息但挂起/不处理它们,那些未处理的消息会发生什么?它们会保留在分区中,还是会被视为已处理?

解决消费者挂起/延迟:Kafka消费者挂起或延迟的常见原因是什么,可以调整哪些配置或属性来防止这种情况发生?具体来说:

应该修改哪些 Kafka 消费者属性(例如 session.timeout.ms、max.poll.interval.ms 等)的默认值来处理这种情况? 我可以实施其他策略,例如监控、错误处理或重试吗? 这是该问题的一个简单示例:

Kafka 消费者开始从主题读取消息并处理它们。 在处理过程中,消费者挂起或滞后,处理后的消息未提交。 我想确保这些未处理的消息得到正确处理并防止消息丢失或重复。 任何关于解决这些问题的指导以及配置 Kafka 消费者处理此类场景的最佳实践将不胜感激。

apache-kafka kafka-consumer-api kafka-partition
1个回答
0
投票
  1. 无法保证新消费者也不会挂起

  2. 如果不使用分配 API 而不是订阅,新消费者可能必须加入同一个消费者组。但在这种情况下,您需要手动管理“卡住”消费者组的偏移量。

  3. 经纪人不跟踪处理情况。消费者组跟踪偏移量。记录也不知道数据处理是否/何时/在哪里发生......经纪人是愚蠢的/基本的


我的最佳猜测是,您的一些消费者/经纪人配置与生产者设置的内容不匹配,并且记录正在网络中的某个位置丢失。例如。生产者允许发送 > 1MB 的记录,代理也可以存储这些记录,但您的消费者只是使用默认设置。查看最大消息获取字节 - 如何使用 Kafka 发送大消息(超过 15MB)?


我可以实现的监控、错误处理或重试

以上所有,是的。

希望确保这些未处理的消息得到正确处理并防止消息丢失或重复

  1. 复制因子 >= 3 + min.insync.replicas>=2(复制减 1)
  2. 生产者确认=全部
  3. 生产者交易=已启用+在代码中使用(即使对于单个记录,但对于最近的几个版本,它已默认启用)
  4. 启用消费者幂等性
  5. 定期测试客户与经纪商之间的网络故障。
© www.soinside.com 2019 - 2024. All rights reserved.