消息队列|青训营笔记

93 阅读3分钟

前言

这是我参与【第五届青训营】伴学笔记创作活动第十三天, 今天学习的主要内容是消息对立的前世今生和消息队列Kafka,消息队列-BMQ,消息队列-RocketMQ。

正文

1. 消息队列

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

2. Karka

  • 如何使用:创建集群——新增Topic——编写生产者逻辑——编写消费者逻辑
  • 基本概念:
  • Topic:逻辑队列,不同topic可以建立不用的topic
  • Cluster:物理集群,每个集群中可以建立多个不同的topic
  • Producer:生产者,负责将业务消息发送到topic中
  • consumer:消费者,负责消费topic中的信息
  • consumerGroup:消费者组,不同的consumer互不干涉
  • Offset:消息在partition内的相对weizhi,可以理解为唯一ID,在partition内部严格递增。
  • Replica:每个分片有多个Replica,leader,Replica将会从ISR中选出。
  • Zookeeper:负责存储集群元信息,包括分区分配信息等。 -Preducer-批量发送,可以减少IO次数,从而加强发送能力
  • Producer——数据压缩:通过压缩,减少信息大小,目前支持Snappy,Gzip,LZ4,ZSTD压缩算法。
  • Broker:数据的存储,消息文件存储,磁盘结构,顺序写,偏移量索引文件时间戳索引文件,传统数据拷贝,;零拷贝
  • Kafka——重启操作:关闭,重启——Leader切换,追赶数据——数据同步完成——Leader回切
  • Kafka——问题总结:运维成本高;对于负载不均衡场景,解决方案复杂;没有自己的缓存,完全依赖Page cache;Cotroller和Coordinator在同一进程中,大量IO性能下降

3.BMQ

  • 兼容Kafka协议,存算分离,云原生消息队列
  • 运维操作对比:

微信图片_20230209204614.jpg

  • HDFS写文件流程:随机写入一定的DataNode进行写入
  • BMQ的架构模型:解决Kafka存在问题
  • BMQ读写流程:Failover机制,写入状态机
  • BMQ高级特性:泳道,Databus Mirror,Index,Parquet

4.RocketMQ

  • 使用场景:电厂业务线,其业务涉及广泛,如注册,订单,库存,物流等,同时也会涉及许多业务峰值时刻,如秒杀哦活动,周年庆,定期特惠。
  • 高级特性:
  • 事务场景
  • 事务消息
  • 延迟发送
  • 延迟消息
  • 处理失败
  • 消费重试和死信队列

微信图片_20230209205511.jpg