当前位置: 首页 > news >正文

Kafka技术详解[5]: 集群启动

目录

 集群启动

 相关概念

 代理:Broker

 控制器:Controller

 启动ZooKeeper

启动Kafka

 初始化ZooKeeper

 初始化服务

启动任务调度器

 创建数据管理器

创建远程数据管理器

创建副本管理器

 创建ZK元数据缓存

 创建Broker通信对象

创建网络通信对象

 注册Broker节点

 启动控制器

 初始化通道管理器

 初始化事件管理器

 初始化状态管理器

 启动控制器


 集群启动

在搭建完Kafka集群之后,我们需要了解一些基本的概念,并掌握如何正确地启动集群。以下是一些关键的概念介绍以及启动步骤。

 相关概念

 代理:Broker

在使用Kafka之前,我们需要启动Kafka服务进程,这个服务进程通常被称为Kafka Broker或Kafka Server。由于Kafka是一个分布式消息系统,在生产环境中,通常需要多个服务进程组成集群来提供消息服务。因此,每一个服务节点都称为一个Broker,并且为了区分不同的服务节点,每一个Broker都需要有一个唯一的全局ID,即broker.id,这个ID可以在Kafka软件的配置文件server.properties中进行配置。

示例配置如下:

# The id of the broker. This must be set to a unique integer for each broker
# 集群ID
broker.id=0

在我们的Kafka集群中,每个节点都有自己的ID,是一个唯一的整数。

主机kafka-broker1kafka-broker2kafka-broker3
broker.id123
 控制器:Controller

Kafka作为一个分布式消息传输系统,存在多个Broker服务节点,并且采用了常见的主从(Master-Slave)架构。这意味着需要从多个Broker中选出一个用于管理整个Kafka集群的Master节点,这个节点称为Controller。Controller是Kafka的核心组件之一,其主要职责是在Apache Zookeeper的帮助下管理和协调整个Kafka集群。

如果在运行过程中,Controller节点出现故障,Kafka会依赖于ZooKeeper软件来选举出新的Controller,以确保集群的高可用性。

Kafka集群中Controller的基本功能包括但不限于:

  • Broker管理:监听/brokers/ids节点相关的所有变化,包括Broker数量的增减以及Broker对应数据的变化。
  • Topic管理:监听/brokers/topics节点相关的所有变化,包括Topic的新增、修改和删除操作。
  • Partition管理:监听/admin/reassign_partitions/isr_change_notification/preferred_replica_election等节点相关的所有变化。
  • 数据服务:启动分区状态机和副本状态机。

 启动ZooKeeper

Kafka集群含有多个服务节点,而在经典的主从架构中,需要从多个服务节点中选出一个作为集群管理的Master节点,即Controller。如果Controller节点出现故障,则需要从其余的Slave节点中选举出一个新的Controller节点来接管管理功能。

Kafka依赖于ZooKeeper软件来实现Broker节点的选举功能。具体来说,ZooKeeper提供了以下功能支持:

  1. 创建节点:创建一个节点时,可以选择持久化创建或临时创建。持久化创建的节点会一直存在,而临时创建的节点则依赖于客户端的连接状态,一旦客户端断开连接,节点也会被自动删除。
  2. 节点唯一性:ZooKeeper中的节点不允许重复创建,因此多个客户端尝试创建相同的节点时,只有第一个成功创建的客户端可以创建节点。
  3. 监听机制:客户端可以在ZooKeeper节点上设置监听器,以便在节点状态发生变化时收到通知并作出响应。

Kafka利用ZooKeeper的这些特性来实现Controller节点的选举:

  1. 当首次启动Kafka集群时,多个Broker节点会同时启动并尝试连接ZooKeeper,每个Broker节点都会尝试创建一个临时节点/controller
  2. 由于ZooKeeper中一个节点不允许重复创建,因此最终只有一个Broker节点能够成功创建/controller节点,这个Broker节点将成为Kafka集群的Controller,负责管理整个集群。
  3. 其他未成为Controller的Broker节点会在/controller节点上设置监听器,以监听其状态变化。
  4. 如果Controller节点发生故障导致连接中断,/controller节点会被自动删除,此时其他设置了监听器的Broker节点会检测到这一变化,并尝试重新创建/controller节点,成功者将成为新的Controller。

启动Kafka

 初始化ZooKeeper

