②走进消息队列 | 青训营笔记

110 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第2篇笔记。

之前讲的内容感觉有的些像课内的知识,有的又太多脱离目前的水平,记起笔记来感觉不好归纳,这次消息队列的课程感觉引入的比较好,能让我这个菜鸡能够听懂, 打算等把知识点补齐一点,把之前的知识点串起来在补上前面的笔记。

消息队列技术在实际生产中应用广泛,但是在大学教学课程中少有提及。

引入

课程用了几个案例

第一个案例是系统崩溃

image.png

第二个案例是服务能力有限。

image.png

第三个案例是链路耗时长尾:客户体验不佳。

image.png

第四个案例是日志存储。

这四个场景分别有对应的消息队列解决方案

对于场景1则是在通过消息队列来记录存储

image.png

对于场景2则是通过消息队列来削峰

image.png

对于场景3则是通过消息队列来进行异步处理

image.png

场景4是日志处理(不是很了解就贴个图把)

image.png

随后的介绍:

消息队列MQ:保存消息的一个容器 本质是一个队列,需要支持高吞吐高并发、高可用。

Kafka

可程介绍了如何使用Kafka: 创建集群、新增Topic、编写生产者逻辑和编写消费者逻辑。

总结了可以帮助Kafka提高吞吐或者稳定性的功能: Producer:批量发送、数据压缩。 Broker:顺序写,消息索引,零拷贝。 Consumer:Rebalance。 数据复制问题、重启操作、替换、扩容、缩容、负载不均衡。

关于Kafka的问题总结:运维成本高、对于负载不均衡的场景,解决方案复杂,没有自己的缓存,完全依赖Page Cache Controller 和Coordinator 和Broker 在同一进程中。大量IO会造成其性能下降。

BMQ

对比了BMQ和Kafka的运维操作,体现了BMQ的优势。

HDFS写文件流程:随机选择DataNode写入。

Broker-Partition状态机 保证对于任意分片在同一时刻只能在一个Broker上存活。

介绍了Broker写文件流程、 Proxy、 多机房部署、BMQ的高级特性和泳道消息等

Databus直接使用原生SDK问题:客户端配置较为复杂;不支持动态配置,更改配置需要停掉服务;对于latency不是很敏感的业务,batch效果不佳。

Mirror:通过多机房部署方式,解决跨Region读写问题。 通过最终一致的方式。

Index:直接在BMQ中将数据结构化,配置索引DDL,异步构建索引后,通过Index Query 服务读出数据。

Parquet: Apache Parquet 是Hadoop 生态圈中一种新型列式存储格式,可以兼容Hadoop生态圈中大多数计算框架,被多种查询引擎支持,可以直接在BMQ中将数据结构化,通过Parquet Engine 可以使用不同的方式构建Parquet格式文件。

使用场景:针对电商业务线,其业务涉及广泛,如注册、订单、库存、物流等,同时也涉及许多业务峰值时刻,如秒杀活动、定期特惠等

RocketMQ

介绍了基本概念、架构、高级特性:事务场景、事务消息、延迟发送、延迟消息、消费重试和死信队列。

干货很多,慢慢学习!