做交友网站年收入/优化网站排名方法

做交友网站年收入,优化网站排名方法,网站是com好点还是cn,已注册的网站如何注销1. 相关概念 1.1 代理:Broker 使用Kafka前,我们都会启动Kafka服务进程,这里的Kafka服务进程我们一般会称之为Kafka Broker 或 Kafka Server。因为Kafka是分布式消息系统所以再实际的生产环境中,是需要多个服务进程形成集群提供消…

1. 相关概念

1.1 代理:Broker

使用Kafka前,我们都会启动Kafka服务进程,这里的Kafka服务进程我们一般会称之为Kafka Broker 或 Kafka Server。因为Kafka是分布式消息系统所以再实际的生产环境中,是需要多个服务进程形成集群提供消息服务的。所以每一个服务节点都是一个broker,而且在 Kafka 集群中,为了区分不同的服务节点,每一个 broker都应该有一个不重复的全局ID,称之为 broker.id,这个 ID 可以在 kafka 软件的配置文件 server.properties 中进行配置。

############################# Server Basics ######################

# 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

1.2 控制器:Controller

Kafka是分布式消息传输系统,所以存在多个 Broker 服务节点,但是它的软件架构采用的是分布式系统中比较常见的主从(Master - Slave) 架构,也就说需要从多个 Broker 中找到一个用于管理整个 Kafka 集群的 Master 节点,这个节点,我们就称之为 Controller。它是 Apache Kafka 的核心组件非常重要。它的主要作用在 Apache ZooKeeper 的帮助下管理和协调控制整个 Kafka 集群。

在这里插入图片描述

如果在运行过程中,Controller 节点出现了故障,那么Kafka 会依托于 ZooKeeper选举其他的节点作为新的 Controller,让Kafka 集群实现高可用。

在这里插入图片描述

Kafka 集群中 Controler 的基本功能:

Broker 管理

监听 /brokers/ids 节点相关的变化:

  • Broker 输了增加或减少的变化
  • Broker 对应的数据变化

Topic 管理

  • 新增:监听 /brokers/ids 节点相关的变化
  • 修改:监听 /brokers/ids 节点相关的变化
  • 删除:监听 /admin/delete_topics 节点相关的变化

Partation 管理

  • 监听 /admin/reassign_partitions节点相关的变化
  • 监听 /isr_change_notification节点相关的变化
  • 监听 /preferred_replica_election节点相关的变化

数据服务

启动分区状态机和副本状态机

2. 启动ZooKeeper

Kafka 集群中含有多个服务节点,而分布式系统中经典的主从(Master-Slave)架构就要求从多个服务节点中找一个节点作为集群管理Master,Kafka 集群中的这个Master,我们称之为集群控制器 Controller。

在这里插入图片描述

如果此时Controller节点出现故障,它就不能再管理集群功能,那么其他的Slave节点该如何是好呢?

在这里插入图片描述

如果从剩余的两个Slave节点中选一个节点出来作为新的集群控制器是不是一个不错的方案,我们将这个选择的过程称之为:选举(elect)。方案是不错,但是问题就在于选哪一个Slave节点呢?不同的软件实现类似的选举功能都会有一些选举算法,而Kafka是依赖于ZooKeeper软件实现Broker节点选举功能。

在这里插入图片描述

ZooKeeper 如何实现 Kafka 的节点选举呢?这就要说到我们用到 ZooKeeper 的3个功能:

  • 一个是在 ZooKeeper软件中创建节点 Node,创建一个 Node时,我们会设定这个节点时持久化创建,还是临时创建,就是Node 一旦创建后会一直存在,而临时创建,是根据当前的客户端连接创建的临时节点 Node,一旦客户端连接断开,那么这个临时节点 Node 也会被自动删除,所以这样的节点称之为临时节点。
  • ZooKeeper 节点是不允许有重复的,所以多个客户端创建同一个节点,只能有一个创建成功。
  • 另外一个是客户端可以在 ZooKeeper 的节点上增加监听器,用于监听节点的状态变化,一旦监听的节点状态发生变化,那么监听器就会触发响应,实现待监听功能。

Kafka 是如何利用 ZooKeeper 实现 Controller 节点的选举的:

1)第一次启动Kafka 集群时,会同时启动多个 Broker 节点,每一个 Broker 节点就会连接 ZooKeeper,并尝试创建一个临时节点 /controller

