Kafka消费者处理消息超时是否会导致分区重分配、消息重复消费?
Kafka消费超时场景问题解答
分区是否会被重新分配给第二个消费者
会。
Kafka消费者组通过max.poll.interval.ms参数控制消费超时逻辑:消费者拉取消息后,必须在该参数配置的时长内再次发起poll请求,否则消费者协调器会判定该消费者故障,将其踢出消费者组,触发再平衡(Rebalance)。
当前场景下消费者组只有1个分区,再平衡后该分区会被分配给组内处于空闲状态的第二个消费者。
是否会出现消息重复消费的情况
绝大多数场景下会出现重复消费,核心原因是Kafka的消费偏移量提交和业务处理逻辑完全解耦,只有偏移量成功提交后,才会被认定为消息消费完成,分两种常见情况说明:
- 自动提交偏移量(默认配置
enable.auto.commit=true):自动提交动作仅在消费者发起poll请求时触发,第一个消费者全程处于业务阻塞状态,没有发起下一次poll请求,因此正在处理的这批消息的偏移量从未被提交。第二个消费者拿到分区后,会从上一次成功提交的偏移量位置重新拉取这批消息处理,产生重复消费。 - 手动提交偏移量:除非第一个消费者在被判定超时踢出组之前,就已经先完成了偏移量提交,否则和自动提交逻辑一致,第二个消费者依然会拉取到相同的消息。即便第一个消费者后续阻塞结束、业务处理成功,此时他已经被移出消费者组,偏移量提交请求会被协调器拒绝,不会影响第二个消费者的消费进度,重复消费依旧会发生。
内容的提问来源于stack exchange,提问作者J.J. Beam
相关产品推荐
相关产品推荐

