分布式异步任务处理组件(五)

节点上线和下线的逻辑--

节点下线分为两种--心跳失败主动或被动和主节点断开连接,但是节点本身没有发生重启;第二种就是节点宕机重启--其实这两中情况下处理逻辑都是一样的,只是节点本身如果还能消费到kafka的时候可以继续执行任务但是不能从kafka中拉取新的消息,因为此时自己无法获取消息的投票信息,在执行的过程中可以提交;执行完之后还没有重新加入集群则应该断开和kafka的链接---

可以不和kafka断开连接的原因是此时自己和kafka的消息不回被其他节点消费,所以执行队列中的任务可以正常执行并提交;但是存疑队列中无法举证所以只能等待----具体看是否要等待执行完;--主要综合考虑存疑队列;

消息消费模型--

如何保证一个消息只会被执行一次---从几个方面保证--一个消息最多可能存在于两个节点中(除非多个节点都在执行消息的时候失败,这种概率是很小的),消息出现在其他节点中的情况--partition重分配,则该节点执行队列中的消息可能被其他节点消费,但是只会进入到其他节点的存疑队列中,而不是直接被执行,存疑队列通过举证和执行检查策略保证该消息没有即将被执行或者正在被执行或者最终被执行完成;才可以重新执行;---有一种情况,该节点开始执行任务了,但是此时断开和主节点的链接,而恰好其他节点对该任务举证,这会导致该任务有可能被其他节点执行---这里需要在每个任务执行前向主节点汇报;

几个确定性机制可以保证消息不会被重复执行--

  1. 投票进入执行队列中的任务肯定可以被执行---在和主节点正常连接的情况下;
  2. 和主节点断开连接的节点不能继续执行任务,可能错过举证,需要清空执行队列;
  3. 任务执行前需要向主节点汇报--保证该任务在执行过程中和主节点断开连接不会让该任务被其他执行;---断开连接就清空执行队列保证未执行的任务在断开连接之后可以被其他节点执行,但是自己不会再重复执行;
  4. 存异队列中的任务必须通过举证--通过举证则证明主节点运行正常;
  5. 举证通过保证没有节点即将执行该任务或者正在执行该任务;--对于即将执行的任务可以采取重新分配的策略;或者使用监听策略;正在执行的任务使用超时+检查来确定该任务的最终执行情况;
  6. 一种情况---节点A准备执行任务a,向主节点发送了a的prepare信息,开始执行,但是在执行过程中主节点失败,重新选举,导致a的prepare信息丢失,同时节点A没有加入到新集群中--没有和新的主节点建立连接,此时节点B对任务a发起举证,会导致a举证通过,(举证完成之后运行检查策略节点A没有执行完,此时节点B运行检查策略也会通过)节点B准备执行a,这种情况下会导致任务a同时被AB两个节点执行----这种情况无法避免,通过时差来保证,或者全节点同步prepare信息来保证,但是会影响性能,可以想办法降低概率来保证---目前只有这种情况会导致同一个任务被多个节点执行;
  7. 未开始执行的任务不会导致这种情况发生--因为节点和主节点断开连接之后不会执行新的任务,而是要重新举证才可以执行;而通过举证的消息

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

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

相关文章

分布式异步任务处理组件(四)

基于zookeeper的HA集群设计思路-- 各个节点都可以消费任务,但是由主节点来投票;主节点通过注册zookeeper的临时节点来选举--主节点需要同步从节点的信息正常工作机制--各个节点(包括主节点本身)在执行任务之前询问主节点&#xf…

IntelliJ IDEA 2023.2 最新变化

主要更新 AI Assistant 限定访问 Ultimate 在此版本中,我们为 IntelliJ IDEA 引入了一项重要补充 – AI Assistant。 AI Assistant 当前具备一组由 AI 提供支持的初始功能,提供集成式 AI 聊天,可以完成一些任务,例如自动编写文档…

【计算机视觉】BLIP:统一理解和生成的自举多模态模型

文章目录 一、导读二、背景和动机三、方法3.1 模型架构3.2 预训练目标3.3 BLIP 高效率利用噪声网络数据的方法:CapFilt 四、实验4.1 实验结果4.2 各个下游任务 BLIP 与其他 VLP 模型的对比 一、导读 BLIP 是一种多模态 Transformer 模型,主要针对以往的…

5、Kubernetes核心技术 - Controller控制器工作负载

目录 一、Deployments - 控制器应用 二、Deployment升级回滚和弹性收缩 2.1、创建一个 1.14 版本的 pod 2.2、应用升级 2.3、查看升级状态 2.4、查看历史版本 2.5、应用回滚 2.6、弹性伸缩 三、StatefulSet - 有状态应用 四、DaemonSet - 守护进程 五、Job - 单次任…

小红书JAVA后端一面汇总总结

小红书 2 年社招 Java 后端一面的面经,面试的风格是从一个知识一层一层深入问到底层。 从 Java IO,问到 socket 底层。从 Java 内存,问到操作系统内存。所以学习知识的时候,不要只 看八股文,还是需要从点到面一层层去掌握, 才能比较好应对这类的面试场景。 问题记录 自我…

Linux近两年高危漏洞修复过程记录