2)因为 ZooKeeper 中一个系欸但不允许重复创建,所以多个 Broker 节点,最终只能有一个 Broker 节点可以创建成功,那么这个创建成功的 Broker 节点聚会自动作为 Kafka 集群控制节点,用于管理整个 Kafa 集群。

3)没有选举成功的其他 Slave 节点会创建 Node 监听器,用于监听 /controller 节点的状态变化。

4)一旦Controller 节点出现故障或挂掉了,那么对应的 ZooKeeper 客户端连接就会中断。ZooKeeper 中的 /controller 节点就会自动被删除,而其他那些 Slave 节点因为增加了监听器,所以当监听到 /controller 节点被删除后,就会马上向 ZooKeeper 发出创建 /controller 节点的请求,一旦创建成功,那么该Broker 就变成了新的 Controller 节点了。

现在我们能明白启动 Kafka 集群之前为什么要先启动 ZooKeeper 集群了吧。就说因为 ZooKeeper 可以协助 Kafka 进行集群管理。

3. 启动Kafka

ZooKeeper 已经启动好了,那我们现在可以启动多个 Kafka Broker节点构建 Kafka 集群了。构建的过程中,每一个 Broker 节点就是一个 Java 进程,而在这个进程中,有很多需要 提前准备好,并进行初始化的内部组件对象。

3.1 初始化 ZooKeeper

Kafka Broker 启动时,首先会创建 ZooKeeper 客户端(KafkaZkClinet),用于 ZooKeeper 进行交互。客户端对象创建完成后,会通过该客户端对象向 ZooKeeper 发送创建 Node 的请求,注意,这里创建的Node都是持久化Node。

在这里插入图片描述

节点类型说明
/admin/delete_topics持久化节点配置需要删除的topic,因为删除过程中,可能broker下线,或执行失败,那么就需要在broker重新上线后,根据当前节点继续删除操作,一旦topic所有的分区数据全部删除,那么当前节点的数据才会进行清理
/brokers/ids持久化节点服务节点ID标识,只要broker启动,那么就会在当前节点中增加子节点,brokerID不能重复
/brokers/topics持久化节点服务节点中的主题详细信息,包括分区,副本
/brokers/seqid持久化节点seqid主要用于自动生产brokerId
/config/changes持久化节点kafka的元数据发生变化时,会向该节点下创建子节点。并写入对应信息
/config/clients持久化节点客户端配置,默认为空
/config/brokers持久化节点服务节点相关配置,默认为空
/config/ips持久化节点IP配置,默认为空
/config/topics持久化节点主题配置,默认为空
/config/users持久化节点用户配置,默认为空
/consumers持久化节点消费者节点,用于记录消费者相关信息
/isr_change_notification持久化节点ISR列表发生变更时候的通知,在kafka当中由于存在ISR列表变更的情况发生,为了保证ISR列表更新的及时性,定义了isr_change_notification这个节点,主要用于通知Controller来及时将ISR列表进行变更。
/latest_producer_id_block持久化节点保存PID块,主要用于能够保证生产者的任意写入请求都能够得到响应。
/log_dir_event_notification持久化节点主要用于保存当broker当中某些数据路径出现异常时候,例如磁盘损坏,文件读写失败等异常时候,向ZooKeeper当中增加一个通知序号,Controller节点监听到这个节点的变化之后,就会做出对应的处理操作
/cluster/id持久化节点主要用于保存kafka集群的唯一id信息,每个kafka集群都会给分配要给唯一id,以及对应的版本号

3.2 初始化服务

Kafka Broker 中有很多的服务对象,用于实现内部管理和外部通信操作。

在这里插入图片描述

3.2.1 启动任务调度器

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

3.2.2 创建数据管理器

每一个 Broker 在启动时都会创建数据管理器(LogManager),用于接收到消息后,完成后续的数据创建,查询,清理等处理。

3.2.3 创建远程数据管理器

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

3.2.4 创建副本管理器

每一个 Broker 在启动时都会创建副本管理器(ReplicaManager),用于对主题的副本进行处理。

3.2.5 创建 ZK 元数据缓存

每一个 Broker 在启动时会将 ZK 的关于 Kafka 的元数据进行缓存,创建元数据对象(ZKMetadataCache)

