【问题标题】:Message ordering of ReactiveKafkaConsumerTemplate receiveAutoAckReactiveKafkaConsumerTemplate receiveAutoAck 的消息排序
【发布时间】:2021-01-26 12:57:44
【问题描述】:

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

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 并覆盖这种行为。这是正确的吗?

【问题讨论】:

标签: reactive-programming spring-kafka project-reactor reactor-kafka


【解决方案1】:

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

尽管如此,我认为我们肯定需要为提到的concatMap() 解决这个问题,以避免将来出现这种混乱。随时就此事提供贡献!

【讨论】:

    猜你喜欢
    • 2012-10-06
    • 2015-12-21
    • 1970-01-01
    • 2018-04-30
    • 1970-01-01
    • 2017-01-05
    • 2022-01-18
    • 2020-09-02
    • 2016-01-15
    相关资源
    最近更新 更多