【消息队列】——Kafka如何保证配置下发的一致性

发布于:2025-06-13 ⋅ 阅读:(19) ⋅ 点赞:(0)


本文来源:极客时间vip课程笔记

一、分布式系统的控制面与数据面

  • 任何一个分布式系统都可以按照功能划分为控制面与数据面。

  • 数据面,可以理解为“业务数据流经的部分”,负责数据流入流出、执行业务逻辑处理数据和存储数据。控制面,顾名思义,管理控制集群的功能都被划分到控制平面,业务数据不会流经到控制面。控制面的主要功能包括:存储集群元数据、指导数据面路由、下发配置和策略以及实现集群高可用等。

  • 以消息中间件为例说明。数据面包括生产者、Broker 和消费者。这些都是消息数据流经的组件,都属于数据面。

    生产者:负责发消息。
    Broker:负责接收、存储和分发消息。
    消费者:负责接收消息。

  • 控制面的功能包括:元数据存储、消息路由、集群管理、高可用、选举、认证等功能。

    元数据存储:负责保存集群主题、分区和副本以及集群配置等元数据。
    消息路由:指导生产者将消息发送给特定的 Broker 节点,指导消费者从特定的 Broker 节点获取消息。
    集群管理:负责主题创建、修改和删除,管理集群中的生产者、消费者和 Broker 节点。
    高可用:监控集群节点的健康情况,必要时执行主从切换。
    选举:负责集群内各种主节点选举,比如主副本选举等。
    认证:负责管理用户的认证和权限控制,确保只有授权的用户才能访问特定的资源。

  • 总体来说,集群的数据面负责实现系统的核心业务功能,控制面作为辅助角色,负责管理和控制数据面。

二、创建主题的过程

  • 在学习创建主题的实现过程之前,我们先回顾一下 Kafka 中主题的数据结构。

  • 在 Kafka 中,主题是收发消息的单元,一个主题下面包含多个分区,我们可以把分区理解为一个中转消息的串行队列,多个分区就可以提升主题的并行度,通过水平扩展来提升消息的吞吐能力。

  • 每个分区物理上由多个副本构成,这些副本被分散到不同的 Broker 节点上。同一个分区的多个副本拥有相同的消息数据,它们通过选举产生一个主副本,负责消息收发。

  • 从副本从主副本实时同步消息数据,但不提供任何服务,它的作用是保证高可用和一致性。当主副本所在的 Broker 宕机时,Kafka 会从可用的从副本中选举出新的主副本继续提供服务。

  • 在 Kafka 集群中创建主题是一个比较复杂的流程,简单来说创建一个新的主题,需要完成如下主要步骤:

    1.创建并保存主题、分区和副本这些元数据。
    2.将分区的副本分配给集群中的多个 Broker。
    3.每个 Broker 在本地创建分区副本的消息和索引文件。
    4.为每个分区选举主副本节点。