消息队列|青训营笔记

90 阅读3分钟

消息队列|青训营笔记

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

在后面会依次倒叙回顾之前的学习课程,便于复习~

一、课程重点内容

  • 发展历程
  • Kafka
  • BMQ

下面是对课程重点内容的思考与总结,有问题或者错误,可以批评指正呐~

二、消息队列的发展

定义:消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用。

image-20230209193827921.png

  • 发展历程

    image-20230209193911854.png

    业界的主流工具对比

    Kafka分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
    RocketMQ低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
    Pulsar是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
    BMQ和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群

三、Kafka

Kafka是由Apache软件基金会开发的一个开源流处理平台,由ScalaJava编写。Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者在网站中的所有动作流数据。 这种动作(网页浏览,搜索和其他用户的行动)是在现代网络上的许多社会功能的一个关键因素。 这些数据通常是由于吞吐量的要求而通过处理日志和日志聚合来解决。 对于像Hadoop一样的日志数据和离线分析系统,但又要求实时处理的限制,这是一个可行的解决方案。Kafka的目的是通过Hadoop的并行加载机制来统一线上和离线的消息处理,也是为了通过集群来提供实时的消息。

  • 使用场合

    搜索服务
    直播服务
    订单服务
    支付服务
  • 使用方法

image-20230209194447868.png

  • 内部特性

    • 批量发送+数据压缩:通过压缩,减少消息大小,目前支持Snappy、Gzip、LZ4、ZSTD压缩算法

    • 数据存储:移动磁头找到对应磁道,磁盘转动,找到对应扇区,最后写入。寻道成本比较高,因此顺序写可以减少寻道所带来的时间成本。

    • 数据拷贝与传输:

    image-20230209194804845.png

    image-20230209194852157.png

    通过改进传统数据拷贝,实现零拷贝的过程,直接在内核态传输数据。
    
    • 消费者的重分配策略:通过动态调整消费者的分区数量使得分区更好地不被阻塞。

四、BMQ

兼容Kafka协议,存算分离,云原生消息队列

image-20230209195310475.png

  • 状态机

    • 保证对于任意分片在同一时刻只能在一个Broker上存活。
  • 写文件流程

    • 可根据业务特点来判断是否落盘才发送ACK标志。如果 DataNode节点挂了或者是其他原因导致我们写文件失败,应该如何处理?这里的话,就重新寻找新的可用节点,保证高可用性。
  • 高级特性

    • 泳道消息
    • MIRROR

五、课程总结

通过学习消息队列使得自己对于分布式的了解进一步加深,以后一定好好巩固这一块,这块还是一个硬骨头。