什么是消息队列
消息队列(MQ),指保存消息的一个容器,本质是个队列。但这个队列呢,需要支持高吞吐,高并发,并且高可用。
1. 业界消息队列对比
- Kafka:分布式的、分区的、多副本的日志提交服务,在高吞吐场景下发挥较为出色
- RocketMQ:低延迟、强一致、高性能、高可靠、万亿级容量和灵活的可扩展性,在一些实时场景中运用较广
- Pulsar:是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体、采用存算分离的架构设计
- BMQ:和Pulsar架构类似,存算分离,初期定位是承接高吞吐的离线业务场景,逐步替换掉对应的Kafka集群
1.1 基本概念
Topic可以理解为每个不同应用场景就是一个不同的Topic,其中的分区消息可以并发处理,互不干涉。
不同的ConsumerGroup中的Consumer可以并发的访问,互不干涉。
2.消息队列-Kafka
应用场景: 日志信息处理,程序状态的采集,用户行为的处理
2.1 如何使用 Kafka
2.2 基本概念:Offset(偏移量)
Offset: 消息在 partition 内的相对位置信息,可以理解为唯一ID,在 partition 内部严格递增。保证消息在同一个partition 内部顺序执行.
每个partition内部可以存多个消息,每个消息对应一个Offset.
2.2 基本概念:Replica
每个分片(partition)有多个副本( Replica),Leader Replica 将会从 ISR 中选出。多个副本分布在不同的集群上
生产者将数据写入到Leader Replica(后面简写为Leader),消费者读取数据也是从Leader.
Follower从Leader拉取数据,尽可能地与Leader保持一致,当差距过大时就会被踢出 ISR ,如图中Replica3,当Leader副本所在的服务器宕机时,在 ISR 中重新选择一个副本作为Leader.
2.3数据复制
topic(主题):每一类的消息称为一个 Topic,kafka可以
boker(代理):即Kafka 服务实例,生产者发布的消息将保存在 Broker 中,消费者将从 Broker 中拉取消息进行消费.
controller相当于集群的"大脑",负责对所有副本和broker进行分配.如下图,以下是由多个broker构成的集群,controller对T1的P1和P2,T2的P1和P2进行分配.
2.4 Kafka 架构
在集群的上层还有ZooKeeper,与controller相配合,负责存储集群元信息,包括分区分配信息等
写在最后
未完待续... (找个时间再更新)