OpenMetadata AutoPilot 应用配置指南:AutoPilotAppConfig字段说明与底层实现
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
导读
AutoPilot 是 OpenMetadata 提供的一款内置应用(internal app),它的核心价值在于:当你只需要定义一个数据服务(Service)的连接信息时,AutoPilot 会自动完成该服务相关管线(Ingestion Pipeline)的配置、部署与触发运行,以合理的默认值将元数据、血缘、用量等信息自动接入 OpenMetadata,之后你可以再按需调整任何配置。本指南以openmetadata-ui/src/main/resources/ui/public/locales/en-US/Applications/AutoPilotApplication.md为骨架,完整讲解 AutoPilot 应用的AutoPilotAppConfig配置模型(尤其是active与entityLink两个字段),并结合仓库源码深入说明这些配置在安装、初始化、按需触发与工作流执行中的实际作用,帮助你掌握 AutoPilot 的开启、调度、定向触发与停用机制。
一、配置文档原文:AutoPilotAppConfig
AutoPilot 应用的配置说明文档位于 AutoPilotApplication.md,其正文核心内容如下:
AutoPilotAppConfig:AutoPilot 应用的配置模型。active(布尔值):决定 AutoPilot Workflow 是否处于激活状态。
$$section
Active $(id="active")
Whether the AutoPilot Workflow should be active or not.
$$
可以看到,官方文档非常精炼,仅围绕active一个字段展开。但在实际代码中,AutoPilotAppConfig还包含第二个重要字段entityLink(服务实体链接),用于按需定向触发。接下来我们以该文档为线索,深入仓库源码完整还原 AutoPilot 的配置全貌与运行机制。
二、AutoPilotAppConfig配置模型全解
AutoPilotAppConfig的 JSON Schema 定义位于 autoPilotAppConfig.json,编译后对应的 Java 类型为org.openmetadata.schema.entity.app.internal.AutoPilotAppConfig。该模型共包含三个字段:
| 字段 | 类型 | 默认值 | 必填 | 说明 |
|---|---|---|---|---|
type | string(枚举) | AutoPilotApplication | 否 | 应用类型标识,枚举值固定为AutoPilotApplication |
active | boolean | true | 是 | 是否激活 AutoPilot Workflow,即文档中重点讲解的字段 |
entityLink | entityLink(引用../../../../type/basic.json中的entityLink定义) | 无 | 否 | 服务实体链接,用于指定按需触发 AutoPilot 工作流的目标服务 |
其中type字段在 Schema 的definitions.autoPilotAppType中声明为字符串枚举,唯一合法值为AutoPilotApplication,默认值即AutoPilotApplication;additionalProperties被设为false,意味着传入未声明的额外字段会被拒绝,配置必须严格遵循该模型。
在仓库的默认应用定义 AutoPilotApplication.json 中,默认的appConfiguration如下:
{ "type": "AutoPilotApplication", "active": true, "entityLink": null }而市场定义文件 appMarketPlaceDefinition/AutoPilotApplication.json 同样内置了这一份默认配置,并声明了应用元信息:appType为internal、scheduleType为NoSchedule、className指向org.openmetadata.service.apps.bundles.autoPilot.AutoPilotApp。这意味着 AutoPilot 不是靠定时调度运行的,而是依赖其内部治理工作流(Governance Workflow)的事件驱动机制。
三、active字段的作用:挂起与恢复工作流
active是配置文档中唯一正式讲解的字段,它在 AutoPilotApp.java 中承担了最关键的控制职责。AutoPilot 继承自AbstractNativeApplication,其生命周期方法对active的处理如下:
1.configure()—— 配置即开关
@Override public void configure() { if (this.config.getActive()) { resumeWorkflow(); } else { suspendWorkflow(); } }- 当
active = true时,调用WorkflowHandler.getInstance().resumeWorkflow("AutoPilotWorkflow")恢复 AutoPilot 工作流; - 当
active = false时,调用suspendWorkflow("AutoPilotWorkflow")挂起该工作流。
也就是说,active字段本质上是对名为AutoPilotWorkflow的治理工作流(Workflow Definition)的“挂起 / 恢复”开关。无论你是通过 UI 修改应用配置,还是调用 REST API 更新应用,configure()都会重新评估active并同步工作流状态。
2.init(App app)—— 配置反序列化
@Override public void init(App app) { super.init(app); this.config = JsonUtils.convertValue(this.getApp().getAppConfiguration(), AutoPilotAppConfig.class); }应用初始化时,appConfiguration会被反序列化为AutoPilotAppConfig对象。由于 Schema 中required仅声明了active,因此即便不提供entityLink也能正常初始化。
3.install()/uninstall()—— 安装与卸载
@Override public void install(String installedBy) { createWorkflow(installedBy); configure(); } @Override public void uninstall() { super.uninstall(); deleteWorkflow(); }安装 AutoPilot 时会先创建名为AutoPilotWorkflow的工作流定义,再执行configure()按active决定是否恢复运行;卸载时则删除该工作流定义。loadWorkflow()会优先从类路径/applications/AutoPilotApplication/collate/AutoPilotWorkflow.json加载工作流定义,若不存在则回退到openmetadata目录(即仓库中的 AutoPilotWorkflow.json),并将工作流的 owner 设置为应用的 Bot 用户。
四、entityLink字段的作用:按需定向触发
active控制的是工作流的全局开关,而entityLink则用于“按需定向触发”。在 AutoPilotApp.java 的triggerOnDemand(Map<String, Object> config)方法中:
@Override public void triggerOnDemand(Map<String, Object> config) { Map<String, Object> appConfig = JsonUtils.getMap(getApp().getAppConfiguration()); if (config != null) { appConfig.putAll(config); } validateConfig(appConfig); AutoPilotAppConfig runtimeConfig = JsonUtils.readOrConvertValue(appConfig, AutoPilotAppConfig.class); if (runtimeConfig.getActive()) { Map<String, Object> variables = new HashMap<>(); variables.put( getNamespacedVariableName(GLOBAL_NAMESPACE, RELATED_ENTITY_VARIABLE), runtimeConfig.getEntityLink()); WorkflowHandler.getInstance() .triggerByKey( getTriggerWorkflowId(WORKFLOW_NAME), UUID.randomUUID().toString(), variables); } else { LOG.info("{} is not active. Won't be triggered for {}", WORKFLOW_NAME, runtimeConfig.getEntityLink()); } }这段代码揭示了entityLink的完整语义:
- 按需触发时,调用方传入的
config会与现有appConfiguration合并(putAll),随后统一校验并反序列化为AutoPilotAppConfig; - 若
active = true,则把entityLink写入工作流的全局命名空间变量relatedEntity,并通过triggerByKey以随机 UUID 作为执行实例 ID 触发AutoPilotWorkflow; - 若
active = false,仅记录日志“应用未激活,不会为 {entityLink} 触发”,不执行任何工作流。
因此,entityLink是 AutoPilot 面向“服务实体”的入口:当你需要为一个新服务或指定服务立即触发 AutoPilot 的自动化管线编排时,传入该服务的实体链接即可。由于默认应用配置中entityLink为null,日常的自动流程主要依赖工作流的触发器(trigger)机制,而非显式传参。
五、AutoPilot 工作流:默认值下的自动化编排
AutoPilot 的核心引擎是治理工作流AutoPilotWorkflow,其完整定义位于 AutoPilotWorkflow.json。该工作流的描述为:“每当创建新服务时,相关管线将自动被创建、部署并运行。”其结构如下:
- 触发器:
noOp类型,输出变量relatedEntity(即上文注入的实体链接); - 流程编排(节点 + 边):
ServiceCreated(startEvent)→RunMetadataIngestion(automatedTask,createAndRunIngestionPipelineTask,pipelineType = metadata,waitForCompletion = true,timeoutSeconds = 3600);- 元数据管线失败则走向
WorkflowFailure(endEvent);成功则进入FirstGateway(parallelGateway),并行分流到三个分支:RunDataInsightsApplication(runAppTask,运行DataInsightsApplication);RunLineageIngestion(pipelineType = lineage);RunUsageIngestion(pipelineType = usage);
- 用量管线成功后进入
SecondGateway,再次并行分流到RunAutoClassificationIngestion(pipelineType = autoClassification,shouldRun = false)与RunProfilerIngestion(pipelineType = profiler,shouldRun = false)——注意这两个任务默认不执行(shouldRun: false),即默认不自动开启数据画像与自动分类; - 各分支汇入
SyncGateway后执行RunFinalDataInsightsApplication,最终到达WorkflowEnded。
这一编排说明:AutoPilot 默认帮你完成元数据、血缘、用量三条管线的自动创建、部署与运行,并运行数据洞察应用;而画像(Profiler)与自动分类(AutoClassification)默认处于关闭状态,需要你后续按需开启——这与市场描述“以良好的默认值摄取服务元数据,之后你可以按需编辑任何配置”完全吻合。
六、如何在 OpenMetadata 中使用 AutoPilot
基于以上源码事实,AutoPilot 的完整使用路径如下:
- 安装 AutoPilot:从应用市场(Marketplace)找到 “AutoPilot” 应用并安装。安装过程会触发
install(),自动完成工作流创建与按active恢复的初始化。 - 开启 / 关闭自动化:进入应用配置页,修改Active开关:
- 勾选(
active = true):恢复AutoPilotWorkflow,此后新创建的服务会自动触发元数据 / 血缘 / 用量管线编排; - 取消勾选(
active = false):挂起AutoPilotWorkflow,不再响应新服务创建事件;该字段是配置模型中的必填项,UI 文案即来自 AutoPilotApplication.md。
- 勾选(
- 按需触发:通过 API 以
entityLink指定目标服务并调用应用的按需触发接口,即可绕过事件驱动、对单个服务立即执行 AutoPilot 编排(需active = true)。 - 调整默认管线:AutoPilot 生成的管线配置均可事后编辑;默认未启用的 Profiler 与 AutoClassification 任务如需开启,可修改对应工作流或管线配置。
- 卸载 AutoPilot:卸载时将删除
AutoPilotWorkflow工作流定义,停止其全部自动化行为。
七、小结
AutoPilot 的配置模型虽然精简(核心即active布尔开关,配合按需触发的entityLink),但背后由 AutoPilotApp.java 与AutoPilotWorkflow工作流共同驱动,形成了“事件触发 + 并行编排 + 默认值关闭画像/分类”的自动化服务接入机制。理解active的挂起/恢复语义与entityLink的定向触发语义,你就能精确控制 AutoPilot 的行为边界,让新服务接入元数据的过程真正做到“只定义连接,其余交给 AutoPilot”。
【免费下载链接】OpenMetadataThe Open Context Layer for Data and AI , OpenMetadata is the open platform for building trusted data context and business semantics for humans, AI assistants, and agents.项目地址: https://gitcode.com/GitHub_Trending/op/OpenMetadata
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考