目录:
消息队列核心原理(一):消息中间件与协议介绍
消息队列核心原理(二):Kafka核心原理
消息队列核心原理(三):RabbitMQ核心原理
Kafka核心概念
- Broker
- Kafka服务端程序,一个节点就是一个Broker
- 存储topic数据,就是主题数据,记录一类数据的概要等信息
- Producer
- 创建消息,发送到mq
- 发送消息到topic
- Consumer
- 消费队列的消息
- Consumer Group
- 一个topic可以发送给不同的组,但是一个组中只能有一个consumer消费消息。
- Topic
- 消息的主题,或者叫类别,每个消息都有自己的主题
- Partition
- 是Kafka中存储数据的基本单元,每一个topic至少有一个partition且partition是有序的。
- 一个topic的多个partition,分布在集群的多个server上
- 消费者数量一定 ≤ \le ≤ partition数量
- replication
- 副本,每个partition有多个replication,副本数据是一样的
- 默认为1,即没有副本只有本体
- 副本数量最多为broker数量(这个好理解,多的话放哪?)
- replication leader、replication follower
- 我们想想之前的Redis主从的概念,是一个意思。不赘述。但是后面我会说不同的地方。
- replication manager
- 负责副本状态的切换
- offset
- 每一个consumer都会为他消费的partition记录一个offset,下次从这个offset开始读
- Kafka把offset保存在consumer group里
Kafka特点
- 支持多订阅者,每个订阅者都要有一个partition,所以订阅者数量 ≤ \le ≤partition数量
- 吞吐量大,延迟低。
- 高并发。同时可以存在数千客户端读写
- 容错性强。
- 扩展性强,支持热扩展。
Kafka并非读写分离式的主从,所以这一点和Redis不同。 因为Kafka应用的场景是高读写,而读写分离的主从场景是高读低写。Kafka同步机制是利用PULL方法,以后我们会提到,这种方法放弃了高一致性,转而面向高可用和分区容错。