【问题标题】:Kafka unordered message scenario handlingKafka无序消息场景处理
【发布时间】:2019-08-01 09:23:01
【问题描述】:

我在 kafka 消息处理中有 3 种类型的负载:

  1. category_create
  2. 文件夹创建
  3. article_create

我在数据库中输入的条目

理想情况下,负载应该按顺序排列: 类别创建 -> 文件夹创建 -> 文章创建, 因为文件夹总是属于某个类别,而文章总是属于某个文件夹。对于 folder_create 处理文件夹的类别应该已经作为 kafka 消息接收。但是在某些情况下,folder_create 加载会在 category_create 之前几毫秒。

如果文件夹创建允许category_create处理然后处理文件夹创建,我可以在spring boot中等待几毫秒。

尝试在 Spring Boot 中使用 @Retry 和 @Recover,但我想这不适合这种情况。

【问题讨论】:

  • 使用kafka无法实现消息的排序,可以尝试先将它们存储在缓存中,然后将其保存到数据库中

标签: java spring-boot apache-kafka


【解决方案1】:

消费者无法处理消息排序,应该在生产者端处理

【讨论】:

    【解决方案2】:

    消费者不能保证订单,应该由生产者完成。

    我们有类似的情况,我们在 DB 中创建了一个临时表来存储消息,直到我们收到所需的消息。然后处理数据库中的记录并删除它。

    【讨论】:

      【解决方案3】:

      保证消费者以追加顺序消费消息。 在您的情况下,您应该考虑安全生产者按顺序发送消息。为了实现这一点,最好让“max.in.flight.requests.per.connection=1”、“acks=all”另一个是“enable.idempotence=true”。但这些可能会影响您的吞吐量。

      【讨论】:

        猜你喜欢
        • 2019-06-21
        • 2011-05-24
        • 2017-02-09
        • 2020-08-03
        • 2019-12-15
        • 2022-11-11
        • 1970-01-01
        • 2019-08-04
        • 2018-01-04
        相关资源
        最近更新 更多