Kafka 控制器(Controller)详解:架构、原理与实战

目录

  • Kafka 控制器(Controller)详解:架构、原理与实战
    • 一、控制器的核心职责
      • 1. 元数据管理
      • 2. 分区状态机
      • 3. 故障恢复
      • 4. 集群操作协调
    • 二、传统 ZooKeeper 模式下的控制器
      • 1. 控制器选举机制
      • 2. 控制器与 ZooKeeper 的交互
      • 3. 潜在问题
    • 三、KRaft 模式下的控制器
      • 1. 架构革新
      • 2. 控制器节点配置
      • 3. Raft 协议实现
      • 4. 优势

Kafka 控制器(Controller)详解:架构、原理与实战

Kafka 控制器是集群的核心组件,负责管理元数据、协调分区状态和故障恢复。本文将深入解析控制器的工作原理、配置要点及运维实践,帮助你全面掌握这一关键组件。

一、控制器的核心职责

1. 元数据管理

  • 集群拓扑维护:跟踪所有 broker 的加入与离开,维护 broker 列表。
  • Topic 与分区管理:管理 Topic 的创建、删除、分区扩缩容,记录分区副本分配方案。
  • 状态同步:将元数据变更同步到所有 broker,确保集群视图一致。

2. 分区状态机

  • Leader 选举:当分区 Leader 故障时,控制器负责选举新的 Leader。
  • 副本状态转换:管理副本的状态(如 Online、Offline、New 等),确保数据一致性。

3. 故障恢复

  • Broker 崩溃检测:通过 ZooKeeper(传统模式)或控制器心跳(KRaft 模式)检测 broker 故障。
  • 分区重分配:当 broker 故障时,重新分配受影响的分区副本,保证高可用。

4. 集群操作协调

  • 配置变更:处理动态配置变更(如调整 Topic 参数)。
  • 集群扩容/缩容:协调 broker 加入或离开时的分区迁移。

在这里插入图片描述
左图为 Kafka 架构,元数据在 zookeeper 中,运行时动态选举 controller,由 controller 进行 Kafka 集群管理。
右图为 kraft 模式架构(实验性),不再依赖 zookeeper 集群,而是用三台 controller 节点代替 zookeeper,元数据保存在 controller 中,由 controller 直接进行 Kafka 集群管理。

二、传统 ZooKeeper 模式下的控制器

1. 控制器选举机制

  • 首次启动:第一个成功在 ZooKeeper 上创建 /controller 临时节点的 broker 成为控制器。
  • 故障转移:当控制器所在 broker 崩溃时,/controller 节点消失,其他 broker 监听此节点变化,通过竞争创建新节点成为新控制器。

2. 控制器与 ZooKeeper 的交互

  • 注册监听:控制器监听 ZooKeeper 中的关键路径(如 /brokers/ids/brokers/topics)。
  • 元数据存储:控制器从 ZooKeeper 读取元数据,并同步到其他 broker。
  • 会话管理:控制器通过 ZooKeeper 会话保持活跃状态,会话超时(默认 6 秒)则触发重新选举。

3. 潜在问题

  • 脑裂风险:网络分区可能导致多个 broker 同时认为自己是控制器。
  • 性能瓶颈:ZooKeeper 不适合高频写入,大规模集群中元数据变更可能成为瓶颈。
  • 运维复杂度:需额外维护 ZooKeeper 集群,增加故障点。

三、KRaft 模式下的控制器

1. 架构革新

  • 移除 ZooKeeper 依赖:控制器通过内置的 Raft 协议自主管理元数据,无需外部协调服务。
  • 多节点控制器集群:支持 3-5 个控制器节点组成集群,通过 Raft 达成共识,提升可用性。

2. 控制器节点配置

关键参数:

# server.properties
process.roles=controller  # 或同时作为 broker: broker,controller
controller.quorum.voters=1@controller1:9093,2@controller2:9093,3@controller3:9093
controller.listener.names=CONTROLLER
inter.broker.listener.name=PLAINTEXT

3. Raft 协议实现

  • Leader 选举:控制器集群通过 Raft 协议选举 Leader,负责处理元数据变更。
  • 日志复制:元数据变更记录为 Raft 日志,复制到多数节点后才被提交。
  • 故障恢复:当 Leader 故障时,剩余节点重新选举 Leader,继续服务。

