网站的维护及建设显示屏东莞网站建设

web/2025/9/26 5:32:21/文章来源:
网站的维护及建设,显示屏东莞网站建设,企业简介范文大全,微山网站建设多少钱从 Zookeeper 数据理解 Kafka 集群工作机制 这一部分主要是理解 Kafka 的服务端重要原理。但是 Kafka 为了保证高吞吐#xff0c;高性能#xff0c;高可扩展的三高架构#xff0c;很多具体设计都是相当复杂的。如果直接跳进去学习研究#xff0c;很快就会晕头转向。所以高性能高可扩展的三高架构很多具体设计都是相当复杂的。如果直接跳进去学习研究很快就会晕头转向。所以找一个简单清晰的主线就显得尤为重要。这一部分主要是从可见的存储数据的角度来理解Kafka 的 Broker 运行机制。这对于上一章节建立的简单模型是一个很好的细节补充。 Kafka 依赖很多的存储数据但是总体上是有划分的。 Kafka 会将每个服务的不同之处也就是状态信息保存到Zookeeper 中。通过 Zookeeper 中的数据指导每个 Kafka 进行与其他 Kafka 节点不同的业务逻辑。而将状态信息抽离后剩下的数据就可以直接存在Kafka 本地所有 Kafka 服务都以相同的逻辑运行。这种状态信息分离的设计让Kafka 有非常好的集群扩展性。 Kafka 的 Zookeeper 元数据梳理 1 、 zookeeper 整体数据 Kafka 将状态信息保存在 Zookeeper 中这些状态信息记录了每个 Kafka 的 Broker 服务与另外的 Broker 服务有什么不同。通过这些差异化的功能共同体现出集群化的业务能力。这些数据需要在集群中各个Broker之间达成共识因此需要存储在一个所有集群都能共同访问的第三方存储中。 Kafka 在 Zookeeper 上管理了哪些数据呢这个问题可以先回顾一下 Kafka 的整体集群状态结构然后再去Zookeeper上验证。 Kafka 的整体集群结构如下图。其中红色字体标识出了重要的状态信息。 Kafka 的集群中最为主要的状态信息有两个。一个是在多个 Broker 中需要选举出一个 Broker 担任Controller角色。由 Controller 角色来管理整个集群中的分区和副本状态。另一个是在同一个 Topic 下的多个Partition中需要选举出一个 Leader 角色。由 Leader 角色的 Partition 来负责与客户端进行数据交互。 这些状态信息都被 Kafka 集群注册到了 Zookeeper 中。 Zookeeper 数据整体如下图 对于 Kafka 往 Zookeeper 上注册的这些节点大部分都是比较简明的。比如 /brokers/ids 下会记录集群中的所有BrokerId /topics 目录下会记录当前 Kafka 的 Topic 相关的 Partition 分区等信息。下面就从这些Zookeeper的基础数据开始来逐步梳理 Kafka 的 Broker 端的重要流程。 例如集群中每个 Broker 启动后都会往 Zookeeper 注册一个临时节点 /broker/ids/{BrokerId} 。可以做一个试验验证一下。如果启动了Zookeeper 和 Kafka 后服务器非正常关机这时 Zookeeper 上的这个临时节点就不会注销。下次重新启动Kafka 时就有可能因为无法注册上这个临时节点而报错。 2 、 Controller Broker 选举机制 在 Kafka 集群进行工作之前需要选举出一个 Broker 来担任 Controller 角色负责整体管理集群内的分区和副本状态。选举Controller 的过程就是通过抢占 Zookeeper 的 /controller 节点来实现的。 当一个集群内的 Kafka 服务启动时就会尝试往 Zookeeper 上创建一个 /controller 临时节点并将自己的brokerid写入这个节点。节点的内容如下 Zookeeper 会保证在一个集群中只会有一个 broker 能够成功创建这个节点。这个注册成功的 broker 就成了集群当中的Controller 节点。 当一个应用在 Zookeeper 上创建了一个临时节点后 Zookeeper 需要这个应用一直保持连接状态。如果Zookeeper长时间检测不到应用的心跳信息就会删除临时节点。同时 Zookeeper 还允许应用监听节点的状态当应用状态有变化时会向该节点对应的所有监听器广播节点变化事件。 这样如果集群中的 Controller 节点服务宕机了 Zookeeper 就会删除 /controller 节点。而其他未注册成功的Broker 节点就会感知到这一事件然后开始竞争再次创建临时节点。这就是 Kafka 基于 Zookeeper的Controller 选举机制。 选举产生的 Controller 节点就会负责监听 Zookeeper 中的其他一些关键节点触发集群的相关管理工作。例如 · 监听 Zookeeper 中的 /brokers/ids 节点感知 Broker 增减变化。 · 监听 /brokers/topics 感知 topic 以及对应的 partition 的增减变化。 · 监听 /admin/delete_topic 节点处理删除 topic 的动作。 另外 Controller 还需要负责将元数据推送给其他 Broker 。 3 、 Leader Partition 选举机制 在 Kafka 中一个 Topic 下的所有消息是分开存储在不同的 Partition 中的。在使用 kafka-topics.sh 脚本创建Topic 时可以通过 --partitions 参数指定 Topic 下包含多少个 Partition 还可以通过 --replication-factors 参数指定每个Partition 有几个备份。而在一个 Partition 的众多备份中需要选举出一个 Leader Partition 负责对接所有的客户端请求并将消息优先保存然后再通知其他Follower Partition 来同步消息。 在理解 Leader Partition 选举机制前需要了解几个基础的概念 · AR: Assigned Repllicas 。 表示 Kafka 分区中的所有副本 ( 存活的和不存活的 ) · ISR: 表示在所有 AR 中服务正常保持与 Leader 同步的 Follower 集合。如果 Follower 长时间没有向Leader发送通信请求 ( 超时时间由 replica.lag.time.max.ms 参数设定默认 30S) 那么这个 Follower就会被提出ISR 中。 ( 在老版本的 Kafka 中还会考虑 Partition 与 Leader Partition 之间同步的消息差值大于参数replica.lag.max.messages 条就会被移除 ISR 。现在版本已经移除了这个参数。 ) · OSR 表示从 ISR 中踢出的节点。记录的是那些服务有问题延迟过多的副本。 其中 AR 和 ISR 比较关键可以通过 kafka-topics.sh 的 --describe 指令查看。 这个结果中 AR 就是 Replicas 列中的 Broker 集合。而这个指令中的所有信息其实都是被记录在 Zookeeper 中的。 接下来 Kafka 设计了一套非常简单高效的 Leader Partition 选举机制。 在选举 Leader Partition 时会按 照 AR 中的排名顺序靠前的优先选举。只要当前 Partition 在 ISR 列表中也就是是存活的那么这个节点就 会被选举成为 Leader Partition 。 例如我们可以设计一个实验来验证一下 LeaderPartiton 的选举过程。 从实验中可以看到当 BrokerId2 的 kafka 服务停止后 2 号 BrokerId 就从所有 Partiton 的 ISR 列表中剔除了。然后Partition2 的 Leader 节点原本是 Broker2 当 Broker2 的 Kafka 服务停止后都重新进行了 Leader选举。Parition2 预先评估的是 Replicas 列表中 Broker2 后面的 Broker1 Broker1 在 ISR 列表中所以他被最终选举成为Leader 。 当 Partiton 选举完成后 Zookeeper 中的信息也被及时更新了。 Leader Partitoin 选举机制能够保证每一个 Partition 同一时刻有且仅有一个 Leader Partition 。 但是是不 是只要分配好了 Leader Partition 就够了呢 4 、 Leader Partition 自动平衡机制 在一组 Partiton 中 Leader Partition 通常是比较繁忙的节点因为他要负责与客户端的数据交互以及向Follower同步数据。默认情况下 Kafka 会尽量将 Leader Partition 分配到不同的 Broker 节点上 用以保证整个集群的性能压力能够比较平均。 但是经过 Leader Partition 选举后这种平衡就有可能会被打破让 Leader Partition 过多的集中到同一个Broker 上。这样这个 Broker 的压力就会明显高于其他 Broker 从而影响到集群的整体性能。 为此 Kafka 设计了 Leader Partition 自动平衡机制当发现 Leader 分配不均衡时自动进行 Leader Partition 调整。 Kafka在进行 Leader Partition 自平衡时的逻辑是这样的他 会认为 AR 当中的第一个节点就应该是 Leader 节点。这种选举结果成为 preferred election 理想选举结果 。 Controller 会定期检测集群的 Partition 平衡情况在开始检测时Controller 会依次检查所有的 Broker 。当发现这个 Broker 上的不平衡的 Partition 比例高于leader.imbalance.per.broker.percentage 阈值时就会触发一次 Leader Partiton 的自平衡。 这是官方文档的部分截图。 这个机制涉及到 Broker 中 server.properties 配置文件中的几个重要参数 另外你也可以通过手动调用 kafka-leader-election.sh 脚本触发一次自平衡。例如 但是要注意这样 Leader Partition 自平衡的过程是一个非常重的操作因为要涉及到大量消息的转移与 同步。并且在这个过程中会有丢消息的可能 。所以在很多对性能要求比较高的线上环境会选择将参数auto.leader.rebalance.enable设置为 false 关闭 Kafka 的 Leader Partition 自平衡操作而用其他运维的方式在业务不繁忙的时间段手动进行Leader Partiton 自平衡尽量减少自平衡过程对业务的影响。 至于为什么会丢消息。下一章节就会给出答案。 5 、 Partition 故障恢复机制 Kafka 设计时要面对的就是各种不稳定的网络以及服务环境。如果 Broker 的服务不稳定随时崩溃 Kafka集群要怎么保证数据安全呢 当一组 Partition 中选举出了一个 Leader 节点后这个 Leader 节点就会优先写入并保存 Producer 传递过来的消息然后再同步给其他Follower 。当 Leader Partition 所在的 Broker 服务发生宕机时 Kafka 就会触发Leader Partition的重新选举。但是在选举过程中原来 Partition 上的数据是如何处理的呢 Kafka 为了保证消息能够在多个 Parititon 中保持数据同步内部记录了两个关键的数据 · LEO(Log End Offset): 每个 Partition 的最后一个 Offset 这个参数比较好理解每个 Partition 都会记录自己保存的消息偏移量。 leader partition 收到并记录了生产者发送的一条消息就将LEO 加 1 。而接下来 follower partition 需要从 leader partition 同步消息每同步到一个消息自己的LEO 就加 1 。通过 LEO 值就知道各个 follower partition 与 leader partition 之间的消息差距。 · HW(High Watermark): 一组 Partiton 中最小的 LEO 。 follower partition 每次往 leader partition 同步消息时都会同步自己的 LEO 给 leader partition 。这样 leader partition 就可以计算出这个 HW 值并最终会同步给各个 follower partition 。 leader partition 认为这个HW 值以前的消息都是在所有 follower partition 之间完成了同步的是安全的。这些安全的消息就可以被消费者拉取过去了。而HW 值之后的消息就是不安全的是可能丢失的。这些消息如果被消费者拉取过去消费了就有可能造成数据不一致。 也就是说在所有服务都正常的情况下当一个消息写入到 Leader Partition 后并不会立即让消费者感知。而是会等待其他Follower Partition 同步。这个过程中就会推进 HW 。当 HW 超过当前消息时才会让消费者感知。比如在上图中4 号往后的消息虽然写入了 Leader Partition 但是消费者是消费不到的。 当服务出现故障时如果是 Follower 发生故障这不会影响消息写入只不过是少了一个备份而已。处理相对简单一点。Kafka 会做如下处理 1. 将故障的 Follower 节点临时提出 ISR 集合。而其他 Leader 和 Follower 继续正常接收消息。 2. 出现故障的 Follower 节点恢复后不会立即加入 ISR 集合。该 Follower 节点会读取本地记录的上一次的HW将自己的日志中高于 HW 的部分信息全部删除掉然后从 HW 开始向 Leader 进行消息同步。 3. 等到该 Follower 的 LEO 大于等于整个 Partiton 的 HW 后就重新加入到 ISR 集合中。这也就是说这个Follower的消息进度追上了 Leader 。 如果是 Leader 节点出现故障 Kafka 为了保证消息的一致性处理就会相对复杂一点。 1. Leader 发生故障会从 ISR 中进行选举将一个原本是 Follower 的 Partition 提升为新的 Leader 。这时消息有可能没有完成同步所以新的Leader 的 LEO 会低于之前 Leader 的 LEO 。 2. Kafka 中的消息都只能以 Leader 中的备份为准。其他 Follower 会将各自的 Log 文件中高于 HW 的部分全部清理掉然后从新的Leader 中同步数据。 3. 旧的 Leader 恢复后将作为 Follower 节点进行数据恢复。 在这个过程当中 Kafka 注重的是保护多个副本之间的数据一致性。但是这样消息的安全性就得不到保障。例如在上述示例中原本Partition0 中的 4 5 6 7 号消息就被丢失掉了。 在这里你或许会有一个疑问这个机制中有一个很重要的前提就是各个 Broker 中记录的 HW 是一致的。 但是 HW 和 LEO 同样是一个分布式的值怎么保证 HW 在多个 Broker 中是一致的呢 6 、 HW 一致性保障 -Epoch 更新机制 有了 HW 机制后各个 Partiton 的数据都能够比较好的保持统一。但是实际上 HW 值在一组 Partition 里并不是总是一致的。 Leader Partition 需要计算出 HW 值就需要保留所有 Follower Partition 的 LEO 值。 但是对于 Follower Partition 他需要先将消息从 Leader Partition 拉取到本地才能向 Leader Partition上报LEO 值。所有 Follower Partition 上报后 Leader Partition 才能更新 HW 的值然后 Follower Partition 在下次拉取消息时才能更新HW 值。所以 Leader Partiton 的 LEO 更新和 Follower Partition 的 LEO 更新在时间上是有延迟的。这也导致了Leader Partition 上更新 HW 值的时刻与 Follower Partition 上跟新 HW 值的时刻是会出现延迟的。这样如果有多个Follower Partition 这些 Partition 保存的 HW 的值是不统一的。当然如果服务一切正常最终Leader Partition 还是会正常推进 HW 能够保证 HW 的最终一致性。但是 当 Leader Partition 出现切换所有的 Follower Partition 都按照自己的 HW 进行数据恢复就会出现数据不 一致的情况 。 因此 Kafka 还设计了 Epoch 机制来保证 HW 的一致性。 1. Epoch 是一个单调递增的版本号每当 Leader Partition 发生变更时该版本号就会更新。所以当有多个Epoch 时只有最新的 Epoch 才是有效的而其他 Epoch 对应的 Leader Partition 就是过期的无用的Leader 。 2. 每个 Leader Partition 在上任之初都会新增一个新的 Epoch 记录。这个记录包含更新后端的 epoch 版本号以及当前Leader Partition 写入的第一个消息的偏移量。例如 (1,100) 。表示 epoch 版本号是 1 当前Leader Partition写入的第一条消息是 100. Broker 会将这个 epoch 数据保存到内存中并且会持久化到本地一个leader-epoch-checkpoint 文件当中。 3. 这个 leader-epoch-checkpoint 会在所有 Follower Partition 中同步。当 Leader Partition 有变更时新的Leader Partition 就会读取这个 Epoch 记录更新后添加自己的 Epoch 记录。 4. 接下来其他 Follower Partition 要更新数据时就可以不再依靠自己记录的 HW 值判断拉取消息的起点。而可以根据这个最新的epoch 条目来判断。 这个关键的 leader-epoch-checkpoint 文件保存在 Broker 上每个 partition 对应的本地目录中。这是一个文本文件可以直接查看。他的内容大概是这样样子的 其中 第一行版本号 第二行表示下面的记录数。这两行数据没有太多的实际意义。 从第三行开始可以看到两个数字。这两个数字就是 epoch 和 offset 。 epoch 就是表示 leader 的 epoch 版本。从0 开始当 leader 变更一次 epoch 就会 1 。 offset 则对应该 epoch 版本的 leader 写入第一条消息的offset。可以理解为用户可以消费到的最早的消息 offset 。 7 、章节总结 Kafka 其实天生就是为了集群而生即使单个节点运行 Kafka 他其实也是作为一个集群运行的。而 Kafka为了保证在各种网络抽风服务器不稳定等复杂情况下保证集群的高性能高可用高可扩展三高做了非常多的设计。而这一章节其实是从可见的Zookeeper 注册信息为入口理解 Kafka 的核心集群机制。回头来看今天总结的这些集群机制其实核心都是为了保持整个集群中Partition 内的数据一致性。有了这一系列的数据一致性保证Kafka 集群才能在复杂运行环境下保持高性能、高可用、高可扩展三高特性。而这其实也是我们去理解互联网三高问题最好的经验。

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

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

