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

news/2025/2/12 8:18:56/

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

节点下线分为两种--心跳失败主动或被动和主节点断开连接,但是节点本身没有发生重启;第二种就是节点宕机重启--其实这两中情况下处理逻辑都是一样的,只是节点本身如果还能消费到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.ppmy.cn/news/1004184.html

相关文章

pycharm——漏斗图

import pyecharts.options as opts from pyecharts.charts import Funnel""" Gallery 使用 pyecharts 1.1.0 参考地址: https://echarts.apache.org/examples/editor.html?cfunnel目前无法实现的功能:1、暂时无法对漏斗图的长宽等范围操作进行修改 ""…

LoVT:医学图像与报告的局部表征联合学习

论文:https://arxiv.org/abs/2112.02889 Github:GitHub - philip-mueller/lovt: Localized representation learning from Vision and Text (LoVT) 摘要 摘要对比学习已被证明对未标记数据的预训练图像模型是有效的,在医学图像分类等任务中…

jQuery编程(jQuery概述、基本使用、常用API(jQuery选择器、样式操作、效果、属性操作、内容文本值、元素操作、尺寸位置操作))

1.概述 1.1 JavaScript库 JavaScript库:即一个js文件,是一个封装好的特定的集合(方法和函数)。从封装一大堆函数的角度理解库,就是在这个库中,封装了很多预定好的函数在里面,比如动画animate、…

极光笔记 | 浅谈企业级SaaS产品的客户成长旅程管理(上)—— 分析篇

本文作者:陈伟(极光用户体验部高级总监) “企业级SaaS产品与C端互联网产品特征差异很大,有些甚至是截然相反,这些特征也会成为后续客户成长旅程的重要影响变量。本文就如何设计并服务好企业级SaaS产品客户成长旅程进行…

机器学习05-数据准备(利用 scikit-learn基于Pima Indian数据集作数据预处理)

机器学习的数据准备是指在将数据用于机器学习算法之前,对原始数据进行预处理、清洗和转换的过程。数据准备是机器学习中非常重要的一步,它直接影响了模型的性能和预测结果的准确性 以下是机器学习数据准备的一些常见步骤: 数据收集&#xff…

自动化立体仓库需要的设备有哪些?

随着科技的不断进步以及企业的需求不断扩大,许多仓储型的企业都选择了数字化转型来适应大环境,。自动化立体仓库就是其中之一。今天,就让我们一起来了解一下自动化立体仓库。 概念 自动化立体仓库是一种现代化的仓储系统,具有高度…

Python3 高级教程 | Python3 正则表达式(一)

目录 一、Python3 正则表达式 (一)re.match函数 (二)re.search方法 (三)re.match与re.search的区别 二、检索和替换 (一)repl 参数是一个函数 (二)comp…

【css】css实现字母大小写转换

text-transform 属性用于指定文本中的大写和小写字母。 uppercase&#xff1a;将字母转为大写lowercase&#xff1a;将字母转为小写capitalize&#xff1a;将每个单词首字母转为大写 代码&#xff1a; <style> p.uppercase {text-transform: uppercase; }p.lowercase …