分布式异步任务处理组件(四)
基于zookeeper的HA集群设计思路--
- 各个节点都可以消费任务,但是由主节点来投票;
- 主节点通过注册zookeeper的临时节点来选举--主节点需要同步从节点的信息
- 正常工作机制--各个节点(包括主节点本身)在执行任务之前询问主节点,主节点通过布隆过滤器判断该任务是否被执行;
- 如果该任务被执行过,则从节点将该任务加入存疑队列中--主节点不能保证一定被执行;任务被消费的几种可能--
- 新增节点,导致partition重分配--通过举证即可完成校验;
- 节点失败,导致partition重分配--举证无法校验;执行该任务的节点下线;需要运行任务检查策略--消息幂等性校验;
- 存疑队列中的任务间隔时间需要其他节点举证--是否有其他节点准备执行或者正在执行或者执行过但是没有来得及提交;
- 其他节点举证成功则丢弃该消息;其他节点举证失败则运行检查策略;
- 节点任务执行成功则向kafka提交消息;
- kafka提交失败说明此时发生了partition重分配,则节点向主节点提交消息,主节点负责处理该未提交的消息;
- 主节点投票逻辑--
- 主节点自己判断是否通过--可以通过则更新布隆过滤器并通知其他节点,返回所有节点的并集;
- 如果投票过程中某个节点下线;主节点主动和该节点断开连接;
- 节点下线逻辑---
- 网络延迟--
- 节点宕机--
- 节点下线需要主节点处理--主节点断开和该节点的链接
- 节点上线--
- 如果没有主节点,则该节点抢占leader,但是observer节点会被篡位--使用篡位机制还是同步机制--进入选举状态
- 如果存在主节点,向主节点发起连接请求,主节点会同步自己的布隆过滤器数据;同步完成即可加入;
- 选举--
- 集群初始化--节点启动状态为observer节点,如果没有主节点,则observer抢占成为leader节点;如果有主节点,则请求主节点加入集群;
- 某个节点成为主节点之后需要和其他节点完成数据同步---这样防止主节点在
- 几种节点下线情况--
- 从节点网络延迟,被动断开和主节点的连接--这时重新加入集群需要向主节点同步信息;
- 主节点下线--引发选举节点---主节点有可能在消息分发的过程中下线,这样会导致数据不同步的问题,所以主节点在重新接入集群的时候需要同步各个集群的数据;
- 主节点下线--等待主节点发送决议消息的从节点将直接将该消息加入存异队列中;
- 主节点负责调度--管理各个节点已经消费的消息和已经提交的消息;
- 消息消费流程-

