消息队列 | 青训营笔记

66 阅读3分钟

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

什么是消息队列

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

业界消息队列对比

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

Kafka

使用场景

  • 搜索服务
  • 直播服务
  • 订单服务
  • 支付服务
  • 点赞、评论、收藏

如何使用Kafka

创建集群->新增Topic->编写生产者逻辑->编写消费者逻辑

基本概念

  • Topic:逻辑队列,不同Topic可以建立不同的Topic
  • Cluster:物理集群,每个集群中可以建立多个不同的Topic
  • Producer:生产者,负责将业务消息发送到Topic中
  • Consumer:消费者,负责消费Topic中的消息
  • ConsumerGroup:消费者组,不同组Consumer消费进度互不干涉
  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。
  • Zookeeper:负责存储集群元信息,包括分区分配信息等。

帮助Kafka提高吞吐或者稳定性的功能

  • Producer:批量发送、数据压缩
  • Broker:顺序写,消息索引,零拷贝。
  • Consumer:Rebalance

Kafka问题总结

  1. 运维成本高
  2. 对于负载不均衡的场景,解决方案复杂
  3. 没有自己的缓存,完全依赖Page Cache
  4. Controller和Coordinator和Broker在同一进程中,大量IO会造成其性能下降

BMQ

简介

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

小结

  1. BMQ的架构模型(解决Kafka存在的问题)
  2. BMQ读写流程(Failover机制,写入状态机)
  3. BMQ高级特性(泳道、Databus、Mirror、Index、Parquet)

RocketMQ

小结

  1. RocketMQ的基本概念(Queue、Tag)
  2. RocketMQ的底层原理(架构模型、存储模型)
  3. RocketMQ的高级特性(事务消息、重试和死信队列,延迟队列)

总结

通过本次课程让我了解到消息队列的发展历程,Kafka的基本概念、架构设计、底层原理、架构的缺点。BMQ的架构设计、底层的原理、Kafka比较、高级特性。RocketMQ的架构设计、底层原理、高级特性等方面。但对于消息队列的底层原理和特性的讲解过程中还是听不懂的地方很多。也是第一次接触这个技术,以后慢慢的了解吧。