ReactiveKafkaConsumerTemplate receiveAutoAck 的消息排序
Message ordering of ReactiveKafkaConsumerTemplate receiveAutoAck
我在问自己 spring-kafka 项目的 ReactiveKafkaConsumerTemplate
是否能保证消息的正确排序。我阅读了 reactor-kafka 项目的文档,它指出应该使用 concatMap
运算符来使用消息,但是 ReactiveKafkaConsumerTemplate 至少在 receiveAutoAck
方法的情况下使用 flatMap
运算符这里:
reactor-kafka项目参考文档:
https://projectreactor.io/docs/kafka/release/reference/#_auto_acknowledgement_of_batches_of_records
我对使用 receiveAutoAck
很感兴趣,因为它似乎是最简单、最舒适的方法,足以满足我的用例。克服 receiveAutoAck
方法的这种行为的唯一方法似乎是将 ReactiveKafkaConsumerTemplate 子类化并覆盖这种行为。这是正确的吗?
我认为这在这里并不重要,因为在内部我们的数据源是 Flux.fromIterable(consumerRecords)
,它不会因为迭代器而丢失其顺序,因此我们不会尝试并行处理它们。 ,我们仍然会在一个迭代器中获得订单。是的,我们展平的迭代器之间的顺序确实是不可预测的,但这对我们来说并不重要,因为我们担心的是单个分区的顺序,仅此而已。
尽管如此,我认为我们确实需要为提到的 concatMap()
解决这个问题,以避免将来出现此类混乱。请随时就此事发表意见!
我在问自己 spring-kafka 项目的 ReactiveKafkaConsumerTemplate
是否能保证消息的正确排序。我阅读了 reactor-kafka 项目的文档,它指出应该使用 concatMap
运算符来使用消息,但是 ReactiveKafkaConsumerTemplate 至少在 receiveAutoAck
方法的情况下使用 flatMap
运算符这里:
reactor-kafka项目参考文档: https://projectreactor.io/docs/kafka/release/reference/#_auto_acknowledgement_of_batches_of_records
我对使用 receiveAutoAck
很感兴趣,因为它似乎是最简单、最舒适的方法,足以满足我的用例。克服 receiveAutoAck
方法的这种行为的唯一方法似乎是将 ReactiveKafkaConsumerTemplate 子类化并覆盖这种行为。这是正确的吗?
我认为这在这里并不重要,因为在内部我们的数据源是 Flux.fromIterable(consumerRecords)
,它不会因为迭代器而丢失其顺序,因此我们不会尝试并行处理它们。 ,我们仍然会在一个迭代器中获得订单。是的,我们展平的迭代器之间的顺序确实是不可预测的,但这对我们来说并不重要,因为我们担心的是单个分区的顺序,仅此而已。
尽管如此,我认为我们确实需要为提到的 concatMap()
解决这个问题,以避免将来出现此类混乱。请随时就此事发表意见!