10.消息队列 | 青训营笔记

96 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 10 天

庞大的请求量发起订单,处理订单只能同时处理10单请求,那么就可以考虑用消息队列。

常见消息队列 

kafka,rocketMQ,Pulsar,BMQ

kafka

用于离线消息处理,比如日志信息,程序运行中程序状态采集的数据,用户行为,搜索点赞评论等。

首先,创建kafka集群,然后新增topic,编写生产者,消费者组从某个时间点消费,多个partition有容灾的作用。

消息可以做批量处理batch,减少io。通过压缩,减少消息大小。

kafka提高吞吐或者稳定性的功能:

  • producer 批量发送,数据压缩
  • broker 顺序写,消息索引,零拷贝
  • consumer rebalance

kafka缺点:

数据复制问题,集群升级,重启,重新选leader,broker1重启时候broker2还在有新数据,就会数据不一致,出现负载均衡问题。

kafka替换,扩容,缩容

kafka会负载不均衡,迁走数据的时候又有了另一个io问题

  • 运维成本高

  • 负载不均衡场景,解决方案极其复杂

  • 没有自己的缓存,完全依赖page cache

  • controller和coordinator和broker在同一进程中,大量IO会造成性能下降

BMQ

为了解决kafka的问题产生的。兼容kafka,存算分离。

rocketMQ(低延时,峰值秒杀场景)

针对电商业务线,业务涉及广泛,如注册,订单,库存,物流等;同时,也会涉及许多业务的峰值时刻,如秒杀活动,周年庆,定时特惠等。

高级特性

1.库存记录和消息队列的事务保证,事务在rocketMQ中的具体实现是

rocketMQ有回查机制,来确定是提交还是回滚,就是一个两阶段提交。

2.延迟发送

通过定时任务,线程不断调度,

3.处理失败

重试方案和定时方案有些类似,没到最大重试次数,重新投递,超过最大重试次数,发送到死信队列,可以看到消息。