kafka消息消费有延迟_简易实现kafka延迟消息

官方正版vulkan开发实战详解编程书

104.25元

(需用券)

去购买 >

背景

当前业务存在以下场景:在一个事务内的最后一步是发送kafka消息,消费端收到通知后读取数据并做处理。但是由于kafka几乎是即时收到消息,导致偶尔出现“在发完kafka和提交事务的间隙,消费端收到了消息并读取到了事务提交前的数据”。

这个问题可以通过延迟消息来解决。

发送端 vs 消费端

要做延迟,那么首先要考虑的是:延迟放在发送端,还是放在消费端?最终选择放在消费端:

让数据先被kafka存储起来,数据更安全。

想把延迟消息做成一个服务,不只是支持某一个场景/业务,在这种设计前提下,让延迟逻辑放在消费端,可以统一调整逻辑,也方便排查问题。

思路

是在整体外面包一层代理:

另外创建一个延迟Topic,延迟消息都发到延迟Topic里。

有专门的服务来消费延迟Topic的消息,取到消息之后存储起来,定期检查消息是否已经延迟时间。

已到延迟时间的消息,重新发送到原先Topic。

这样做的好处是,不需要对kafka做任何改造。

存储

延迟队列消费者拉取到消息之后,要怎么存储?第三方存储,其需要满足以下几个条件:

高性能:写入延迟要低,MQ的一个重要作用是削峰填谷,在选择临时存储时,写入性能必须要高,关系型数据库(如My

你可能感兴趣的:(kafka消息消费有延迟)