消息队列 | 青训营笔记

88 阅读2分钟

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

一、 目录

  • 消息队列简介
  • 一些常用的消息队列性能对比
  • Kafka简介
  • RocketMQ简介

二、 知识点详解

2.1 消息队列简介

定义:保存消息的一个容器,本质是个队列,需要支持高吞吐、高并发、高可用

使用场景

  • 系统崩溃,程序出错

  • 服务器能力有限、请求量巨大

  • 链路耗时长尾

  • 日志存储

2.2 一些常用的消息队列性能对比

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

2.3 Kafka

  • 基本概念

    • topic:逻辑队列,每一个不同的业务场景就是一个不同的topic。对于每个业务来说,所有的数据都存在它对应的topic中
    • cluster:集群,每个集群可以创建不同的topic
    • producer:消息生产端,负责将业务消息发送到topic中
    • consumer:消息消费端,负责消费已经发送到topic中的消息
    • consumer group 消费者组,不同组consumer消费进度互不干涉
    • Offset:消息在partition 内的相对位置信息,可以理解为唯一ID,在 partition内部严格递增
    • Replica:每个分片有多个Replica,Leader Replica将会从ISR中选出
    • ZooKeeper:负责存储集群元信息,包括分区分配信息等
  • Kafka的问题:

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

2.4 RocketMQ

  • 基本概念

基本概念参照Kafka,基本与Kafka等价,kafka中的partition等价于RocketMQ中的consumerqueue

  • 特性

    • 保证事务一致性ACID
    • 事务消息
    • 延迟发送
    • 消费重试和死信队列