【消息队列】——Kafka如何保证配置下发的一致性
目录
- 一、分布式系统的控制面与数据面
- 二、创建主题的过程
- 三、创建主题的实现难点
- 3.1、执行上面这些步骤中如果某个步骤执行失败了,应该如何处理?
- 3.2、如果在执行过程中,执行流程所在的管控节点宕机了,应该如何处理?
- 四、Kafka 如何实现创建主题的过程
- 五、通过异步配置下发达成最终一致
- 六、小结
本文来源:极客时间vip课程笔记
一、分布式系统的控制面与数据面
-
任何一个分布式系统都可以按照功能划分为控制面与数据面。
-
数据面,可以理解为“业务数据流经的部分”,负责数据流入流出、执行业务逻辑处理数据和存储数据。控制面,顾名思义,管理控制集群的功能都被划分到控制平面,业务数据不会流经到控制面。控制面的主要功能包括:存储集群元数据、指导数据面路由、下发配置和策略以及实现集群高可用等。
-
以消息中间件为例说明。数据面包括生产者、Broker 和消费者。这些都是消息数据流经的组件,都属于数据面。
生产者:负责发消息。
Broker:负责接收、存储和分发消息。
消费者:负责接收消息。 -
控制面的功能包括:元数据存储、消息路由、集群管理、高可用、选举、认证等功能。
元数据存储:负责保存集群主题、分区和副本以及集群配置等元数据。
消息路由:指导生产者将消息发送给特定的 Broker 节点,指导消费者从特定的 Broker 节点获取消息。
集群管理:负责主题创建、修改和删除,管理集群中的生产者、消费者和 Broker 节点。
高可用:监控集群节点的健康情况,必要时执行主从切换。
选举:负责集群内各种主节点选举,比如主副本选举等。
认证:负责管理用户的认证和权限控制,确保只有授权的用户才能访问特定的资源。 -
总体来说,集群的数据面负责实现系统的核心业务功能,控制面作为辅助角色,负责管理和控制数据面。
二、创建主题的过程
-
在学习创建主题的实现过程之前,我们先回顾一下 Kafka 中主题的数据结构。
-
在 Kafka 中,主题是收发消息的单元,一个主题下面包含多个分区,我们可以把分区理解为一个中转消息的串行队列,多个分区就可以提升主题的并行度,通过水平扩展来提升消息的吞吐能力。
-
每个分区物理上由多个副本构成,这些副本被分散到不同的 Broker 节点上。同一个分区的多个副本拥有相同的消息数据,它们通过选举产生一个主副本,负责消息收发。
-
从副本从主副本实时同步消息数据,但不提供任何服务,它的作用是保证高可用和一致性。当主副本所在的 Broker 宕机时,Kafka 会从可用的从副本中选举出新的主副本继续提供服务。
-
在 Kafka 集群中创建主题是一个比较复杂的流程,简单来说创建一个新的主题,需要完成如下主要步骤:
1.创建并保存主题、分区和副本这些元数据。
2.将分区的副本分配给集群中的多个 Broker。
3.每个 Broker 在本地创建分区副本的消息和索引文件。
4.为每个分区选举主副本节点。