走进消息队列

75 阅读2分钟

前世今生

大规模订单请求处理会遇到的问题和解决方案

  1. 系统bug,影响整个链路:解耦,然后事先存到消息队列里面,不直接放到系统里面去 处理
  2. 请求量太大,服务能力有限:削峰
  3. 链路耗时太长:异步
  4. 过于复杂日志的没法处理

image.png

消息队列:

  • 保持消息的一个容器
  • 本质上还是个队列
  • 高可用、高并发

发展历程

  • TIB -> IBM WebSphere -> MSMQ
  • JMS AMQP 规范
  • Kafka 开源

业界对比

image.png

  • RabbitMQ

    • 支持多种协议,如AMQP、MQTT、STOMP等
    • 有丰富的插件和社区支持
    • 可靠性高,支持持久化、事务等机制
    • 适合复杂的消息路由和转发场景
  • Kafka

    • 高吞吐量,支持百万级别的消息处理
    • 支持多种语言的客户端
    • 可以进行消息的批量处理
    • 适合大数据场景,如日志收集、流式处理等
  • ActiveMQ

    • 支持多种协议,如AMQP、STOMP、OpenWire等
    • 有较好的可视化管理界面
    • 支持持久化、事务等机制
    • 适合传统企业应用和JMS场景
  • Redis

    • 内存数据库,读写性能高
    • 支持多种数据结构的操作,如List、Set、Hash等
    • 支持发布/订阅模式,可以实现消息队列功能
    • 适合对延迟和吞吐量要求较高的场景,如实时计算、实时推荐等
  • Pulsar

    • 支持多租户的部署方式
    • 支持多种协议,如Kafka、MQTT等
    • 支持多种消息模式,如点对点、发布/订阅等
    • 适合大规模、高可用、多租户的场景,如云原生应用、边缘计算等

简单认识消息队列

  • 消息队列架构

    • 生产者:产生消息并发送到消息队列
    • 消息队列:存储消息并将其传递给消费者
    • 消费者:从消息队列中接收消息并处理
  • 消息队列基本概念

    • 消息:生产者发送给消息队列的数据单元
    • 队列:消息队列中存储消息的数据结构
    • 消费者组:一组消费者,共同消费同一个消息队列中的消息
    • 消费者偏移量:消费者在消息队列中消费消息的位置记录
    • 消息确认机制:消费者消费完消息后,向消息队列发送确认信息,以标记该消息已被成功消费

Kafka

使用场景

image.png

使用流程

  • 创建集群、topic、消费者生产者逻辑

基本概念

image.png

  • Offset:下的内部偏移

  • Replica: