数据处理Job思路总结

对工作中遇到的数据处理Job做了一些梳理,这里试图总结一种通用的Job开发思路。

1. Job的构成

在这里插入图片描述

Job 的核心元素包含: 任务数据接口结果

1.1 任务

数据处理任务。有些业务场景下,Job与任务是绑定的,执行一次Job就对应一个任务。有些业务场景下,任务由用户随意添加,Job执行一次需要处理多个任务。

1.2 数据

每次任务需要处理的数据。根据业务场景不同,数据可能本身存在数据库里,也有可能存在文件中(如Excel)。

1.3 接口

处理数据的接口,每条数据都需要经过接口的处理。

1.4 结果

数据的处理结果。成功或者失败都需要被记录下,如果失败还需要记录失败的原因,可能是业务原因(数据异常、业务规则等),也可能是技术原因(代码bug、执行异常等)。

2. Job流程

画一张通用版的数据处理Job的流程图如下
在这里插入图片描述

阶段具体步骤
任务开始1. 查询待处理的任务,并取第一个任务
准备数据2. 把任务需要处理的数据保存进数据库,并初始化数据状态为待处理
(如果数据本身就在数据库中可以选择忽略这一步)
数据分片3. 查询一批待处理或处理中的数据
(如果数据列表为空则更新任务状态为完成并结束Job)
数据处理4. 取一定量的数据(具体的量根据下游接口实际情况确定)
5. 调用处理接口
6. 等待处理完成后更新数据的结果,
7. 继续执行3,4,5,6步骤,直到没有待处理或处理中的数据
任务完成8. 更新任务状态为已处理
9. 继续执行下一个任务

3. 注意事项

3.1 健壮的Job

3.1.1 源数据异常

数据处理任务常遇到的异常来自于不合法的原始数据,特别是当原始数据来自于人工数据的情况(如导入的文件)。在处理原始数据时要注意做好异常的捕获。捕获的范围不要太大,最好作用于单条数据的处理过程,这样可以做到某条数据异常不影响其他数据的正常处理。

3.1.2 下游接口异常

接口调用不论是RPC调用还是本地方法调用都应当做好异常捕获,否则容易导致整个任务处理失败。

3.1.3 接口调用超时

接口调用超时是需要特别注意的一种异常,特别点在于接口调用的结果未知。不能简单的记录调用结果为成功或失败,可以记录数据状态为 未处理处理中 等待下次Job再次执行时重试。另外,下游接口一定要做好幂等处理,不然会出现重复数据。

3.1.4 数据量突增

Job处理的数据量非常可能随着业务发展而快速增长,所以需要在处理数据时做好数据分片,以防出现调用处理接口超时等情况。

3.2 中断恢复方案

3.2.1 接口实现幂等

下游接口实现幂等非常重要,幂等使得任务可以重复执行,而无需担心产生重复数据。

3.2.2 增加处理状态

处理状态有待处理、处理中、处理完成等。处理状态可以记录处理进度,在中断发生后可以根据处理状态区分出剩余未处理的数据。

  • 任务状态。一共两种:待处理已处理待处理 的任务执行完成后流转成 已处理。如果出现了任务中断的情况,因为有中断恢复的能力,所以可以重复执行。
  • 数据状态。数据状态有待处理处理成功处理失败处理中(可选)。处理中状态可以清晰的标识出某条数据发生了接口超时未返回的情况,需要等待下次重试。处理中是可选的,可以和 待处理 合并。处理失败时需要记录失败原因,如果是异常导致则记录异常提示。

3.3 高性能

3.3.1 多线程

不一定每个Job都需要配置多线程,但是大多数数据处理Job都对性能有要求。多线程是最简单易实现的性能提升方案之一。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

光耦合器的结构与原理解析

光耦合器是一种重要的电光转换器件,广泛应用于电子设备、通信系统以及工业控制等领域。本文将深入分析光耦合器的结构与原理,旨在为读者提供清晰而全面的了解。 光耦合器作为一种关键的电子元件,扮演着信号隔离和传输的重要角色。它的设计结构…

【GitHub项目推荐--开箱即用的直播聊天系统,高颜值,支持二次开发】【转载】

Owncast Owncast 是一个免费开源的实时视频和网络聊天服务器,可与现有流行的广播软件一起使用。 github源代码: https://github.com/owncast/owncast 国内镜像(中文) http://www.gitpp.com/samgoat/owncast-cn 项目介绍 Owncast 是一个开源的、可…

Pycharm安装插件

经常用Pycharm写代码的话,时不时的就会接触到一些好用的插件,如何安装插件呢?经常使用的是两种方式,分别是在线安装和离线安装。 在线安装 在线安装比较简单,打开Pycharm,在左上角【文件】->【设置】-…

Portainer访问远程Docker (TLS加密)

前言: docker的2375端口,出于安全性考虑即(Docker Remote API未授权访问漏洞),是不开放的,如果想要管理远程docker,可以使用TLS机制来进行访问,这里以Portainer访问连接为例 文章参考:https://b…

实习|基于SSM的实习管理系统设计与实现(源码+数据库+文档)