相关文章

服务器与网站的关系四库一平台个人信息查询

Cookie是一种在Web浏览器中存储数据的小型文本文件。它通常用于以下应用场景: 用户身份认证:当用户登录网站时,网站可以在用户浏览器中设置一个cookie来标识用户,并在用户访问其他页面时用来验证用户身份。 个性化设置&#xff1…

ks免费刷粉网站推广马上刷在自己的电脑做网站空间

最近声学所东海站邹博士发来了他们最新的浅地层剖面仪—MPAS-100相控参量阵浅地层剖面仪的资料,市场型号GeoInsight,委托Ocean Physics Technology公司销售,地大李师兄的公司负责技术支持。 MPAS-100相控参量阵浅地层剖面仪就是俗称的三维浅…

基层建设期刊在哪个网站被收录网站如何备案 流程

Mlab了解Mlab是Mayavi提供的面向脚本的api,他可以实现快速的三维可视化,Mayavi可以通过Mlab的绘图函数对Numpy数组建立可视化。过程为:.建立数据源.使用Filter(可选)对数据进行加工.添加可视化模块,我们可以通过修改可视化模块的属…

成都 网站建设中国招标投标网

查看小程序根目录中是否存在package.json文件 在项目根目录运行cmd 没有package.json文件输入npm init -y初始化一下,初始化一个包管理 安装MobX npm install --save mobx-miniprogram4.13.2 mobx-miniprogram-bindings1.2.1 小程序菜单栏工具–构建npm 根目录创建store文…

