消息队列是什么?
消息队列(Message Queue):指的是保存消息的一个容器,本质是一个队列。需要支持高吞吐,高并发,并且高可用。
消息队列的发展历程
业界消息队列对比
- Kafka:分布式的,分区的,多副本的日志提交服务,在高吞吐场景下发挥比较出色。
- RocketMQ:低延迟,强一致,高性能,高可靠,万亿级容量和灵活的可扩展性,在一些实时场景中运用较广泛。(阿里)
- Pulsar:下一代云原生分布式消息流平台,集消息,存储,轻量化函数式计算为一体,采用存算分离的架构设计。(鹅厂)
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群。(字节)
消息队列--Kafka
使用场景
如何使用Kafka
- 第一步,创建一个Kafka集群。
- 第二步,在这个集群中创建一个Topic,并且设置好分片数量。
- 第三步,引入对应语言的SDK,配置好集群和Topic等参数,初始化一个生产者,调用Send方法,将你的Hello World发送出去。
- 第四步,引入对应语言的SDK,配置好集群和Topic等参数,初始化一个消费者,调用Poll方法,你将收到刚刚发送的Hello World。
Kafka中的基本概念
- 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。
数据复制
下面这幅图代表Kafka中副本的分布图,图中Broker代表每一个Kafka的节点,所有的Broker节点最终组成了一个集群。整个图表示,图中整个集群,包含了4个Broker机器节点,集群中有两个Topic,分别是Topic1和Topic2,Topic1有两个分片,Topic2有一个分片,每个分片都是三副本的状态。这里中间有一个Broker同时也是Controller。Controller是整个集群的大脑,负责对副本和Broker进行分配。
Kafka架构
在集群的基础上,还有一个模块是Zookeeper,这个模块存储了集群的元数据信息,例如副本的分配信息等等,Controller计算好的方案都会放到这个地方。