在Kafka Broker启动期间,首先会创建一个ZooKeeper客户端(KafkaZkClient)以与ZooKeeper进行交互。创建完客户端对象后,它会向ZooKeeper发送创建节点的请求,这些节点都是持久化的。以下是一些重要的节点及其作用:

  • /admin/delete_topics:持久化节点,用于配置待删除的主题。因删除过程可能涉及Broker下线或失败情况,因此需要在Broker重新上线后根据此节点继续删除操作。一旦主题的所有分区数据被删除,则清理该节点。
  • /brokers/ids:持久化节点,存储服务节点ID标识。每当有新的Broker启动,就在该节点下增加子节点。Broker ID必须唯一。
  • /brokers/topics:持久化节点,包含服务节点中的主题详情,如分区和副本。
  • /brokers/seqid:持久化节点,用于自动生成Broker ID。
  • /config/changes:持久化节点,当Kafka元数据发生变化时,在该节点下创建子节点。
  • /config/clients:持久化节点,存储客户端配置,默认为空。
  • /config/brokers:持久化节点,存储服务节点相关配置,默认为空。
  • /config/ips:持久化节点,存储IP配置,默认为空。
  • /config/topics:持久化节点,存储主题配置,默认为空。
  • /config/users:持久化节点,存储用户配置,默认为空。
  • /consumers:持久化节点,记录消费者相关信息。
  • /isr_change_notification:持久化节点,用于通知Controller及时更新ISR列表。
  • /latest_producer_id_block:持久化节点,存储PID块,确保生产者请求得到响应。
  • /log_dir_event_notification:持久化节点,当Broker中的数据路径出现问题时,向ZooKeeper添加通知序号。
  • /cluster/id:持久化节点,存储Kafka集群的唯一ID信息及其版本号。
 初始化服务
启动任务调度器

每个Broker启动时都会创建一个内部调度器(KafkaScheduler)并启动,使用Java中的定时任务线程池ScheduledThreadPoolExecutor来完成节点内部的工作任务。

 创建数据管理器

每个Broker启动时创建数据管理器(LogManager),用于接收消息后的数据创建、查询、清理等处理。

创建远程数据管理器

每个Broker启动时创建远程数据管理器(RemoteLogManager),用于与其他Broker节点进行数据状态同步。

创建副本管理器

每个Broker启动时创建副本管理器(ReplicaManager),负责处理主题的副本。

 创建ZK元数据缓存

每个Broker启动时创建ZK元数据缓存(ZkMetadataCache),用于缓存ZK中的Kafka元数据。

 创建Broker通信对象

每个Broker启动时创建Broker间通信管理器(BrokerToControllerChannelManager),管理Broker与Controller间的通信。

创建网络通信对象

每个Broker启动时创建网络通信对象(SocketServer),用于与其他Broker进行通信,包含Java NIO通信的ChannelSelector对象。

 注册Broker节点

Broker启动时,通过ZK客户端向ZK注册当前Broker节点ID,创建临时节点。如果Broker与ZK的连接断开,则临时节点会被删除。

 启动控制器

控制器(KafkaController)是每个Broker启动时创建的核心对象,用于与ZK建立连接并申请成为整个Kafka集群的管理者。如果申请成功,它会初始化管理器并建立与其他Broker的数据通道。

 初始化通道管理器

创建通道管理器(ControllerChannelManager),维护Controller与集群所有Broker节点间的网络连接,并向Broker发送控制请求及接收响应。

 初始化事件管理器

创建事件管理器(ControllerEventManager),用于管理Controller与集群所有Broker节点间的网络连接,并向Broker发送控制请求及接收响应。

 初始化状态管理器

创建状态管理器(ControllerChangeHandler),可监听/controller节点的操作,并在节点创建、删除或数据变化时执行相应处理。

 启动控制器

控制器对象启动后,向事件管理器发送Startup事件。事件处理线程接收到事件后,通过ZK客户端向ZK申请/controller节点。申请成功后,执行一系列使当前节点成为Controller的操作,包括注册ZooKeeper监听器、删除日志路径变更及ISR副本变更通知事件、启动Controller通道管理器,以及启动副本状态机和分区状态机。

 

相关文章:

Kafka技术详解[5]: 集群启动

目录 集群启动 相关概念 代理:Broker 控制器:Controller 启动ZooKeeper 启动Kafka 初始化ZooKeeper 初始化服务 启动任务调度器 创建数据管理器 创建远程数据管理器 创建副本管理器 创建ZK元数据缓存 创建Broker通信对象 创建网络通信对象 注册Brok…...