dz仿网站头部资讯类网站模板asp

大家好,我是锋哥。今天分享关于 【使用过 Redis 分布式锁么,它是什么回事?】面试题,希望对大家有帮助; 使用过 Redis 分布式锁么,它是什么回事? 先拿 setnx 来争抢锁,抢到之后&#…

新塘网站seo优化新手学网站建设看什么书好

本文主要介绍两种版本控制工具——SVN和Git的概念,接着会讲到Git的安装,Git常用的命令,以及怎么在Vscode中使用Git。帮助新手小白快速上手Git。 1. SVN和Git介绍 1.1 SVN 集中式版本控制工具,版本库是集中存放在中央服务器的&am…

付费资料网站开发如何学好网站建设

今天,我有一篇简短的文章,内容涉及在Spring Data Cassandra中使用Prepared Statements。 Spring为您提供了一些实用程序,使您可以更轻松地使用“预备语句”,而不必依靠自己使用Datastax Java驱动程序手动注册查询。 Spring代码提供…

怎样设置网站主域名手机网站开发 html5

SQL(Structured Query Language)是结构化查询语言的简称,它是一种数据库查询和程序设计语言,同时也是目前使用最广泛的关系型数据库操作语言。(95%适用于所有关系型数据库) 【 SQL是关系型数据库通用的操作…

