ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

OpenMetadata Data Insights 应用配置指南:DataInsightsAppConfig 全参数详解与源码实现解析

OpenMetadata Data Insights 应用配置指南:DataInsightsAppConfig 全参数详解与源码实现解析 OpenMetadata Data Insights 应用配置指南DataInsightsAppConfig 全参数详解与源码实现解析【免费下载链接】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/OpenMetadataData Insights数据洞察是 OpenMetadata 内置的本地应用Native Application负责周期性汇总元数据生成数据资产快照、应用分析与成本分析三类洞察数据。本文围绕其配置模型DataInsightsAppConfig展开逐项讲解batchSize、recreateDataAssetsIndex、backfillConfiguration与moduleConfiguration等全部参数的语义、默认值与实战场景并结合仓库源码说明每个参数在应用执行链路中的真实作用帮助读者在部署 OpenMetadata 后正确配置与排障 Data Insights 应用。DataInsightsAppConfig 是什么DataInsightsAppConfig是 OpenMetadata 中 Data Insights 应用的配置 Schema完整定义位于 dataInsightsAppConfig.json。该 Schema 属于内部应用配置configuration/internal即配置逻辑由后端Java 服务端处理前端仅负责提供可视化编辑表单。在 OpenMetadata 中Data Insights 应用通过应用市场App Marketplace定义注册其内置定义见 DataInsightsApplication.json应用实例的默认配置见 DataInsightsApplication.jsonapp 目录。两份 JSON 给出了该应用的出厂默认配置{ name: DataInsightsApplication, displayName: Data Insights, appConfiguration: { batchSize: 100, recreateDataAssetsIndex: false, backfillConfiguration: { enabled: false }, moduleConfiguration: { dataAssets: { enabled: true, entities: [all], retention: 90 }, appAnalytics: { enabled: true }, costAnalysis: { enabled: true } } }, appSchedule: { scheduleTimeline: Custom, cronExpression: 0 3 * * * } }可见应用默认按 Cron 表达式0 3 * * *每天凌晨 3 点调度执行三个分析模块默认全部开启。应用的实际执行入口是 DataInsightsApp.java在init方法中通过JsonUtils.convertValue将前端保存的配置反序列化为DataInsightsAppConfig再经JsonUtils.validateJsonSchema做 Schema 校验随后把配置拆分给三个工作流模块使用。这意味着只要配置不满足 Schema 约束例如模块配置缺失必填项、出现未知属性应用将无法完成初始化。顶层参数详解batchSize单批处理的最大事件数batchSize: 100batchSize定义应用每次处理的最大事件实体数量Schema 中默认值为 100最小值为 0。在 DataInsightsApp.java 中该值被直接读取并赋值给成员变量batchSizebatchSize config.getBatchSize();随后它被传入三个工作流WebAnalyticsWorkflow、CostAnalysisWorkflow、DataAssetsWorkflow作为PaginatedEntitiesSource分页读取数据库实体的每页大小即每次从数据库取回一批实体、处理完再取下一批。调大该值可减少数据库往返次数、提升吞吐但会增大单批内存占用在实体量极大的环境中需要结合服务端可用内存与数据库连接池大小权衡。值得注意的源码细节DataAssetsWorkflow在 computeConcurrencyBudget 中会根据 CPU 核数、数据库连接池大小dataSourceFactory.getMaxSize()以及AsyncOperationsConfiguration.dataInsightsMaxConcurrentDbTasks计算并发预算并使用虚拟线程virtual threads配合Semaphore并行处理同一批实体最后统一 flush 到搜索索引。因此batchSize与并发预算共同决定数据资产快照的处理速度。recreateDataAssetsIndex重建 DataAssets 数据流recreateDataAssetsIndex: falserecreateDataAssetsIndexUI 中显示为 Recreate DataInsights DataAssets Index用于强制重建Data Insights 的数据资产索引。文档明确警告重建索引会删除已有的 DataAssets 数据且重建后必须重新执行 Backfill回填否则历史数据将丢失。其适用场景是当你修改了自定义属性Custom Property的类型并因此遇到索引映射mapping错误时可通过该开关重建索引以恢复可用。从源码看该开关仅在手动触发on-demand运行时生效。在 DataInsightsApp.java 中String runType (String) jobExecutionContext.getJobDetail().getJobDataMap().get(TRIGGER_TYPE_KEY); if (!runType.equals(ON_DEMAND_JOB)) { backfill Optional.empty(); recreateDataAssetsIndex Optional.empty(); } if (recreateDataAssetsIndex.isPresent() recreateDataAssetsIndex.get().equals(true)) { deleteDataAssetsDataStream(); createOrUpdateDataAssetsDataStream(); }即定时调度触发的运行会忽略该开关只有通过 UI/API 手动触发运行时才执行先删除全部 DataAssets 数据流、再按当前索引映射重建的操作。重建逻辑由 deleteDataAssetsDataStream 与 createOrUpdateDataAssetsDataStream 实现涉及对 Elasticsearch / OpenSearch 中di-data-assets-*前缀数据流Data Stream的删除与重建。backfillConfiguration历史数据回填backfillConfiguration: { enabled: false }backfillConfiguration用于配置数据回填Backfill即对过去某个日期区间重新计算并写入洞察数据通常用于修复历史数据缺失或索引重建后的数据恢复。该对象包含三个子字段字段UI 名称类型说明enabledEnabledboolean是否启用指定日期区间的回填默认falsestartDateStart Datestringformat: date回填起始日期endDateEnd Datestringformat: date回填结束日期在 DataInsightsApp.java 中仅当enabled为true时startDate与endDate才会被封装为Backfill记录并传给工作流if (backfillConfig.isPresent() backfillConfig.get().getEnabled()) { backfill Optional.of(new Backfill(backfillConfig.get().getStartDate(), backfillConfig.get().getEndDate())); }与recreateDataAssetsIndex一样Backfill 同样只在手动触发运行时生效定时运行时backfill会被置空。底层时间处理可参考 TimestampUtils。需要说明的实现边界从源码看回填能力目前主要作用于 Data Assets 模块。DataAssetsWorkflow会解析 Backfill 区间并将开始日期钳制在当前日期前 30 天这一内部保留窗口内——若配置的起始日期早于该窗口会打印告警日志且实际不回填更早的数据见 DataAssetsWorkflow.java。而CostAnalysisWorkflow中的 Backfill 逻辑目前仍以 TODO 注释形式存在见 CostAnalysisWorkflow.java从源码结构看尚未实现完整回填。配置前应结合当前版本实际行为评估。moduleConfiguration三大分析模块moduleConfiguration是应用的核心配置区包含dataAssets、appAnalytics、costAnalysis三个子模块Schema 中三者均为必填required: [dataAssets, appAnalytics, costAnalysis]且additionalProperties: false不允许出现未知子模块。三个模块在运行时被分别解析为DataAssetsConfig、AppAnalyticsConfig、CostAnalysisConfig并对应三条独立执行链processWebAnalytics()→WebAnalyticsWorkflowprocessCostAnalysis()→CostAnalysisWorkflowprocessDataAssets()→DataAssetsWorkflow三个工作流按顺序依次执行先 Web Analytics再 Cost Analysis最后 Data Assets任一模块失败会汇总错误信息并置任务为FAILED状态见 DataInsightsApp.java。dataAssets数据资产洞察模块dataAssets是三个模块中配置项最丰富的一个控制数据资产快照的生成。Schema 定义见 dataInsightsAppConfig.json包含四个子配置Enabled是否生成数据资产洞察enabled: true布尔值默认true。若为falseDataAssetsWorkflow.process()会直接返回不执行任何快照逻辑见 DataAssetsWorkflow.java。Entities需要重建索引的实体列表entities: [all]字符串数组默认[all]且要求元素唯一uniqueItems: true。文档说明其含义为需要重建索引reindex的实体列表。从源码看all是通配值当列表等于Set.of(all)时该应用支持的所有数据资产类型都会被处理否则只处理列表中列出的实体类型见 DataAssetsWorkflow.java。哪些实体类型可用DataInsightsApp提供了 getDataAssetTypes 方法它枚举DataAssetType的全部取值并剔除那些通过索引别名alias映射到实时索引的>retention: 90整数默认 90最小 0。定义 Data Assets 洞察信息在搜索索引中的保留天数超过该期限的记录会在每次运行时被删除。在DataAssetsWorkflow中每次处理某个实体类型的数据流前会调用 deleteBasedOnDataRetentionPolicy通过deleteByRangeQuery删除timestamp早于当前时间 − retention 天的旧记录long retentionLimitTimestamp TimestampUtils.subtractDays(System.currentTimeMillis(), dataAssetsConfig.getRetention()); searchRepository.getSearchClient().deleteByRangeQuery(dataStreamName, timestamp, null, null, null, retentionLimitTimestamp);同时该保留天数也会在创建 Data Assets 数据流时写入索引生命周期配置见DataInsightsApp.createOrUpdateDataAssetsDataStream中对dataAssetsConfig.getRetention()的使用。serviceFilter按服务过滤serviceFilter: { serviceType: , serviceName: }serviceFilter用于将数据资产快照限定到特定类型的特定服务包含serviceType服务类型如Mysql、Snowflake与serviceName服务名称两个字段。配置逻辑上有两个重要约束必须同时提供serviceType与serviceName。在 DataInsightsApp.parseDataAssetsConfig 中若只填写了其中一个整个serviceFilter会被置空相当于不启用过滤if (config.getServiceFilter() ! null (config.getServiceFilter().getServiceName() null || config.getServiceFilter().getServiceType() null)) { return config.withServiceFilter(null); }过滤生效的机制在DataAssetsWorkflow中serviceType用于推导该类型服务下可处理的实体类型集合Entity.getEntityTypeInService(serviceType)见 getEntityTypesToProcessserviceName则作为查询参数过滤实体列表并在写入前按service.name.keyword精确删除该服务在目标时间窗内的旧快照见 getListFilter 与 deleteDataBeforeInserting。注意dataProduct实体不支持软删除过滤会使用Include.ALL单独处理。appAnalytics应用分析模块appAnalytics: { enabled: true }App Analytics模块配置仅有enabled一个布尔字段默认true。开启后应用运行时会采集用户与数据资产交互行为如浏览、搜索、使用等生成应用分析洞察数据。对应的工作流为 WebAnalyticsWorkflow在DataInsightsApp.startApp中作为第一个模块被调用。costAnalysis成本分析模块costAnalysis: { enabled: true }Cost Analysis模块配置同样仅有enabled字段默认true。开启后应用会基于数据库服务下的表实体结合生命周期LifeCycle与表大小等元数据生成成本分析报告。对应工作流为 CostAnalysisWorkflow。从源码结构看成本分析目前仅支持BigQuery、Redshift、Snowflake三种数据库服务类型见 CostAnalysisWorkflow.databaseServiceSupportsProfilerAndUsage其他类型的服务会被过滤跳过。处理结果分为两类写入报告数据ReportData时序表RAW_COST_ANALYSIS_REPORT_DATA原始成本分析数据只保留最近一次快照每次运行前先整体删除AGGREGATED_COST_ANALYSIS_REPORT_DATA聚合成本分析数据按天保留每次运行前删除本次处理日期区间内的旧记录。配置的加载与校验流程完整的配置加载链路可归纳如下前端表单保存用户通过 UI 的 Applications 页面编辑 Data Insights 应用配置保存为appConfigurationJSON。后端反序列化与校验DataInsightsApp.init()将 JSON 转换为DataInsightsAppConfig并执行 JSON Schema 校验DataInsightsApp.java。校验失败将直接阻断应用初始化。模块配置解析分别解析costAnalysis、dataAssets、appAnalytics配置其中dataAssets经过parseDataAssetsConfig的 serviceFilter 完整性校验DataInsightsApp.java。数据流就绪createOrUpdateDataAssetsDataStream()确保每个数据资产类型对应的di-data-assets-*数据流存在且映射mapping最新DataInsightsApp.java。调度执行Quartz 调度器按appSchedule触发startApp依次执行三个模块工作流支持手动触发此时 Backfill 与索引重建开关生效。此外Data Insights 应用支持多节点部署下的分布式互斥startApp首先尝试获取数据库级别的任务锁native-app:data-insightsTTL 5 分钟获取失败则跳过本次运行运行期间通过 60 秒一次的心跳续租见 DataInsightsApp.java 与 startLockHeartbeat确保同一时刻只有一个服务端实例在执行 Data Insights 任务。常见配置场景与注意事项场景一修改自定义属性类型后索引报错当你修改了某个自定义属性Custom Property的数据类型导致 Data Assets 索引映射与实际数据不兼容、应用运行报错时手动触发一次 Data Insights 应用运行在运行前将recreateDataAssetsIndex置为true运行完成后将其改回false并配置 Backfillenabled: true 起始/结束日期重新回填历史数据。务必注意该开关会先删除全部di-data-assets-*数据流再重建未配置回填将导致历史数据资产快照丢失。场景二缩小数据资产快照范围如果只关心某个特定数据库服务的数据资产可在moduleConfiguration.dataAssets中设置{ enabled: true, entities: [all], retention: 90, serviceFilter: { serviceType: Snowflake, serviceName: production_warehouse } }serviceType与serviceName必须成对出现缺失任一字段会导致过滤整体失效回退为处理全部服务。场景三临时关闭某个分析模块当成本分析或应用分析模块因数据量、权限等原因不需要运行时将其enabled置为false即可对应工作流会在process()入口直接短路返回不影响其他模块见 CostAnalysisWorkflow.java 与 DataAssetsWorkflow.java。注意事项汇总backfillConfiguration与recreateDataAssetsIndex只在手动触发运行时生效定时调度会自动忽略这是源码层面明确的行为Backfill 存在约 30 天的内部保留窗口早于该窗口的起始日期不会生效Data Assets 模块成本分析模块当前仅支持 BigQuery、Redshift、Snowflake 三种服务类型Data Insights 结果写入搜索索引Elasticsearch / OpenSearch的di-data-assets-*数据流以及数据库中的报告数据ReportData时序表配置修改后通常需要等待下一次调度或手动触发才会生效。相关源码索引配置 SchemadataInsightsAppConfig.json应用实现DataInsightsApp.java应用市场定义DataInsightsApplication.json默认实例配置DataInsightsApplication.json数据资产工作流DataAssetsWorkflow.java成本分析工作流CostAnalysisWorkflow.java应用分析工作流WebAnalyticsWorkflow.java时间工具TimestampUtils.java【免费下载链接】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),仅供参考
返回列表