记一次教学版内网渗透流程

信息收集 如果觉得文章写的不错可以共同交流 http://aertyxqdp1.target.yijinglab.com/dirsearch dirsearch -u "http://aertyxqdp1.target.yijinglab.com/"发现 http://aertyxqdp1.target.yijinglab.com/joomla/http://aertyxqdp1.target.yijinglab.com/phpMyA…...

[Python学习日记-31] Python 中的函数

[Python学习日记-31] Python 中的函数 简介 语法定义 函数的参数 简介 引子: 你是某公司的一个高级程序员,现在老板让你写一个监控程序,需要24小时全年无休的监控公司网站服务器的系统状况,当 CPU、Memory、Disk 等指标的使用…...

Kafak入门技术详解

抱歉,没有太多的时间进行详细校对 目录 一、Kafka简介 1.消息队列 1.1为什么需要消息队列 1.2消息队列 1.3消息队列的分类 1.4P2P和发布订阅MQ的比较 1.5消息系统的使用场景 1.6常见的消息系统 2.Kafka简介 2.1简介 2.2设计目标 2.3 kafka核心的概念 二…...

X-Spreadsheet:Web端Excel电子表格工具库

在数字化时代,数据管理与分析的重要性日益凸显。传统的电子表格软件如Microsoft Excel和Google Sheets在数据处理方面发挥着重要作用,但在Web端,一款名为X-Spreadsheet的工具库正以其独特的优势逐渐崭露头角。本文将详细介绍X-Spreadsheet&am…...

为什么很多APP取消网页版

厂商为了增加用户黏度把所有的内容都放在 APP 上,京东的网页也搜索不到东西了,就算看到东西要跳转过来还需要先登录一下。 对比亚马逊这类的其他的购物网站,基本上都是网页内容和 APP 的内容都是同步的,网页直接看也可以下单&…...

Kubernetes高级功能

资源配额 什么是资源配额 资源配额,通过 ResourceQuota 对象来定义,对每个命名空间的资源消耗总量提供限制。 它可以限制命名空间中某种类型的对象的总数目上限,也可以限制命名空间中的 Pod 可以使用的计算资源的总上限。 资源配额应用 创建的…...

(作业)第三期书生·浦语大模型实战营(十一卷王场)--书生入门岛通关第1关Linux 基础知识

关卡任务 闯关任务需要在关键步骤中截图: 任务描述 完成所需时间 闯关任务 完成SSH连接与端口映射并运行hello_world.py 10min 可选任务 1 将Linux基础命令在开发机上完成一遍 10min 可选任务 2 使用 VSCODE 远程连接开发机并创建一个conda环境 10min 可选任务 3 创…...

【python爬取网页信息并存储】

爬取网页信息并存储是一个常见的任务,通常涉及以下几个步骤: 发送HTTP请求:使用库如requests来发送HTTP请求获取网页内容。解析网页内容:使用库如BeautifulSoup或lxml来解析HTML内容,提取所需信息。存储数据&#xff…...

TCP、UDP

TCP和UDP的区别 是否面向连接:UDP 在传送数据之前不需要先建立连接。而 TCP 提供面向连接的服务,在传送数据之前必须先建立连接,数据传送结束后要释放连接。 是否是可靠传输:远地主机在收到 UDP 报文后,不需要给出任…...

聊聊暖通空调系统的优化控制方法

目录 暖通空调系统的优化控制方法✈️part1 初版回归网络建模✈️part2 更新的回归网络✈️ 聊聊暖通空调系统的优化控制方法 这篇文章简单分享一下暖通空调(HVAC)领域常常提到的”优化控制“这一概念指的是什么,它控制的是哪些参数&#…...

2024年合肥市职业院校技能大赛(中职组)赛 网络安任务书样题

2024年合肥市职业院校技能大赛--中职组赛 网络安任务书样题 一、竞赛项目简介:二、竞赛注意事项模块A: 理论技能与职业素养模块B: 网络安全事件响应、数字取证调查和应用安全任务一:应急响应任务二:操作系统取证任务三:网络数据包分析任务四:代码审计 模块C:CTF 夺旗…...

制造企业如何提升项目管理效率?惠科股份选择奥博思PowerProject项目管理系统

全球知名的显示方案综合服务商 - 惠科股份有限公司与北京奥博思达成合作,基于奥博思 PowerProject 搭建企业级项目管理平台。满足惠科多产品多业务领域的项目全周期管理。助力企业在技术研发、产品创新等方面继续取得行业领先优势。 同时,PowerProject …...