广州网站推广找哪里网站开发的技术意义

本文主要是为了记录安装过程,方便后续用到时可及时翻阅,如有不对之处,请各位不吝赐教。因离线安装方法较为常用,故本文主要说明使用离线方式安装jdk的方法,在线安装方法后续补充。第一步:下载jdk官网下载地…

设计电子商务网站方式网络系统设计与管理

首先我们要先解决货源问题,再来谈选品逻辑。初入电商行业,进货渠道建议使用1688。首先1688是国内最大的B2B批发平台,平台服务和安全性都提供了一定的保障,以及丰富的货源选择。你可以浏览不同供应商的产品,对比价格、质…

怎么才能建立一个网站卖东西网站建设评价量规

一、命令简介 ​iostat ​命令用于报告系统中 CPU、磁盘、tty 设备和 CPU 利用率统计信息。 ‍ 需安装 sysstat ​软件包,该软件包提供了一组工具,包括 iostat​、sar​、mpstat ​等,用于系统性能监控和报告。 ‍ 二、命令参数 iostat…

网站建设与网页设计作业凡科做的手机网站可以导出来

HDFS的设计目标和重要特性 设计目标HDFS重要特性主从架构分块存储机制副本机制namespace元数据管理数据块存储 设计目标 硬件故障(Hardware Failure)是常态,HDFS可能有成百上千的服务器组成,每一个组件都有可能出现故障。因此古见检测和自动快速恢复的H…