3.2.6 创建 Broker 通信对象

每一个 Broker 在启动时会创建 Broker 之间的通道管理器对象(BrokerToControllerChannelManager),用于管理Broker 和 Controller 之间的通信。

3.2.7 创建网络通信对象

每一个 Broker 在启动时会创建自己的网络通信对象(SockerServer),用于和其他 Broker 之间的通信,其中包含了 Java 用于 NIO 通信的 Channel、Selector 对象。

在这里插入图片描述

3.2.8 注册 Broker 节点

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

3.3 启动控制器

控制器(KafkaController)是每一个 Broker 启动时都会创建的核心对象,用于和ZK 之间建立连接并申请自己为整个 Kafka 集群的 Master 管理者。如果申请成功,那么会完成管理者的初始化操作,并建立和其他 Broker 之间的数据通道接收各种事件,进行封装后交给事件管理器,并定义了 process 方法,用于真正处理各类事件。

在这里插入图片描述

3.3.1 初始化通道管理器

创建通道管理器(ControllerChannelManager),该管理器维护了 Controlelr 和 集群所有Broker 节点之间的网络连接,并向 Broker 发送控制类请求及接受响应。

3.3.2 初始化事件管理器

创建事件管理器(ControllerEventManager)维护了 Controller 和集群所有Broker节点之间的网络连接,并向 Broker 发送控制类请求及接受响应。

3.3.3 初始化状态管理器

创建状态管理器(ControllerChangerHandler)可以监听 /controller 节点的操作,一旦节点创建(ControllerChange),删除(Reelect),数据发生变化(ControllerChange),那么监听后执行相应的处理。

3.3.4 启动控制器

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

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

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

相关文章

python如何随机产生一堆数字并输出

python随机产生一堆数字并输出的方法: 通过for循环语句多次执行for循环里面的“random.randint()”函数产生随机数。将产生的随机数赋值给变量,输出这个变量就可以了 执行结果如下:

vue3与react、 react hooks

一、Vue3新特性:setup、ref、reactive、computed、watch、watchEffect函数、生命周期钩子、自定义hooks函数、toRef和toRefs、shallowReactive 与 shallowRef、readonly 与 shallowReadonly、toRaw 与 markRaw、customRef、provide 与 inject、Fragment、Teleport、…

OpenFeign 学习笔记

OpenFeign 学习笔记 一、基础入门 1.1 简介 OpenFeign 是基于声明式的 REST 客户端,用于简化服务间远程调用。(编程式 REST 客户端(RestTemplate)) 通过接口注解方式定义 HTTP 请求,自动实现服务调用。 …

“沂路畅通”便利服务平台:赋能同城物流,构建高效畅通的货运生态

