kafka之延迟队列

本文探讨了在用户营销业务场景中使用延迟队列的需求,例如15分钟后为未下单用户推送优惠券。现有的技术方案如Redis和JDK延迟队列等存在局限。文章提出基于Kafka开发延迟队列组件,利用Kafka的高吞吐量特性,设计思路类似于RocketMQ延迟消息,通过创建不同级别的延迟topic并在客户端检查消息是否到期。伪代码展示了如何处理延迟消息的到期、延期和未到期情况,总结指出该方案性能稳定,但可能增加Kafka存储压力并存在延迟问题。
摘要由CSDN通过智能技术生成

kafka之延迟队列

一、背景

用户营销业务场景中存在大量延迟消息处理,如用户访问某物品未下单,15分钟后给该用户推送一张优惠券等,需要支持上亿用户推送,并且低延迟。现有技术方案:

  1. redis过期监听 :内存存储,不适用大数据量,并且过期删除不精确,存在惰性删除,可能改key一直没有过期;
  2. JDK自带延迟队列:单机,非分布式;
  3. rocketMQ: 延迟时长最大24小时,业务场景需要支持天以上,存储成本变大
  4. 数据库+定时任务:引入新数据库、大数据量还需要进行分库分表,并且存在延迟,对数据库压力较大
    具体可以参考:https://mp.weixin.qq.com/s/OmbyxkufVm-XzwIv_A514w

以上技术缺点和本身系统大量应用kafka中间件,吞吐量高,考虑基于kafka开发延迟队列组件,同时也不需要引入第三方中间件

二、延迟队列设计思路

设计思路来自RocketMQ延迟消息:使用rocketmq延迟消息时,服务端实际上发送到另一个topic,并通过周期任务轮询检查延迟消息是否到期,到期才转发到目标topic,达到延迟效果。
参考该思路,自建延迟消息topic,在客户端消费者消费延迟消息,检查是否到期,到期则转发到目标topic&

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值