使用RoundRobinPartitioner与DefaultPartitioner时Kafka生产者是否同分区重试?
Kafka生产者重试时的分区选择规则
核心结论:默认情况下,Kafka生产者的重试请求会复用原始请求的目标分区,不会重新执行DefaultPartitioner的分区选择逻辑。
具体说明
当生产者首次发送消息时,会按照DefaultPartitioner的规则确定目标分区,这个分区信息会绑定到当前发送任务中。后续触发重试(比如网络波动、分区leader切换等场景)时,生产者不会重新计算分区,而是直接使用首次确定的分区发送重试请求。
DefaultPartitioner分区策略(官方注释翻译)
默认分区策略:
- 如果消息记录中指定了分区,直接使用该分区
- 如果未指定分区但消息带有key,基于key的哈希值选择分区
- 如果既没有指定分区也没有key,以轮询方式分配分区
对于RoundRobinPartitioner来说,首次发送时会以轮询方式选择分区,但重试时同样会沿用首次确定的分区,不会重新轮询分配新分区。
内容的提问来源于stack exchange,提问作者Adam Z
相关产品推荐
相关产品推荐