4. 优势

  • 简化架构:减少外部依赖,降低运维复杂度。
  • 高性能:Raft 协议比 ZooKeeper 更适合高频元数据变更。
  • 更强一致性:Raft 提供线性一致性保证,避免脑裂问题。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/914818.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/914818.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【C++基础】#define vs constexpr:C++ 编译期常量的双雄对决(面试高频考点 + 真题解析)

​在 C++ 面试中,#define与constexpr的对比堪称 “元老级” 考点 —— 据统计,在 2023-2024 年的 C++ 工程师面试中,该知识点的出现频率高达 72%,尤其是在字节跳动、腾讯、华为等企业的校招 / 社招中,几乎是必问内容。​ 这两个语法元素都与 “编译期常量” 相关,但背后却…

k8s环境使用Operator部署Seaweedfs集群(上)

作者:闫乾苓 文章目录前言4.1 前置条件4.2 部署seaweedfs-operator4.3 准备operator镜像4.4 使用operator部署Seaweedfs集群4.4.1 部署StorageClass4.4.2 使用StorageClass预先创建PV前言 SeaweedFS Operator是一个Kubernetes Operator,用于自动化部署和…

Git CLI高危任意文件写入漏洞(CVE-2025-48384)PoC已公开

Git CLI(命令行界面)中存在一个高危漏洞,攻击者可利用该漏洞在Linux和macOS系统上实现任意文件写入。目前该漏洞的概念验证(PoC)利用代码已公开。该漏洞编号为CVE-2025-48384,CVSS严重性评分为8.1分&#x…

前端开发中关于表单内容的使用和基础知识

在前边,我们已经写过Web前端开发,Web前端开发,万字详细博文带你HTML,CSS快速入门(上篇)和Web前端开发,一文带你HTML,CSS快速入门(下篇),使用近两万…

linux 安装mysql保姆教程

安装包下载地址: MySQL :: Download MySQL Community Server (Archived Versions) 解压到安装包: tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz 创建Mysql用户组和用户 groupadd mysql useradd -r -g mysql mysql 编译安装并初始化 进入/home/mysql/m…

Android系统的问题分析笔记 - Android上的调试方式 bugreport

在Android开发和系统调试中,bugreport(错误报告) 是一份包含设备详细系统状态、运行日志及应用行为的综合报告,是定位和诊断App崩溃、系统异常、性能问题等的核心工具。无论是开发者排查用户反馈的问题,还是设备厂商调…

GESP2025年6月认证C++四级( 第三部分编程题(2)排序)

参考程序&#xff1a;#include <cstdio> #include <algorithm> #include <vector> #include <iostream> using namespace std;int main() {int n, ans 0;// 读取学生人数scanf("%d", &n);// 用 vector 存储每个学生的身高和体重&#x…

SQL155 大小写混乱时的筛选统计

SQL155 大小写混乱时的筛选统计 题目理解 假设我们有一个考试系统数据库&#xff0c;里面有&#xff1a; exam_record表&#xff1a;记录学生考试作答情况examination_info表&#xff1a;记录考试信息&#xff0c;包括每个考试的类别标签(tag) ​问题描述​&#xff1a; 有…

无人机图像中的小目标检测新利器:深入解析 LAM-YOLO 模型

【导读】 随着无人机技术的发展&#xff0c;从交通监控到农业测绘&#xff0c;各类任务中对“空中视角下的小目标检测”需求激增。然而&#xff0c;由于无人机拍摄视角多变、目标尺寸微小、环境光照复杂等因素&#xff0c;传统检测模型常常出现“漏检”“误检”问题。 LAM-YO…

Rust 基础大纲

Rust 基础大纲1.Summary安装教材2 Rust 源1.Summary 安装 https://www.rust-lang.org/zh-CN/tools/install curl --proto https --tlsv1.2 -sSf https://sh.rustup.rs | sh# 安装完成后&#xff0c;验证是否成功 rustc -V cargo -V# 创建项目 cargo new my_project # 编译项…

PostgreSQL 大数据量(超过50GB)导出方案

