我在kafka消息处理中有一个场景,其中我得到3种类型的负载:
类别\u创建
文件夹\u创建
文章\u创建
我在db中输入
理想情况下,加载的顺序应该是:category\u create->folder\u create->article\u create,因为文件夹总是属于某个类别,而article总是属于某个文件夹。对于要处理的文件夹,文件夹的类别应已作为kafka消息接收。但是,在某些情况下,文件夹创建加载时间比类别创建时间早几毫秒。
在spring boot中,如果是folder\u create,我可以做什么来等待毫秒,以允许category\u create处理,然后处理folder\u create。
尝试在spring boot中使用@retry和@recover,但我猜这不适合这种情况。
3条答案
按热度按时间vtwuwzda1#
保证使用者按追加顺序使用消息。在您的情况下,您应该考虑确保生产者按顺序发送消息。为了实现这一点,最好让“max.in.flight.requests.per.connection=1”,“acks=all”另一个是“enable.idempotence=true”。但这些可能会影响你的吞吐量。
q43xntqr2#
消费者不能保证订单,应该由生产商来做。
我们有类似的情况,我们在db中创建了一个临时表来存储消息,直到我们收到所需的消息。然后处理数据库中的记录并将其删除。
gkn4icbw3#
使用者不能处理消息排序,它应该在生产者端处理