消息最多可能存在两个节点中--
- 新增节点导致已经被其他节点拉取但是没被执行的任务被新节点拉取,此时任务会被前一个节点执行但是被新节点提交;
- 某个节点宕机、或者与集群断开连接导致被该节点拉取但是没有提交的任务被其他节点拉取,此时该任务会被后拉取的节点执行并提交;
- 所以存异队列中的消息肯定要被该节点提交;但是是否该由该节点执行却取决于举证结果,如果其他节点举证自己正在执行该任务,则不执行,如果没有节点执行或者没有查询到提交记录则移交到执行队列中;
- 闭环在于--被拉去过的任务如果被再次消费肯定会加入到存疑队列中,加上举证和检查策略就能保证该任务最终状态的确定;
- 在情况1中,该任务被执行应该提交给主节点还是直接提交给监听节点---因该监听主节点,保证在执行节点下线的时候该节点能够及时收到下线信息并重新承担该任务的执行角色;
- 节点下线--宕机下线或者和主节点断开连接,此时应该放弃消费kafka中的消息,保证消息不会被重复消费;
相关文章:
分布式异步任务处理组件(四)
基于zookeeper的HA集群设计思路-- 各个节点都可以消费任务,但是由主节点来投票;主节点通过注册zookeeper的临时节点来选举--主节点需要同步从节点的信息正常工作机制--各个节点(包括主节点本身)在执行任务之前询问主节点…...
【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值
[导读]本系列博文内容链接如下: 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C】【C】做一个飞机空战小游戏(三)——模块化程设设计 最近想用c做一个小游戏&#x…...
Spring项目整合策略模式~实战应用
需求背景 1、在管控流程中,涉及到的业务操作很多,不同的业务具有不同的策略实现 举个具体的例子: 在比价管控流程中,有比价策略和管控策略,每个业务的比价和管控均不一样。因此使用策略模式来开发 整体架构流程 1、…...
mybatis PageHelper的坑---记录
记录下,自己新开了一个kotlin的项目从而替换java项目,同时升级了部分组件,包括pageHelper,以往代码里有动态sql的配置 //通过不为null的属性查找数据 val tmpResult: List<Map<String?, Any?>> sqlSessionTemplat…...
uniapp微信小程序下载文件并打开
uni.downloadFile({url: 下载的地址,success(res) {console.log(res)if (res.statusCode 200) {console.log(下载成功);var filePath encodeURI(res.tempFilePath);uni.openDocument({filePath: filePath,fileType: "xlsx",showMenu: true,success: function(res) …...
安卓Intent打开系统进程汇总
1:拨打电话 val uri Uri.parse("tel:10086")val intent Intent(Intent.ACTION_DIAL,uri)startActivity(intent) 2:发送短信 val smsUri Uri.parse("smsto:10086")val intent1 Intent(Intent.ACTION_SENDTO,smsUri)intent1.putE…...
python学习(廖雪峰的官方网站部分,自学笔记)
python学习 廖雪峰的官方网站强烈推荐 字符串 Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符 ord( )先当与把字符转成整形,chr( ) 把编码转化成相应的字符 有些时候,字符串里面的%是一个普通字符怎么办&…...
python题-检查该字符串的括号是否成对出现
给定一个字符串,里边可能包含“()”、"{}"两种括号,请编写程序检查该字符串的括号是否成对出现。 输出: true:代表括号成对出现并且嵌套正确,或字符串无括号字符。 false:未正确使用括号字符。 …...
3ds Max建模教程:模拟布料拖拽撕裂和用剑撕裂两种效果
推荐: NSDT场景编辑器 助你快速搭建可二次开发的3D应用场景 1. 拖拽撕布 步骤 1 打开 3ds Max。 打开 3ds Max 步骤 2 在透视视口中创建平面。保持其长度 后座和宽度后座为 100。 创建平面 步骤 3 转到助手>假人并在 飞机的两侧。 助手>假人 步骤 4 选…...
数据可视化(4)散点图及面积图
1.简单散点图 #散点图 #scatter(x,y) x数据,y数据 x[i for i in range(10)] y[random.randint(1,10) for i in range(10)] plt.scatter(x,y) plt.show()2.散点图分析 #分析广告支出与销售收入相关性 dfcarpd.read_excel(广告支出.xlsx) dfdatapd.read_excel(销售…...
Redis - 数据过期策略
Redis提供了两种数据过期策略 惰性删除 和 定期删除 惰性删除 当某个key过期时,不马上删除,而是在调用时,再判断它是否过期,如果过期再删除它 优点 : 对CPU友好,对于很多用不到的key,不用浪费…...
英文论文(sci)解读复现:基于YOLOv5的自然场景下苹果叶片病害实时检测
对于目标检测算法改进,但是应用于什么场景,需要什么改进方法对应与自己的应用场景有效果,并且多少改进点能发什么水平的文章,为解决大家的困惑,此系列文章旨在给大家解读发表高水平学术期刊中的SCI论文,并对…...
【Liux下6818开发板(ARM)】实现简易相册
(꒪ꇴ꒪ ),hello我是祐言博客主页:C语言基础,Linux基础,软件配置领域博主🌍快上🚘,一起学习!送给读者的一句鸡汤🤔:集中起来的意志可以击穿顽石!作者水平很有限,如果发现错误&#x…...
Kubernetes(K8s)从入门到精通系列之六:K8s的基本概念和术语之存储类
Kubernetes K8s从入门到精通系列之六:K8s的基本概念和术语之存储类 一、存储类二、emptyDir三、hostPath四、公有云Volume五、其他类型的Volume六、动态存储管理一、存储类 存储类的资源对象主要包括: VolumePersistent VolumePVCStorageClass基础的存储类资源对象——Volum…...
Spark-统一内存模型
总结: Spark的内存模型分为4部分,分别是存储内存,计算内存,其他内存,预留内存; 其中存储内存和计算内存可以动态占用,当己方内存不足对方空余则可占用对方的内存,计算内存被存储内…...
类的继承和super关键字的使用(JAVA)
继承 所有的OOP语言都会有三个特征: 封装(点击可跳转);继承;多态 为什么会有继承呢?可以先看下面的例子: 上面这两个类中的代码很相似因为它们只有最后一个方法不同其它的都相同,这样…...
BGP属性+选路规则
目录 一,BGP的属性—基础属性 1.PrefVal 2.LocPrf 3、优先本地下一跳 (NextHop) 4、AS-PATH 5、起源属性 6、MED -多出口鉴别属性 二,BGP选路规则 三,BGP的社团属性 一,BGP的属性—基础…...
类的实例化
类的实例化 class Date { public:void Init(int year, int month, int day){_year year;_month month;_day day;}private:int _year;int _month;int _day; //这只是函数的一个声明并没有定义 };上面是一个类,我们可以把有花括号括起来的叫做一个域ÿ…...
智能提词器有哪些?了解一下这款提词工具
智能提词器有哪些?使用智能提词器可以帮助你更好地准备和交付演讲、报告或其他提词场合。它可以提高你的效率,节省你的时间,并让你更加自信地与听众沟通。另外,智能提词器还可以提供一些有用的功能,如语音识别、智能建…...
oracle 19c rac环境配置firewalld
rac环境ip地址说明 [rootdb1 ~]# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.100.19 db1 172.16.100.30 …...
大数据学习栈记——Neo4j的安装与使用
本文介绍图数据库Neofj的安装与使用,操作系统:Ubuntu24.04,Neofj版本:2025.04.0。 Apt安装 Neofj可以进行官网安装:Neo4j Deployment Center - Graph Database & Analytics 我这里安装是添加软件源的方法 最新版…...
手游刚开服就被攻击怎么办?如何防御DDoS?
开服初期是手游最脆弱的阶段,极易成为DDoS攻击的目标。一旦遭遇攻击,可能导致服务器瘫痪、玩家流失,甚至造成巨大经济损失。本文为开发者提供一套简洁有效的应急与防御方案,帮助快速应对并构建长期防护体系。 一、遭遇攻击的紧急应…...
树莓派超全系列教程文档--(62)使用rpicam-app通过网络流式传输视频
使用rpicam-app通过网络流式传输视频 使用 rpicam-app 通过网络流式传输视频UDPTCPRTSPlibavGStreamerRTPlibcamerasrc GStreamer 元素 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 使用 rpicam-app 通过网络流式传输视频 本节介绍来自 rpica…...
微软PowerBI考试 PL300-选择 Power BI 模型框架【附练习数据】
微软PowerBI考试 PL300-选择 Power BI 模型框架 20 多年来,Microsoft 持续对企业商业智能 (BI) 进行大量投资。 Azure Analysis Services (AAS) 和 SQL Server Analysis Services (SSAS) 基于无数企业使用的成熟的 BI 数据建模技术。 同样的技术也是 Power BI 数据…...
Python:操作 Excel 折叠
💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...
解锁数据库简洁之道:FastAPI与SQLModel实战指南
在构建现代Web应用程序时,与数据库的交互无疑是核心环节。虽然传统的数据库操作方式(如直接编写SQL语句与psycopg2交互)赋予了我们精细的控制权,但在面对日益复杂的业务逻辑和快速迭代的需求时,这种方式的开发效率和可…...
2021-03-15 iview一些问题
1.iview 在使用tree组件时,发现没有set类的方法,只有get,那么要改变tree值,只能遍历treeData,递归修改treeData的checked,发现无法更改,原因在于check模式下,子元素的勾选状态跟父节…...
分布式增量爬虫实现方案
之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面,避免重复抓取,以节省资源和时间。 在分布式环境下,增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路:将增量判…...
计算机基础知识解析:从应用到架构的全面拆解
目录 前言 1、 计算机的应用领域:无处不在的数字助手 2、 计算机的进化史:从算盘到量子计算 3、计算机的分类:不止 “台式机和笔记本” 4、计算机的组件:硬件与软件的协同 4.1 硬件:五大核心部件 4.2 软件&#…...
论文阅读笔记——Muffin: Testing Deep Learning Libraries via Neural Architecture Fuzzing
Muffin 论文 现有方法 CRADLE 和 LEMON,依赖模型推理阶段输出进行差分测试,但在训练阶段是不可行的,因为训练阶段直到最后才有固定输出,中间过程是不断变化的。API 库覆盖低,因为各个 API 都是在各种具体场景下使用。…...