mTLS(Mutual TLS)即双向传输层安全,是一种安全通信协议,用于在客户端和服务器之间建立双向的身份验证和加密通道。

mTLS(Mutual TLS)即双向传输层安全,是一种安全通信协议,用于在客户端和服务器之间建立双向的身份验证和加密通道。在传统的TLS(Transport Layer Security)中,客户端通常只会验证服务器的身份&am…...

HUAWEI WATCH GT 系列安装第三方应用

文章目录 适用机型概述官方文档从源码构建 hap 文件和对源码签名下载和安装DevEco Studio下载和安装首次启动推荐:设置IDE推荐的兼容版本环境(可选)安装并启用中文菜单插件 使用DevEco Studio打开项目并进行构建构建问题解决一、生成密钥和证…...

Html jquery下拉select美化插件——selectFilter.js

1. Html jquery下拉select美化插件——selectFilter.js jQuery是一个广泛使用的JavaScript库,它简化了DOM操作、事件处理、动画以及Ajax交互,使得开发者能更高效地构建交互式网页。在本案例中,jquery.selectlist.js插件正是基于jQuery构建的&…...

使用ESP8266扫描WiFi列表

一、简介 准备用基于esp8266的nodemcu开发板做一个天气时钟。目前只实现了第一阶段任务的第一点要求。使用arduino编程,在基于esp8266的nodemcu开发板上实现开机自动连接wifi。 这里记录一下使用ESP8266扫描WiFi列表的方法。还需要研究怎么把列表显示在网页上&…...

Java对象访问机制:句柄访问与直接指针访问

在Java虚拟机(JVM)中,对象的访问方式是一个关键的设计选择,它影响着程序的性能和内存管理。JVM规范中只规定了对象引用(reference)必须指向对象,但并没有定义这个引用应该如何定位和访问堆中对象…...

基于SpringBoot实现QQ邮箱发送短信功能 | 免费短信服务

开发学习过程中有个短信发送功能,阿里云腾讯云等等都要money,听说qq邮箱可以实现免费发送邮箱的功能(短信发送的平替),就用这个来实现!!!【找了好多好多方法才成功的啊啊啊啊&#x…...

【MySQL】聚合函数、group by子句

目录 聚合函数 count([distinct] column) sum([distinct] column) avg([distinct] column) max([distinct] column) min([distinct] column) group by子句 1.如何显示每个部门的平均薪资和最高薪资 2.显示每个部门每种岗位的平均薪资和最低薪资 3.显示平均工资低于200…...

详细分析SpringMvc中HandlerInterceptor拦截器的基本知识(附Demo)

目录 前言1. 基本知识2. Demo3. 实战解析 前言 对于Java的基本知识推荐阅读: java框架 零基础从入门到精通的学习路线 附开源项目面经等(超全)【Java项目】实战CRUD的功能整理(持续更新) 1. 基本知识 HandlerInter…...

阳光能源嵌入式面试及参考答案(2万字长文)

管道能够承载的最大传输数据量是多少? 在嵌入式系统中,管道能够承载的最大传输数据量取决于多个因素。 首先,管道的容量受到操作系统的限制。不同的操作系统对管道的大小有不同的规定。一般来说,管道的容量通常是有限的,并且在不同的操作系统版本和配置下可能会有所不同。…...

P10483 小猫爬山

1. #include<bits/stdc.h> using namespace std; //一个记录小猫的重量&#xff0c;sum记录当前小猫的重量之和 int n, w, a[3000],sum[3000],ans; bool cmp(int a,int b) {return a > b; } //x表示小猫当前的编号&#xff0c;cnt表示缆车的数量 void dfs(int x,int …...

技术速递|加入 .NET 智能组件生态系统

作者&#xff1a;Daniel Roth - 首席产品经理 排版&#xff1a;Alan Wang .NET 智能组件是一组示例嵌入式 UI 组件&#xff0c;使得在应用中轻松添加 AI 启用的功能变得更加简单&#xff0c;例如从剪贴板数据自动填写表单、智能文本补全以及语义搜索等场景。.NET 智能组件演示了…...

python/requests库的使用/爬虫基础工具/