一、背景 2023年8月份,面对即将到来的“大运会”、“亚运会”,今年的例行安全护网阶段也将迎来新的挑战和时刻,为此相关部门发布了国家级实战攻防演练已进入紧急「备战」时刻!这里我们主要说一下Linux OS层面的漏洞处理&#xff0…

SpringBoot之logging基于application多环境配置文件配置日志输出到文件(非spring-logback.xml)

一般情况:日志文件按yyyy-MM-dd分文件夹,%i按单个日志文件大小切割文件并用索引命名。 开发环境(dev):只输出到控制台,不输出到文件,日志级别为INFO。测试环境(test)&am…

spring5源码篇(12)——spring-mvc请求流程

spring-framework 版本:v5.3.19 文章目录 一、请求流程1、处理器映射器1.1、 RequestMappingHandlerMapping1.2、获取对应的映射方法1.3、添加拦截器 2、获取合适的处理器适配器3、通过处理器适配器执行处理器方法3.1、拦截器的前置后置3.2、处理器的执行3.2.1 参数…

React哲学——官方示例

在本篇技术博客中,我们将介绍React官方示例:React哲学。我们将深入探讨这个示例中使用的组件化、状态管理和数据流等核心概念。让我们一起开始吧! 项目概览 React是一个流行的JavaScript库,用于构建用户界面。React的设计理念是…

QuantMania!《快乐机器学习》和《Python 从入门到入迷》作者,FRM,CAIA

王的机器主理人 王圣元 (FRM, CAIA) 某加密货币公司 Head of Quant 冬海集团 SeaMoney 建模负责人 八方咨询 量化总监 新加坡国立大学金融数学硕士 新加坡国立大学量化金融学士 《快乐机器学习》的作者 《Python 从入门到入迷》的作者 第一本书 《快乐机器学习》 第二本书《Pyt…

【图论】BFS中的最短路模型

算法提高课笔记 目录 单源最短路迷宫问题题意思路代码 武士风度的牛题意思路代码 抓住那头牛题意思路代码 多源最短路矩阵距离题意思路代码 双端队列BFS电路维修题意思路代码(加了注释) BFS可以解决边权为1的最短路问题,下面是相关例题 单源…

css如何创建视频背景

要在网页中创建一个视频背景,你可以使用CSS和HTML来实现。以下是一种简单的方法: 1.首先,准备你的视频文件:将你的视频文件(通常是.mp4格式)准备好,并确保它已经上传到你的网站或服务器上。 2…

解决ComposerStaticInit类重复加载问题

Tp5中composer安装phpoffice后报错 Cannot declare class Composer\Autoload\ComposerStaticInit6c9266e89aa536667bf36f59ad8e6e6b, because the name is already in use 错误原因: 使用ThinkPHP5框架的项目,在引用某些包的时候,可能会通过其它包&…

位图和 DC 有什么特别之处?

相信设备上下文 (DC, Device Context) 对你来说,应该很熟悉。 基本工作方式是,你可以通过调用 SelectObject 来将画笔(Pen),画刷(Brush),字体(Font)和位图(Bitmap)等这些对象选入设备上下文中,但是,这里的位…

初学HTML:采用CSS绘制一幅夏天的图

下面代码使用了HTML和CSS来绘制一幅炎炎夏日吃西瓜的画面。其中&#xff0c;使用了伪元素和阴影等技巧来实现部分效果。 <!DOCTYPE html> <html> <head><title>炎炎夏日吃西瓜</title><style>body {background-color: #add8e6; /* 背景颜…

小程序原生实现左右锚点联动

效果 wxml <view classbox><scroll-view scroll-y scroll-with-animation style"width:25%"><view classnav><view wx:for"{{navList}}" wx:keyindex class"title {{index active ?select:}}"data-index{{index}} bin…

面试题 - 设计模式

文章目录 一、设计模式的六大原则二、 设计模式有哪些&#xff0c;简要叙述&#xff1f;三、MVC的理解四、代理委托模式五、观察者模式1. KVO原理&#xff1a;2. KVO的详细流程3. 如何手动触发KVO&#xff1a;4. swift的kvo&#xff1a; 六、工厂模式七、单例模式八. KVC实现原…

html滚动下滑分页

手机端网页滑动触发分页 window.addEventListener(scroll, handleScroll);var page 1;function handleScroll(arg) {var clientHeight document.documentElement.clientHeight;//客户区高度var scrollHeight document.documentElement.scrollHeight;//没滚动下原内容高度var…

Windows下安装Hive(包安装成功)

Windows下安装Hive Hive与Hadoop的版本选择很关键&#xff0c;千万不能选错&#xff0c;否则各种报错。一、Hive下载1.1、官网下载Hive1.2、网盘下载Hive 二、解压安装包&#xff0c;配置Hive环境变量2.1、环境变量新增&#xff1a;HIVE_HOME2.2、修改Path环境变量&#xff0c;…

js实现push重复的数组拿到最新的数据

2023.8.1今天我学习了如何使用js把重复push的数组只取最新的。 如&#xff1a;当我们使用input方法需要对数据进行叠加的时候可能会对同一条数据进行多次操作。 如&#xff1a; data:[ {id:1,name:张三},{id:2,name:李四},{id:1,name:张三三} ] 通过这个数组我们会发现id为…