0

我在问自己ReactiveKafkaConsumerTemplatespring-kafka 项目是否确实保证了消息的正确顺序。我阅读了 reactor-kafka 项目的文档,它指出应该使用concatMap运算符来使用消息,但是 ReactiveKafkaConsumerTemplateflatMap至少在receiveAutoAck此处的方法的情况下使用运算符:

https://github.com/spring-projects/spring-kafka/blob/master/spring-kafka/src/main/java/org/springframework/kafka/core/reactive/ReactiveKafkaConsumerTemplate.java#L69

reactor-kafka 项目的参考文档: https ://projectreactor.io/docs/kafka/release/reference/#_auto_acknowledgement_of_batches_of_records

我有兴趣使用receiveAutoAck它,因为它似乎是最简单和最舒适的方法,足以满足我的用例。克服该方法的这种行为的唯一receiveAutoAck方法似乎是继承 ReactiveKafkaConsumerTemplate 并覆盖这种行为。它是否正确?

4

1 回答 1

0

我认为这并不重要,因为在内部我们的数据源Flux.fromIterable(consumerRecords)不会因为迭代器而丢失其顺序,因此我们不会尝试并行处理它们有多难,我们仍然会在一个迭代器中获得顺序. 是的,我们展平的迭代器之间的顺序确实是不可预测的,但这对我们来说并不重要,因为我们担心单个分区的顺序,仅此而已。

尽管如此,我认为我们绝对需要解决上述问题,concatMap()以避免将来出现这种混乱。随意提供关于此事的贡献!

于 2021-01-26T15:33:19.573 回答