消息队列入门 | 青训营

98 阅读3分钟

消息队列是什么?

消息队列(Message Queue):指的是保存消息的一个容器,本质是一个队列。需要支持高吞吐,高并发,并且高可用。

image.png

消息队列的发展历程

image.png

业界消息队列对比

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

消息队列--Kafka

使用场景

image.png

如何使用Kafka

  • 第一步,创建一个Kafka集群。
  • 第二步,在这个集群中创建一个Topic,并且设置好分片数量。
  • 第三步,引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去。
  • 第四步,引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到刚刚发送的Hello World。

Kafka中的基本概念

image.png

  • Topic:Kafka中的逻辑队列,可以理解成每一个不同的业务场景中就是一个不同的topic,对于这个业务来说,所有的数据都存储在这个topic中。
  • CLuster:Kafka的物理集群,每个集群中可以新建多个不同的topic。
  • Producer:顾名思义,消息的生产端,负责将业务信息发送的Topic中。
  • Consumer:消息的消费端,负责消费已经发送到topic中的消息。
  • Partition:通常topic会有多个分片,不同分片之间消息是可以并发来处理的,这样提高单个Topic的吞吐。
  • Offset:消息在partition内的相对位置信息,可以理解为唯一ID,在partition内部严格递增。
  • Replica:分片的副本,分布在不同的机器上,可以用来容灾。其中还Leader对外服务,Follower异步拉取Leader的数据进行同步,如果Leader挂掉了,可以将Follower升级成Leader对外进行服务。
    • ISR(In-Sync-Replicas):意思是同步中的副本,对于Follower来说,始终和Leader是有一定差距的,当这个差距过大的时候Follower就会被踢出ISR,不在ISR中的副本不会升级成Leader。
    • image.png

数据复制

下面这幅图代表Kafka中副本的分布图,图中Broker代表每一个Kafka的节点,所有的Broker节点最终组成了一个集群。整个图表示,图中整个集群,包含了4个Broker机器节点,集群中有两个Topic,分别是Topic1和Topic2,Topic1有两个分片,Topic2有一个分片,每个分片都是三副本的状态。这里中间有一个Broker同时也是Controller。Controller是整个集群的大脑,负责对副本和Broker进行分配。

image.png

Kafka架构

在集群的基础上,还有一个模块是Zookeeper,这个模块存储了集群的元数据信息,例如副本的分配信息等等,Controller计算好的方案都会放到这个地方。

image.png

一条消息的旅途