{"id":20338895,"url":"https://github.com/oddityyyy/odd-job","last_synced_at":"2025-07-04T01:04:38.001Z","repository":{"id":210965598,"uuid":"726871879","full_name":"oddityyyy/odd-job","owner":"oddityyyy","description":"A distributed task scheduling framework. 分布式任务调度框架","archived":false,"fork":false,"pushed_at":"2024-08-29T14:25:45.000Z","size":1975,"stargazers_count":4,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-04T01:02:45.982Z","etag":null,"topics":["distributed","java","job","scheduler","task"],"latest_commit_sha":null,"homepage":"https://github.com/oddityyyy/odd-job","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/oddityyyy.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-12-03T16:44:18.000Z","updated_at":"2024-08-29T14:25:49.000Z","dependencies_parsed_at":"2024-03-02T16:32:30.003Z","dependency_job_id":"5235ed1e-096a-4579-8234-af607b1d3029","html_url":"https://github.com/oddityyyy/odd-job","commit_stats":null,"previous_names":["oddityyyy/odd-job"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/oddityyyy/odd-job","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddityyyy%2Fodd-job","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddityyyy%2Fodd-job/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddityyyy%2Fodd-job/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddityyyy%2Fodd-job/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/oddityyyy","download_url":"https://codeload.github.com/oddityyyy/odd-job/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/oddityyyy%2Fodd-job/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":263427302,"owners_count":23464842,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["distributed","java","job","scheduler","task"],"created_at":"2024-11-14T21:14:34.445Z","updated_at":"2025-07-04T01:04:37.784Z","avatar_url":"https://github.com/oddityyyy.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### 特性\n- 1、简单：支持通过Web页面对任务进行CRUD操作，操作简单，一分钟上手；\n- 2、动态：支持动态修改任务状态、启动/停止任务，以及终止运行中任务，即时生效；\n- 3、调度中心HA（中心式）：调度采用中心式设计，“调度中心”自研调度组件并支持集群部署，可保证调度中心HA；\n- 4、执行器HA（分布式）：任务分布式执行，任务”执行器”支持集群部署，可保证任务执行HA；\n- 5、注册中心: 执行器会周期性自动注册任务, 调度中心将会自动发现注册的任务并触发执行。同时，也支持手动录入执行器地址；\n- 6、弹性扩容缩容：一旦有新执行器机器上线或者下线，下次调度时将会重新分配任务；\n- 7、触发策略：提供丰富的任务触发策略，包括：Cron触发、固定间隔触发、固定延时触发、API（事件）触发、人工触发、父子任务触发；\n- 8、调度过期策略：调度中心错过调度时间的补偿处理策略，包括：忽略、立即补偿触发一次等；\n- 9、阻塞处理策略：调度过于密集执行器来不及处理时的处理策略，策略包括：单机串行（默认）、丢弃后续调度、覆盖之前调度；\n- 10、任务超时控制：支持自定义任务超时时间，任务运行超时将会主动中断任务；\n- 11、任务失败重试：支持自定义任务失败重试次数，当任务失败时将会按照预设的失败重试次数主动进行重试；其中分片任务支持分片粒度的失败重试；\n- 12、任务失败告警；默认提供邮件方式失败告警，同时预留扩展接口，可方便的扩展短信、钉钉等告警方式；\n- 13、路由策略：执行器集群部署时提供丰富的路由策略，包括：第一个、最后一个、轮询、随机、一致性HASH、最不经常使用、最近最久未使用、故障转移、忙碌转移等；\n- 14、分片广播任务：执行器集群部署时，任务路由策略选择”分片广播”情况下，一次任务调度将会广播触发集群中所有执行器执行一次任务，可根据分片参数开发分片任务；\n- 15、动态分片：分片广播任务以执行器为维度进行分片，支持动态扩容执行器集群从而动态增加分片数量，协同进行业务处理；在进行大数据量业务操作时可显著提升任务处理能力和速度。\n- 16、故障转移：任务路由策略选择”故障转移”情况下，如果执行器集群中某一台机器故障，将会自动Failover切换到一台正常的执行器发送调度请求。\n- 17、任务进度监控：支持实时监控任务进度；\n- 18、Rolling实时日志：支持在线查看调度结果，并且支持以Rolling方式实时查看执行器输出的完整的执行日志；\n- 19、GLUE：提供Web IDE，支持在线开发任务逻辑代码，动态发布，实时编译生效，省略部署上线的过程。支持30个版本的历史版本回溯。\n- 20、脚本任务：支持以GLUE模式开发和运行脚本任务，包括Shell、Python、NodeJS、PHP、PowerShell等类型脚本;\n- 21、命令行任务：原生提供通用命令行任务Handler（Bean任务，”CommandJobHandler”）；业务方只需要提供命令行即可；\n- 22、任务依赖：支持配置子任务依赖，当父任务执行结束且执行成功后将会主动触发一次子任务的执行, 多个子任务用逗号分隔；\n- 23、一致性：“调度中心”通过DB锁保证集群分布式调度的一致性, 一次任务调度只会触发一次执行；\n- 24、自定义任务参数：支持在线配置调度任务入参，即时生效；\n- 25、调度线程池：调度系统多线程触发调度运行，确保调度精确执行，不被堵塞；\n- 26、数据加密：调度中心和执行器之间的通讯进行数据加密，提升调度信息安全性；\n- 27、邮件报警：任务失败时支持邮件报警，支持配置多邮件地址群发报警邮件；\n- 28、推送maven中央仓库: 将会把最新稳定版推送到maven中央仓库, 方便用户接入和使用;\n- 29、运行报表：支持实时查看运行数据，如任务数量、调度次数、执行器数量等；以及调度报表，如调度日期分布图，调度成功分布图等；\n- 30、全异步：任务调度流程全异步化设计实现，如异步调度、异步运行、异步回调等，有效对密集调度进行流量削峰，理论上支持任意时长任务的运行；\n- 31、跨语言：调度中心与执行器提供语言无关的 RESTful API 服务，第三方任意语言可据此对接调度中心或者实现执行器。除此之外，还提供了 “多任务模式”和“httpJobHandler”等其他跨语言方案；\n- 32、国际化：调度中心支持国际化设置，提供中文、英文两种可选语言，默认为中文；\n- 33、容器化：提供官方docker镜像，并实时更新推送dockerhub，进一步实现产品开箱即用；\n- 34、线程池隔离：调度线程池进行隔离拆分，慢任务自动降级进入”Slow”线程池，避免耗尽调度线程，提高系统稳定性；\n- 35、用户管理：支持在线管理系统用户，存在管理员、普通用户两种角色；\n- 36、权限控制：执行器维度进行权限控制，管理员拥有全量权限，普通用户需要分配执行器权限后才允许相关操作；\n### core concept\n#### 执行器分片广播路由策略的理解\n- SHARDING_BROADCAST(分片广播)：广播触发对应集群中所有机器执行一次任务，同时系统自动传递分片参数；可根据分片参数开发分片任务；\n- `SHARDING_BROADCAST` 是一种任务分片类型，用于分布式任务处理系统中。这种类型的任务会触发集群中的所有机器执行一次任务，并且系统会自动传递分片参数。这种任务类型允许开发人员根据传递的分片参数来设计和执行分片任务；\n- 当一个任务被标记为 `SHARDING_BROADCAST` 类型时，它会被广播到整个集群中的所有机器。这意味着每个节点都会收到任务并执行它，但是系统会自动传递分片参数以便在不同的节点上执行不同的分片任务。这种机制可以用于需要整个集群协同处理的任务，但是又需要根据特定参数来执行不同的分片操作的场景。例如，在大数据处理中，你可以将一个任务分片为多个子任务，然后在集群中的每个节点上处理其中一部分数据；\n- 使用 `SHARDING_BROADCAST` 类型的任务，开发者可以利用分布式系统的能力来并行执行任务，每个节点处理不同的分片数据，从而提高任务的处理效率和性能；\n#### Failover的理解\n- 在分布式系统中，\"failover\" 是指当系统中某个节点或者组件出现故障时，系统可以自动切换到备用节点或组件，以保证系统的可用性和稳定性；\n- \"failover\" 模式常用于高可用性的系统设计中，确保系统即使在出现故障时也能够继续运行；\n- 在具体的任务调度系统中，在 odd-job 调度框架中，\"failover\" 模式指的是任务的\"容错\"处理方式。如果某个任务在执行时发生了故障，\"failover\" 模式可以指定系统如何处理这种故障，其中的回调机制可以是：\n\n1. **重试执行**: 系统可以尝试重新执行失败的任务，直到任务执行成功为止。\n2. **切换到备用节点或服务**: 如果任务执行的节点或服务不可用，可以自动切换到备用节点或服务执行任务。\n3. **报警通知或日志记录**: 在任务失败时，可以触发报警通知或者记录详细的错误日志，便于后续排查问题。\n4. **执行默认操作或降级处理**: 对于部分故障不影响整体业务的情况，可以执行默认的操作或者降级处理，保证系统的核心功能可以继续提供。\n\n- 回调机制能够保证即使在任务执行失败的情况下，系统也能够通过一系列的策略或操作来保障任务的最终完成或系统的稳定性。\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foddityyyy%2Fodd-job","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Foddityyyy%2Fodd-job","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Foddityyyy%2Fodd-job/lists"}