视频网站开发与制作西安房产网站建设

下载CNTML http://cntlm.sourceforge.net/ 设置用户名密码 打开cntlm.ini文件,在Username,Domain, Password中写入相应的数据。 最后点击cntml.exe开始运行。 设置程序代理 在程序代理中写入127.0.0.1:3128(默认设置)。程序就可以连到外面了。 在公司内使用github只…

网站建设面试常见问题汕头网站优化系统

安装mantisBT 安装docker sudo apt install docker.io -y下载镜像 选择下面的镜像只是因为下载的人多。。。 docker pull xlrl/mantisbt运行镜像 docker run xlrl/mantisbt

浙江网站建设企业名录网站前端语言

转自:https://www.cnblogs.com/stephen2014/p/4579443.html 有删改 1. 前言: 基于DICOM3.0标准的医学图像中,每一张图像中都携带着许多的信息,这些信息主要可以分为Patient, Study, Series和Image四类。每一个DICOM Tag都是…

招聘 网站建设页面设计好吗

原型模式 如果已经有一个对象了,你想创建一个对象,而且对象里面的属性和已经存在的对象的属性差不多,就可以使用clone方法 克隆一个出来 实现原型模式需要实现标记型接口Cloneable -->标记型接口 : 里面没有需要实现的方法(空接口) 一般…

