消息队列

70 阅读2分钟

案例一:系统奔溃 解决方案:解耦 案例二:服务处理能力有限 解决方案:削峰 案例三:链路耗时长尾 解决方案:异步 案例四:日志如何处理 日志处理。

消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用。 2.消息队列-Kafka 使用场景:搜索服务;直播服务;订单服务;支付服务 如何使用:创建集群-->新增Topic-->编写生产者逻辑-->编写消费者逻辑 消息的视角:Producer--生产-->Broker--消费-->Consumer Producer:批量发送;数据压缩;数据的存储 Broker:消息文件结构;磁盘结构;顺序写 Consumer通过发送FetchRequest请求消息数据,Broker 会将指定Offset 处的消息,按照时间窗口和消息大 小窗口发送给Consumer。 偏移量索引文件:采用二分找到小于目标offset的最大文件。先找到最大索引位置,再找到小于目标时间戳最大的索引位置,在通过寻找offset的方式找到最终数据。 数据拷贝分为传统数据拷贝和零拷贝。 Consumer:消息的接收端 Low level:通过手动进行分配,哪一个Consumer消费哪一个Partition完全由业务来决定。 High Level Rebalance

数据复制问题,重启操作,替换、扩容、缩容、负载不均衡 1.运维成本高 2.对于负载不均衡的场景,解决方案复杂 3.没有自己的缓存,完全依赖Page Cache

  1. Controller和Coordinator和Broker在同一进程中,大量IO会造成其性能下降

3.消息队列-BMQ 兼容Kafka协议,存算分离,云原生消息队列 重启后可直接对外服务,秒级完成 替换后可直接对外服务,秒级完成 扩容后可直接对外服务,秒级完成 缩容后可直接对外服务,秒级完成 1.BMQ的架构模型(解决Kafka存在的问题) 2.BMQ读写流程(Failover机制,写入状态机) 3.BMQ高级特性(泳道、Databus、Mirror、Index、Parquet)

4.消息队列- RocketMQ 使用场景:例如,针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等;同时,也会涉及许多业务峰值时刻,如秒杀活动、周年庆、定期特惠等 高级特性:事务场景;事务消息;延迟发送;延迟消息;处理失败的消息(消费重试和死信队列)