requests 是一个 Python 库&#xff0c;它允许你发送 HTTP 请求。这个库需要单独安装&#xff0c;因为它不是 Python 标准库的一部分 1.让我们安装requests 在控制台运行 pip install requests 使用 requests 发送请求 1.GET 请求&#xff1a; import requestsresponse …...

【STM32-HAL库】MQ2烟雾传感器使用(STM32F407ZET6)

MQ2可燃气体传感器介绍 MQ2是一种广谱气体传感器&#xff0c;能够检测多种可燃气体和烟雾。它是一种低成本、高灵敏度的传感器&#xff0c;广泛应用于家庭和工业环境中的气体监测。 原理 MQ2传感器的工作原理基于金属氧化物半导体&#xff08;MOX&#xff09;技术。当传感器暴露…...

玩转指针(3)

一、字符指针变量 字符指针变量&#xff08;如char* p&#xff09;的两种赋值方式 ①将字符类型地址赋值给字符指针变量 int main() {char a w;char* p &a;*p m;return 0; }②将常量字符串赋值给字符指针变量 常量字符串的介绍&#xff1a;用" "引起来的就…...

【CSS in Depth 2 精译_040】6.3 CSS 定位技术之:相对定位(下)—— 用纯 CSS 绘制一个三角形

当前内容所在位置&#xff08;可进入专栏查看其他译好的章节内容&#xff09; 第一章 层叠、优先级与继承&#xff08;已完结&#xff09;第二章 相对单位&#xff08;已完结&#xff09;第三章 文档流与盒模型&#xff08;已完结&#xff09;第四章 Flexbox 布局&#xff08;已…...

HTML流光爱心

文章目录 序号目录1HTML满屏跳动的爱心&#xff08;可写字&#xff09;2HTML五彩缤纷的爱心3HTML满屏漂浮爱心4HTML情人节快乐5HTML蓝色爱心射线6HTML跳动的爱心&#xff08;简易版&#xff09;7HTML粒子爱心8HTML蓝色动态爱心9HTML跳动的爱心&#xff08;双心版&#xff09;1…...

java技能

日志实际使用 log.error(“111”,e);和 System.out.println(ExceptionUtils.getStackTrace(error)); 日志查询 tail -f root.log 前端页面命名&#xff1a; mounted(){ document.title‘设备可视页面’ } 查看ips所属mac nbtstat -a 10.87.236.60 获取容器名称 hostName In…...

wordpress 采集教程/营业推广经典案例

方法一&#xff1a;&#xff08;兼容性好&#xff09; h5 活体检测兼容性比较好的做法是通过input去打开手机系统原生的录像界面 <input type"file" accept"video/*" capture"camcorder" ref"videoFile" change"changeVideo…...

网站被抄袭/推广软文平台

搭建好简单版本的feign客户端与服务端&#xff0c;本文基于简单版本进行扩展&#xff0c;支持客户端支持gzip。 1.修改配置文件开启gizp feign:client:config:default:connectTimeout: 5000readTimeout: 5000loggerLevel: basiccompression:request:enabled: true #开启gz…...

河北省建设厅注册中心网站首页/友链提交入口

首先参考轮子库Linux的实现&#xff0c;Linux实现的主干逻辑如下&#xff1a; Xtensa架构有其特殊性&#xff0c;最核心的一点是所谓的window ABI&#xff0c;通过window ABI减少了函数调用过程中压栈出栈的操作&#xff0c;获取了性能上的提升。不知道是不是由于 Window ABI引…...

惠阳开发网站建设/全媒体广告投放平台

点击上方"蓝字"关注我们&#xff0c;享更多干货&#xff01;索引分裂&#xff08;Index Block Split&#xff09;&#xff0c;就是索引块的分裂。当一次DML操作修改了索引块上的数据&#xff0c;但是旧有的索引块没有足够的空间去容纳新修改的数据时&#xff0c;将分…...

wordpress程序漏洞集合/百度账号个人中心

2019独角兽企业重金招聘Python工程师标准>>> Struts2上传文件默认大小是2M,超过则报错。解决办法是在struts.xml中配置&#xff1a; <struts> <constant name "struts.multipart.maxSize" value "10485760"></constant > <…...

新郑做网站推广/打开百度一下的网址

本文讲三种content-type以及在Jmeter中对应的参数输入方式 第一部分&#xff1a;目前工作中涉及到的content-type 有三种&#xff1a; content-type&#xff1a;在Request Headers里&#xff0c;告诉服务器我们发送的请求信息是哪种格式的。 1 content-type:application/x-www-…...