1.正常导出导出指定库./pg_dump -d test_db -p 2360 > /home/softwares/postgresql/test_db.sql导出指定表./pg_dump -p 2360 -U postgres -t test_schema.test_table test_db > /home/softwares/postgresql/m.sql-t参数说明&#xff0c;-t test_schema.test_table test…

终端安全最佳实践

什么是终端安全&#xff1f;终端安全通过保护组织中的设备的过程&#xff0c;来保护公司网络免受漏洞和网络攻击。主要的任务包括&#xff1a;更新终端补丁、遵循相关安全标准和要求、满足各种合规性策略设置等等。终端安全和防病毒之间的区别是什么&#xff1f;杀毒软件可以帮…

【UE4 UE5】UE设置屏幕分辨率 全屏、窗口设置的方法

1.在蓝图中设置如下 设置全屏模式蓝图节点可以选择全屏或者窗口 2.通过执行控制台命令设置 注意:"x"是英文字母x w:窗口 f:全屏 3.通过修改项目配置文件设置。 打开 项目路径\Saved\Config\Windows下的GameUserSettings.ini文件 在文件中进行相应修改 ​…

非控制器(如 Service、工具类)中便捷地获取当前 HTTP 请求的上下文信息

非控制器&#xff08;如 Service、工具类&#xff09;中便捷地获取当前 HTTP 请求的上下文信息 在 Spring 框架的 Web 开发中&#xff0c;RequestContextHolder 是一个非常实用的工具类&#xff0c;它的主要作用是在非控制器&#xff08;如 Service、工具类&#xff09;中便捷地…

Excel处理控件Aspose.Cells教程:使用 Python 在 Excel 中创建甘特图

时间轴上的任务可视化有助于更好地管理项目。本文将学习如何使用Aspose.Cells for Python 通过 .NET在 Excel 中创建甘特图。只需几行代码&#xff0c;即可将简单的任务数据转换为动态清晰的可视化时间轴&#xff0c;非常适合用于报表、仪表板和规划文档。 Aspose.Cells官方试…

【RK3568 平台I2C协议与AGS10驱动开发】

RK3568 平台I2C协议与AGS10驱动开发一、I2C 总线协议基础二、I2C 通信过程详解三、AGS10 传感器概述四、AGS10驱动开发1. 硬件连接2. 设备树&#xff08;DTS&#xff09;配置3. 内核驱动开发五、调试与验证六、总结引言在嵌入式系统开发中&#xff0c;传感器数据采集是常见需求…

arm版本的ubuntu安装git或者vim等方法

看起来你在基于 ARM 的 Ubuntu 系统上安装 Vim 时遇到了问题&#xff0c;错误提示为“E: 无法定位软件包 vim”。这通常是因为系统的软件包列表未更新&#xff0c;或者该软件包在你检查的标准软件源中不可用。以下是通常可以解决这个问题的方法&#xff1a;1. 更新软件包列表“…

MFC扩展库BCGControlBar Pro v36.2新版亮点:可视化设计器升级

BCGControlBar库拥有500多个经过全面设计、测试和充分记录的MFC扩展类。 我们的组件可以轻松地集成到您的应用程序中&#xff0c;并为您节省数百个开发和调试时间。 BCGControlBar专业版 v36.2已全新发布了&#xff0c;在这个版本中添加了一个新的扩展器控件、改进了网格和报表…

小杰学C(eleven day)——莫道浮云终蔽日,总有云开雾散时。

1.结构体&#xff08;1&#xff09;内容定义&#xff1a;1.用户自定义的数据类型2.可以包含若干不同数据类型&#xff08;可相同&#xff09;的成员变量3.这些数据项组合起来反应某一信息格式&#xff1a;struct 结构体名 (用户自定义的数据类型){数据类型 成员变量1;数据类型 …

海豚远程控制APP:随时随地,轻松掌控手机

在快节奏的现代生活中&#xff0c;我们常常需要在不同设备之间切换&#xff0c;管理手机也变得越来越重要。无论是远程办公、远程学习还是日常生活中对手机的管理&#xff0c;一款高效、便捷的远程控制软件都能极大地提升我们的效率。海豚远程控制APP正是这样一款功能强大的手机…