kafka 管理节点 Controller 角色分析

news/2024/12/22 21:41:23/

kafka__Controller__0">kafka 管理节点 Controller 角色分析

kafka controller 如何管理分区的创建、状态监测、故障切换、内容复制、如何管控分区副本的状态检测故障切换、数据同步、learder 选举?

Kafka Controller 是 Kafka 集群中的一个关键组件,负责管理分区的创建、状态监测、故障切换、内容
复制等任务。它通过 ZooKeeper 协调和管理这些任务,确保 Kafka 集群的高可用性和一致性。以下是 Kafka Controller 管理分区和副本的详细实现原理和示例代码:

1. 管理分区的创建

当创建一个新的 Topic 时,Kafka Controller 会负责分区和副本的分配。

创建 Topic 示例
# 创建 Topic "my_topic",有 3 个分区和 3 个副本
bin/kafka-topics.sh --create --topic my_topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 3
Controller 处理分区创建的核心代码
// KafkaController.scala
class KafkaController(zooKeeperClient: KafkaZkClient, config: KafkaConfig) {def onPartitionModifications() {val partitions = zkClient.getAllPartitions()partitions.foreach { partition =>val leaderIsrAndControllerEpoch = zkClient.getLeaderAndIsrForPartition(partition)if (leaderIsrAndControllerEpoch.isEmpty) {// 如果没有 Leader,选举新的 LeaderpartitionStateMachine.handleStateChanges(Set(partition), OnlinePartition, Map.empty)}}}
}

2. 分区状态监测

Kafka Controller 通过 ZooKeeper 监控分区的状态,包括分区的 Leader 和 ISR 列表的变化。

分区状态监测的核心代码
class PartitionStateMachine(controller: KafkaController) {def handleStateChanges(partitions: Set[TopicPartition], targetState: PartitionState, assignments: Map[TopicPartition, Seq[Int]

http://www.ppmy.cn/news/1470778.html

相关文章

java面试(企业场景)

设计模式 工厂方法模式 简单工厂模式 简单工厂包括以下角色: 抽象产品:定义了产品的规范,描述了产品的主要特性和功能具体产品:实现或者继承抽象产品的子类具体工厂:提供了创建产品的机会,调用者通过该…

工业用焦炉集气管压力控制状态远程预警方法

工业用焦炉集气管压力控制状态远程预警方法 一、项目提出前状况: 焦化厂焦炉集气管压力是炼焦生产过程中重要的工艺参数(其控制目标80~120Pa),焦炉集气管压力的稳定是焦炉正常生产的重要保证。集气管压力过高会造成焦炉炉体冒烟冒火,污染环境,对操作人员的人身安全构成…

Flink nc -l -p 监听端口测试

1、9999端口未占用 netstat -apn|grep 99992、消息发送端 nc -l -k -p 9999 {"user":"ming","url":"www.baidu1.com", "timestamp":1200L, "score":1} {"user":"xiaohu","url":…

设置 Windows 7 任务栏图标的最佳方法是在 `PyQt4` 中设定应用程序的任务栏图标。

许多开发人员遇到使用 setWindowIcon 仅更改窗口左上角图标而未影响任务栏图标的问题。以下是解决方案,以及相关背景和步骤。 背景 在 Windows 7 中,任务栏图标关联的是“应用程序用户模型”,而不是单个应用程序窗口。Windows 会使用一些启…

vue中的自定义指令

第1部分:引言 在Vue.js中,自定义指令提供了一种非常灵活的方式来扩展Vue的功能。它们允许开发者直接对DOM进行操作,响应数据变化,甚至与其他组件或库集成。 第2部分:Vue自定义指令概述 2.1 什么是Vue自定义指令 Vu…

第四章分类问题

目录 第五题 线性判别分析 (LDA) 概述 假设 公式 优点 缺点 二次判别分析 (QDA) 概述 假设 公式 优点 缺点 比较 第六题 ​编辑 ​编辑 第八题 逻辑回归 1-最近邻 比较与结论 第九题 第十二题 第五题 LDA(线性判别分析)和QDA&…

Docker run命令(3续)

命令格式: docker run [选项] 镜像 运行的容器名称 1.创建运行容器 #简单操作 docker run 镜像标识|镜像名称[:tag] #常用的参数 docker run -d -p 80:80 --name 自定义容器名称 镜像标识|镜像名称[:tag] 选项: -d 代表后台运行 -p 宿主机端口:容器…

面试突击:Java 中的泛型

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 前言 哈喽,大家好,我是 DanMu。今天想和大家聊聊 Java 中的泛型。 什么是泛型? Java 泛型(Generics) 是 JDK 5…