我在问自己,spring-kafka项目的ReactiveKafkaConsumerTemplate是否保证了消息的正确排序。我阅读了reactor-kafka项目的文档,它指出消息应该使用concatMap操作符,但ReactiveKafkaConsumerTemplate至少在这里使用receiveAutoAck方法的情况下使用flatMap操作符:
反应堆-kafka项目参考文档:https://projectreactor.io/docs/kafka/release/reference/#_auto_acknowledgement_of_batches_of_records
我对使用receiveAutoAck很感兴趣,因为它似乎是最简单和最舒适的方法,这满足了我的用例。克服receiveAutoAck方法这种行为的唯一方法似乎是将ReactiveKafkaConsumerTemplate子类化并覆盖这种行为。这是正确的吗?
发布于 2021-01-26 23:33:20
我不认为这真的很重要,因为我们内部的数据源是Flux.fromIterable(consumerRecords),它不会因为迭代器而失去顺序,因此无论我们多么努力地不尝试并行处理它们,我们仍然会在一个迭代器中获得顺序。是的,我们扁平化的迭代器之间的顺序确实是不可预测的,但这对我们来说并不重要,因为我们担心的是单个分区的顺序,仅此而已。
然而,我认为我们肯定需要为前面提到的concatMap()解决这个问题,以避免在未来出现这样的混乱。请随时为这件事提供贡献!
https://stackoverflow.com/questions/65901791
复制相似问题