消息队列
概念
- 消息(Message)是指在应用间传送的数据
- 消息队列(Message Queue)是一种应用间的通信方式解决方法,确保消息的可靠传递
特征
存储
- 将消息存储在某种类型的缓冲区中,直到目标进程读取这些消息或将其从消息队列中显式移除为止。
异步
- 消息队列通过缓冲消息可以在应用程序中公开一定程度的异步性,允许源进程发送消息并在队列中累积消息,而目标进程则可以挑选消息进行处理
为什么需要消息队列
- 解耦、冗余、扩展性、灵活性、峰值处理能力、可恢复性、顺序保证、异步通信
kafka
概念
- Kafka 是一种高吞吐量的分布式发布/订阅消息系统
- kafka 是 Apache 组织下的一个开源系统
- 可以实时的处理大量数据以满足各种需求场景
kafka角色术语
|----------------------|-----------------------------------------------------------------------------------------------------------|
| 角色 | 说明 |
| Broker(经纪人) | Kafka 集群包含一个或多个服务器,每个服务器被称为 broker |
| Topic(主题) | 每条发布到 Kafka 集群的消息都有一个分类,这个类别被称为 Topic |
| Producer(生产者) | 负责发布消息到 kafka broker |
| Consumer(消费者) | 从kafka broker拉取数据,并消费这些已发布的消息 |
| Partition(分区) | Partition 是物理上的概念,每个 Topic 包含一个或多个 Partition,每个 partition 都是一个有序的队列。partition 中的每条消息都会被分配一个有序的 id(offset) |
| Consumer Group(消费者组) | 可以给每个 Consumer 指定消费组,若不指定消费者组,则属于默认的 group |
| Message(消息) | 通信的基本单位,每个 producer 可以向一个 topic 发布一些消息 |
kafka架构
zookeeper
概念
- ZooKeeper 是一种分布式协调技术,所谓分布式协调技术主要是用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种共享资源,防止造成资源竞争(脑裂)的后果。
工作原理
master启动
- 各节点向 ZooKeeper 中注册节点信息,以编号最小算法选举出一个主节点,另外的节点就是备用节点,由 zookeeper 完成对两个 Master 进程的调度,和了主、备节点的分配和协作。
master故障
- 如果主节点A发生了故障,这时候它在 ZooKeeper 所注册的节点信息会被自动删除,并会再次发出选举
master恢复
- 如果主节点恢复了,它会再次向 ZooKeeper 注册自身的节点信息,但注册的节点信息编号会变小,因此不会称为 master,而是另一台节点继续担任 master
zookeeper架构
zookeeper集群主要角色有 server 和 client,其中 server 又分为 leader、follower 和 observer 三个角色
- Leader:领导者角色,主要负责投票的发起和决议,以及更新系统状态。
- follower:跟随着角色,用于接收客户端的请求并返回结果给客户端,在选举过程中参与投票。
- observer:观察者角色,用户接收客户端的请求,并将写请求转发给 leader,同时同步 leader 状态,但是不参与投票。observer 目的是扩展系统,提高伸缩性。
- client:客户端角色,用于向zookeeper发起请求。
zookeeper在kafka中的作用
- Broker 注册
- Topic 注册
- 生产者负载均衡
- 消费者负载均衡
- 记录消息分区与消费者的关系
- 消息消费进度 Offset 记录
- 消费者注册