“沂路畅通”便利服务平台:赋能同城物流,构建高效畅通的货运生态 随着城市化进程的加速,同城物流需求迅速增长,然而货运过程中仍然存在信息不对称、资源浪费、司机服务体验差等痛点。临沂呆马区块链网络科技有限公司(…

Kylin麒麟操作系统服务部署 | NFS服务部署

以下所使用的环境为: 虚拟化软件:VMware Workstation 17 Pro 麒麟系统版本:Kylin-Server-V10-SP3-2403-Release-20240426-x86_64 一、 NFS服务概述 NFS(Network File System),即网络文件系统。是一种使用于…

三参数水质在线分析仪:从源头保障饮用水安全

【TH-ZS03】饮用水安全是人类健康的重要保障,其质量直接关系到人们的生命健康。随着工业化、城市化的快速发展,水体污染问题日益严峻,饮用水安全面临着前所未有的挑战。为了从源头保障饮用水安全,科学、高效的水质监测手段必不可少…

PGlite:浏览器中运行的PostgreSQL

PGlite 是一款基于 WebAssembly(WASM)构建的轻量级 PostgreSQL 数据库引擎,旨在简化开发者在浏览器、Node.js、Bun 或 Deno 环境中运行 PostgreSQL。PGlite 无需复杂的安装或配置,特别适合开发测试、本地化应用及快速原型设计。 一…

【Spring AOP】_使用注解编写AOP程序

目录 1. 以增加方法执行时间为例使用AOP 1.1 引入AOP依赖 1.2 编写AOP程序 2. AOP的重要概念 3. AOP通知类型与通知方法标注 3.1 在通知方法前使用对应注解 3.2 使用Pointcut注解提取公共切点表达式 3.3 跨类使用切点 3.4 切面类排序 1. 以增加方法执行时间为例使用AO…

python网络爬虫开发实战之基本库使用

目录 第二章 基本库的使用 2.1 urllib的使用 1 发送请求 2 处理异常 3 解析链接 4 分析Robots协议 2.2 requests的使用 1 准备工作 2 实例引入 3 GET请求 4 POST请求 5 响应 6 高级用法 2.3 正则表达式 1 实例引入 2 match 3 search 4 findall 5 sub 6 com…

文件上传漏洞与phpcms漏洞安全分析

目录 1. 文件上传漏洞简介 2. 文件上传漏洞的危害 3. 文件上传漏洞的触发条件 1. 文件必须能被服务器解析执行 2. 上传目录必须支持代码执行 3. 需要能访问上传的文件 4. 例外情况:非脚本文件也可能被执行 4. 常见的攻击手法 4.1 直接上传恶意文件 4.2 文件…

2025.3.2机器学习笔记:PINN文献阅读

2025.3.2周报 一、文献阅读题目信息摘要Abstract创新点网络架构实验结论不足以及展望 一、文献阅读 题目信息 题目: Physics-Informed Neural Networks of the Saint-Venant Equations for Downscaling a Large-Scale River Model期刊: Water Resource…

使用IDEA如何隐藏文件或文件夹

选择file -> settings 选择Editor -> File Types ->Ignored Files and Folders (忽略文件和目录) 点击号就可以指定想要隐藏的文件或文件夹

前端基础之脚手架

脚手架结构 目录结构 这里的package.json,存放着我们去执行npm run serve 或是npm run build的脚本文件 package-lock.json中存放着我们使用的外部包的版本类型,相当于maven src下的main.js是整个项目的入口文件 src下的components用于存放组件&#xff…

MacBook上API调⽤⼯具推荐

在当今的软件开发中,API调用工具已经成为了开发者不可或缺的助手。无论是前端、后端还是全栈开发,API的调试、测试和管理都是日常工作中的重要环节。想象一下,如果没有这些工具,开发者可能需要手动编写复杂的CURL命令,…

pgsql行列转换

目录 一、造测试数据 二、行转列 1.函数定义 2.语法 3.示例 三、列转行 1.函数定义 2.语法 3.示例 一、造测试数据 create table test ( id int, json1 varchar, json2 varchar );insert into test values(1,111,{111}); insert into test values(2,111,222,{111,22…

NVIDIA(英伟达) GPU 芯片架构发展史

GPU 性能的关键参数 CUDA 核心数量(个):决定了 GPU 并行处理能力,在 AI 等并行计算类业务下,CUDA 核心越多性能越好。 显存容量(GB):决定了 GPU 加载数据量的大小,在 AI…

《Python实战进阶》No 10:基于Flask案例的Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击

第10集:Web 安全性:防止 SQL 注入、XSS 和 CSRF 攻击 在现代 Web 开发中,安全性是至关重要的。无论是用户数据的保护,还是系统稳定性的维护,开发者都需要对常见的 Web 安全威胁有深刻的理解,并采取有效的防…

【大数据分析 | 深度学习】在Hadoop上实现分布式深度学习

【作者主页】Francek Chen 【专栏介绍】 ⌈ ⌈ ⌈智能大数据分析 ⌋ ⌋ ⌋ 智能大数据分析是指利用先进的技术和算法对大规模数据进行深入分析和挖掘,以提取有价值的信息和洞察。它结合了大数据技术、人工智能(AI)、机器学习(ML&a…

盛铂科技SCP4000射频微波功率计与SPP5000系列脉冲峰值 USB功率计 区别

在射频(RF)和微波测试领域,快速、精准的功率测量是确保通信系统、雷达、卫星设备等高性能运行的核心需求。无论是连续波(CW)信号的稳定性测试,还是脉冲信号的瞬态功率分析,工程师都需要轻量化、…

H5DS编辑器是如何让企业快速构建动态页面

H5DS编辑器核心亮点: 1.拖拽式操作,小白友好:无需设计与代码基础!通过简单拖拽元素、调整文字和动画,即可生成交互式H5页面。内置海量模板和素材库,支持自定义设计风格,轻松适配企业品牌需求。…