Kafka无序消息场景处理

时间:2019-03-11 05:02:48

标签: java spring-boot apache-kafka

我在kafka消息处理中遇到了三种情况:

  1. category_create
  2. folder_create
  3. article_create

我要在数据库中输入的内容

理想情况下,负载应按顺序排列: category_create-> folder_create-> article_create, 因为文件夹始终属于某个类别,文章始终属于某个文件夹。对于folder_create,处理文件夹的类别应该已经作为kafka消息被接收。但是,在某些情况下,folder_create的加载要比category_create早几毫秒。

在folder_create允许category_create处理然后再处理folder_create的情况下,我如何在春季启动中等待毫秒呢?

在春季启动中尝试使用@Retry和@Recover,但是我认为这不适合这种情况。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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