实习管理系统目录 目录 基于SSM的实习管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员功能介绍 (1)管理员登录 (2)实训方向管理 (3)公告信息管理 (4&#xff0…

笔记本键盘卸载或自动跳出字符故障或按键无效修复办法

首先,在Windows 10操作系统中,您可以在笔记本电脑桌面上找到"计算机"图标,并使用鼠标右键点击它。然后选择"属性"选项。 打开系统属性后,您会看到右上角有一个"设备管理器"选项。请点击它来打开设…

深掘开源安全需求,破解开源治理难题

当下,中国金融科技行业在数字支付、数字信贷、金融风控等领域取得了很多创新成果,大幅提升了金融数字化和智能化水平,已经在金融科技的全球竞争中走在前列。 在此进程中,开源技术发挥了不可或缺的重要作用,根据我国金…

第三百零二回

文章目录 1. 概念介绍2. 实现方法2.1 使用Steam实现2.2 使用Timer实现 3. 示例代码4. 内容总结 我们在上一章回中介绍了"如何实现每隔一段时间执行某项目任务"相关的内容,本章回中将介绍如何实现倒计时功能.闲话休提,让我们一起Talk Flutter吧…

ELK集群搭建(基础教程)

ELK集群搭建(基础教程) 目录: 机器准备 集群内各台机器安装Elasticsearch 安装部署Kafka(注:每个节点都配置,注意ip不同) 安装logstash工具 安装filebeat ELK收集Nginx的json日志 ELK收集Nginx正常日志和错误日…

用纯OpenAI的API,实现手机流量包智能客服

import json from openai import OpenAI from dotenv import load_dotenv, find_dotenv _ load_dotenv(find_dotenv())def print_json(data):"""打印参数。如果参数是有结构的(如字典或列表),则以格式化的 JSON 形式打印&…

容器化对数据库的性能有影响吗?

引言 容器化是一种将应用程序及其依赖项打包到一个独立、可移植的运行环境中的技术。容器化技术通过使用容器运行时引擎(比如Docker/Containerd)来创建、部署和管理容器。Kubernetes(通常简称为 k8s)是一个开源的容器编排和管理平…

谷粒商城【成神路】-【3】——三级分类

目录 🍿1.查询三级分类 🧂2.前端页面搭建 🍟3.添加网关 🍳4.解决跨域 🧇5.显示分类 🥞6.显示复选框 1.查询三级分类 1.controller 直接调用service层的接口 RequestMapping("/list/tree&qu…

多线程(进阶三:JUC)

一、Callable接口 二、reentrantLock 三、原子类 四、线程池 五、信号量 Semaphore 六、CountDownLatch JUC即java.utill.concurrent,里面放了一些多线程编程时有用的类,下面是里面的一些类。 一、Callable接口 1、创建线程的操作 多线程编程时&a…

day02.C++命名空间

目录 一、命名空间的作用 二、命名空间的定义 三、命名空间的镶嵌定义 四、命名空间的使用方法 一、命名空间的作用 一个中大型软件往往由多名程序员共同开发,会使用大量的变量和函数,不可避免地会出现变量或函数的命名冲突。当所有人的代码都测试通过…

将有逻辑关系的树形结构数组转换为扁平化的一维对象数组(包含PID、ID父子关系)(tree转换为List)

// 将有逻辑关系的树形结构数组转换为扁平化的一维对象数组 treeStructure2flatArray(arr) {let r [], r_ (ar, PID root) > ar.forEach(v > (v.children && (r_(v.children, v.ID), delete v.children), (v.PID PID, r.push(v))));r_(JSON.parse(JSON.strin…

LeetCode 热题 100 | 链表(中上)

目录 1 141. 环形链表 1.1 哈希表 1.2 快慢指针 2 142. 环形链表 II 2.1 哈希表 2.2 快慢指针 3 21. 合并两个有序链表 4 2. 两数相加 菜鸟做题第三周,语言是 C 1 141. 环形链表 1.1 哈希表 解题思路:遍历链表,在哈希表中…

用Audio2Face导出Unity面部动画

开始之前说句话,新年前最后一篇文章了 一定别轻易保存任何内容,尤其是程序员不要轻易Ctrl S 在A2F去往Unity的路上,还要经历特殊Blender,自己电脑中已下载好的可能不是很好使。 如果想查看UE相关的可以跳转到下边这两篇链接 1. …

追觅科技发布全折叠高速吹风机Pocket

2月2日,追觅科技召开2024新品发布会,一系列年度新品亮相。现场,追觅科技发布了个护重磅新品——追觅Pocket折叠高速吹风机,这也是行业首个全折叠高速吹风机。 创新柔性折叠技术,直卷吹一机全能 追觅Pocket折叠高速吹风…

Dash :一个超漂亮的 python Web库!

你好,Dash 是一个非常方便的 Python 库,它可以非常非常帮助你构建基于 Web 的应用程序,而且最棒的是你无需使用 JavaScript! 不仅如此,Dash 还是一个专门用于创建分析 Web 应用程序的用户界面库。 如果你是一个使用 …

沟通管理和相关方管理核心考点梳理

个人总结,仅供参考,欢迎加好友一起讨论 PMP - 沟通管理和相关方管理核心考点梳理 沟通管理和相关方(干系人)管理这两章放在一起进行梳理,这两章很多的考点很容易混淆,经常会纠结于一些题目,究竟…