前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >DolphinScheduler中处理任务/告警/事件相关核心思路

DolphinScheduler中处理任务/告警/事件相关核心思路

作者头像
路行的亚洲
发布2024-07-24 12:37:51
1010
发布2024-07-24 12:37:51
举报
文章被收录于专栏:后端技术学习

最近在看DolphineScheduler,发现DolphinScheduler在处理任务时,通过先将任务快速的存储在数据库中,然后基于对应的task,将task放入队列中,然后将task进行快速消费的思路。这种模型在很多框架中,都有体现。

我们知道在master模块时处理任务的核心模块,而 api模块主要是界面中操作的ui逻辑,而alert模块是告警模块。因此如果想要了解里面的逻辑,可以通过查看api中工作流的执行可以找到一些线索之外,可以在master中可以了解到核心的逻辑。如果想体验相关功能,可以参考官网的搭建过程和相关视频和公众号,这里不展开了,因为这些网上找得到。

一、fetcher突破口

因此我们可以从fetcher中找到突破口:

二、AlertEventFetcher为例了解告警处理核心

以AlertEventFetcher为例来了解DolphineScheduler处理任务/告警/事件等的套路。

那首先我们需要问自己一个问题,告警和task任务之间又是如何串联起来的?也即告警alert和业务处理是如何串联起来的。

两者都是随项目模块启动。

触发源自于相关工作流和task处理的事件产生的告警信息,从而实现对应的event事件,从而进行告警,而告警是通过启动告警模块,进行队列的put和take处理,从而实现对应各个渠道的对接告警的。

告警信息的放入:

eventPendingQueue.put(alert)

什么时候会put?

存在告警数据的时候会put。List<T> pendingEvents = fetchPendingEvent(eventOffset)。从alertMapper.listingAlertByStatus(minAlertId, AlertStatus.WAIT_EXECUTION.getCode(), QUERY_ALERT_THRESHOLD)中获取告警数据。放入到队列中。

核心在saveEvent(AbstractListenerEvent event)。

而调用 saveEvent(AbstractListenerEvent event)的地方:

状态:alert_status为等待执行的状态。从这些监听事件中,我们可以看到这里的监听事件主要和工作流处理和Task处理监听有关,也即和我们的task和workflow有关,也即我们最核心的业务处理。可以根据这些事件找到对应的事件找到对应的业务逻辑处理。

eventPendingQueue.take()的地方在哪里?org.apache.dolphinscheduler.alert.service.AbstractEventLoop#run。而调用org.apache.dolphinscheduler.alert.service.AlertEventLoop#handleEvent的地方:

alertChannel.process(alertInfo)这里会根据对应的渠道类型,进行告警。

doSendEvent的地方中有两个地方:

代码语言:javascript
复制
org.apache.dolphinscheduler.alert.service.AbstractEventSender#sendEvent
org.apache.dolphinscheduler.alert.service.AlertSender#syncHandler

三、workflow工作流处理核心

同样我们可以找到处理工作流的核心逻辑串联的要点在于:

commandFetcher.fetchCommands()

因此我们可以思考如何获取对应的command的逻辑,以及获取之后的处理。

获取command之后,放入到workflowEventQueue队列中。处理的核心逻辑在:org.apache.dolphinscheduler.server.master.runner.WorkflowExecuteRunnable#startWorkflow。

过程:

代码语言:javascript
复制
initTaskQueue
processStart
submitPostNode

根据这样的思路可以找到上面相关Fetcher的处理的核心逻辑。更多细节和详情,可以去官网了解。

参考:

dolphinscheduler的官网:https://dolphinscheduler.apache.org/

dolphinscheduler的github地址:https://github.com/apache/dolphinscheduler

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-07-21,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 后端技术学习 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、fetcher突破口
  • 二、AlertEventFetcher为例了解告警处理核心
  • 三、workflow工作流处理核心
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档