消息队列 | 青训营笔记

77 阅读2分钟

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

本节内容分为以下几个部分:

  • 消息队列的概念
  • Kafka
  • BMQ
  • RocketMQ

消息队列

消息队列有什么用?

消息队列可以在系统中起到解耦削峰填谷的作用,也可以用于异构分布式系统中海量数据的异步化处理

  • 解耦:当业务过长,存在消息丢失的风险时,通过消息队列可以将业务分解
  • 削峰填谷:当业务存在一段时间的高并发,流量洪峰击垮系统的风险,通过消息队列可以将超高流量分摊到更长的一段时间去消化
  • 异步:当业务调用其他接口时,需要等待其他接口的返回,造成时延,通过消息队列可以立刻返回用户响应

Kafka

使用场景:日志信息、Metrics数据、用户行为

如何使用Kafka:

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

概念:生产者和消费者、Topic、Partition、Cluster、Broker

  • 生产者和消费者:对于消息而言的发出和使用(接收)
  • Topic:每一个主题都对应一个消息队列,类似于数据库中的表
  • Partition:允许在一个主题中,开辟多条道路以此完成在同一主题的水平扩展
  • Cluster:物理集群
  • Broker:物理集群的节点

细节:Offset、Partition选主

  • Offset:消息在消息队列中的相对位置,在Partition中严格递增
  • Replica:Partition通过副本进行容灾,Leader-Follow ISR选主(保证高可用)

Kafka的设计

如何实现高吞吐和稳定:

  • Produce:批量发送、数据压缩
  • Broker:顺序写、消息索引、零拷贝
  • Consumer:负载均衡

其他重点:数据复制、重启操作、缩容和扩容、负载不均衡

BMQ

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

RocketMQ

使用场景

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