消息队列简介| 青训营

147 阅读2分钟

走进消息队列

什么是消息队列(MQ)-引入

搜索结果-抢购-处理订单的用时-日志存储等情况下的系统崩溃,服务器处理耗时长,链路耗时长尾,日志处理等问题的解决处理

  • 解耦
    • 解除必须关联性
  • 削峰
    • 设置最高同时请求次数
  • 异步
    • 同时执行操作
  • 日志处理
    • Log-消息队列-LogStash-ES-Kibana
  • 消息队列的定义:保存消息的一个容器,本质是个队列,支持高吞吐,高并发,高可用

消息队列发展历程

  • 诞生于TIB-1985
  • Kafka-2010年Linked开源
  • RocketMQ-2011阿里自研
  • Pulsar-2012-Yahoo

一些业内消息队列对比

  • Kafka-分布式,分区,高吞吐
  • RocketMQ-低延迟,强一致,高性能,高可靠,实时场景运用较广
  • Pulsar-下一代云原生分布式消息流平台
  • BMQ-和Pulsar类似,存算分离,承接高吞吐的离线业务场景

Kafka

  • 常用场景
    • 搜索服务,直播服务.订单服务,支付服务-表现为日志消息,Metrics数据,用户操作的信息
  • 如何使用
    • 创建集群-新增Topic-编写生产者逻辑-编写消费者逻辑
  • 基本概念
    • Topic 逻辑队列
    • Cluster 物理集群,每个集群中可以建立多个不同的Topic
    • Producer 生产者,负责将业务消息发送到Tpoic中
    • Consumer 消费者,负责消费Topic中的消息
    • ConsumerGroup 消费者组,不同组之间互不干涉
  • Offset
    • 概念 消息在partition内的相对位置信息,可以理解为唯一ID
  • Replica
    • 每个分片有多个Replica
  • 一条消息的自述(流程)
    Producer---(生产)-->Broker---(消费)-->Consumer
  • 可以帮助Kafka提高吞吐或者稳定性的功能
    • Producer 批量发送,数据压缩
    • Broker 顺序写,消息索引,零拷贝
    • Consumer Pebalance
  • 问题总结
    • 运维成本高
    • 对于负载不均衡的场景,解决方案复杂
    • 没有自己的缓存,完全依赖Page Cache
    • Controller和Coordinator和Broker在同一进程中,大量IO会导致其性能下降

BMQ

  • 简介
    • 兼容Kafka协议,存算分离,云原生消息队列
    • 秒级操作,Kafka是分级

RocketMQ

  • 使用场景
    • 针对电商业务,比如注册,订单,库存等
    • 设计业务峰值时刻,如秒杀,周年庆,定期特惠等
  • 底层原理
    • 架构模型,存储模型
  • 高级特性
    • 事务消息,重试和死信队列,延迟队列