青岛专业建设网站wordpress发表的文章点不开

本影院售票系统主要包括二大功能模块,管理员功能模块和用户功能模块。 (1)管理员模块:系统中的核心用户管理员登录后,通过管理员功能来管理后台系统。主要功能有:首页、个人中心、电影类型管理、场次时间管…

如何建一个自己的网站有什么网站可以兼职做翻译

字符串可能是用到最多的数据类型了,所有标准序列操作(索引、切片、乘法、成员资格检查、长度、最小值和最大值)都适用于字符串 但别忘了字符串是不可变的,因此所有的元素赋值和切片赋值都是非法的。 1.居中效果 默认为空格 可…

做守望同人的网站广广东网站建设

你站在桥上看风景,看风景人在楼上看你。明月装饰了你的窗子,你装饰了别人的梦。喜欢这首诗是因为觉得开源造福了我,我也在尝试贡献自己的力量, 成就他人的同时, 也成就了自己, 贡献开源事业的同时&#xff…

1元云购网站怎样建设找人一起做素材网站

AI学习目录汇总 1、什么是自动微分 自动微分:automatic differentiation,深度学习框架通过自动计算导数,即自动微分,自动微分使系统能够随后反向传播梯度。 计算图:computational graph,根据设计好的模型,系统会构建一个计算图, 来跟踪计算是哪些数据通过哪些操作组合…