第33章 Dagster 1.12:打磨与提速
第 33 章:Dagster 1.12:完善与加速
体验更精炼的 Dagster。导航速度更快、GA 组件、即插即用的部署、通过 FreshnessPolicies 实现的编排增强,以及面向大规模构建者的全新支持中心。
亮点
Dagster 1.12 继续践行我们的使命,通过重新设计的 UI、强大的新组件和部署快捷方式,让数据编排更快、更简单、更可靠。
* 全新 UI,布局更简洁,侧边栏可折叠 * 组件正式推出(GA),新增集成能力,支持基于状态的后端 * 简化部署工作流,使用 `dg scaffold` 快速生成 Docker + GitHub Actions 配置 * FreshnessPolicies 正式推出(GA),替代旧版新鲜度 API * 优化回填(backfills)、分区(partitions)和执行器行为的用户体验 * 全新支持中心,文档重新组织,新增数十个示例
让我们深入探讨。
刷新且流畅的 UI
我们重新设计了 Dagster 的 UI,使其更快、更简洁、更易于导航。顶部导航栏被重塑为可折叠的侧边栏,腾出视觉空间,并将你最常用的工作流(如运行 runs、资产 assets 和部署 deployments)置于核心位置。
这一改动在 Dagster+ Hybrid 和 Serverless 上带来了更 cohesive 且直观的体验,助你一眼找到所需资源,专注于构建。
组件正式推出(GA)
经过广泛的测试和社区反馈,Components 框架和 `dg` CLI 现已正式可用(GA),并获 Dagster 平台全面支持。
这一里程碑确立了 Components 作为新 Dagster 项目的默认基础,提供了一种统一、可组合的方式来定义和管理数据栈中的集成、资源和编排逻辑。
标准化集成
我们标准化了集成组件的接口,使其更易于自定义和扩展。每个组件现在都暴露两个一致的方法:`execute()` 和 `get_asset_spec()`,你可以对它们进行子类化或重写以实现高级定制。
这种统一接口意味着集成在整个平台上表现可预测,让你无需重复造轮子即可轻松适配组件到你的环境。
以下是一个使用自定义逻辑扩展组件的示例:
```python from collections.abc import Iterator from dagster_sling import ( SlingReplicationCollectionComponent, SlingReplicationSpecModel, SlingResource, ) import dagster as dg
class CustomSlingReplicationComponent(SlingReplicationCollectionComponent): def execute( self, context: dg.AssetExecutionContext, sling: SlingResource, replication_spec_model: SlingReplicationSpecModel, ) -> Iterator: # 在执行前添加自定义日志 context.log.info("Custom") # 调用 sling replicate 并启用调试模式 return sling.replicate(context=context, debug=True) ```
更多组件,更强能力
我们新增了一批集成组件,简化与常见分析和数据工具的设置:
* SigmaComponent * LookerComponent * TableauComponent * OmniComponent
这些组件加入了不断增长的开箱即用 Components 集合,旨在让你的管道默认具备互操作性,减少设置摩擦,加速数据生态系统中的集成。
基于状态的组件
为可靠性和可维护性迈出重要一步,新的 `StateBackedComponent` 基类允许组件将状态独立于 YAML / Python 配置进行持久化和管理。这对于获取或同步外部数据的集成特别有价值。
状态现在可以存储为本地文件、版本化存储或通过 code-server 快照。许多流行集成现均支持:
* AirbyteWorkspaceComponent * FivetranAccountComponent * PowerBIWorkspaceComponent * AirflowInstanceComponent * DbtProjectComponent
```yaml # defs.yaml type: dagster_fivetran.FivetranAccountComponent attributes: ... defs_state: management_type: LOCAL_FILESYSTEM ```
简化部署
你不应该为了上线一个 Dagster 项目而纠结于 CI/CD。两个新的 `dg scaffold` 命令让部署几乎即插即用:
* `dg scaffold build-artifacts`:生成 Docker 和配置文件,以便构建并将项目部署到 Dagster Cloud,支持多种容器注册表(ECR、Docker Hub、GHCR、ACR、GCR)。 * `dg scaffold github-actions`:自动创建完整的 GitHub Actions 工作流用于 CI/CD 部署到 Dagster Cloud。它会自动检测 Serverless 与 Hybrid agents,并引导你设置所需密钥。
这些命令让引导生产就绪的管道并保持其顺畅运行变得轻而易举。
核心编排升级
本次更新将 FreshnessPolicies 正式推向 GA,并增加了专为可靠性和可扩展性设计的新编排功能。
最初在 1.10 中引入的 FreshnessPolicy API 现在已稳定,并取代了旧的 LegacyFreshnessPolicy。
* FreshnessPolicy 现在直接从 `dagster` 导出。 * FreshnessDaemon 默认运行,无需在 `dagster.yaml` 中切换。 * 旧的 `build_*_freshness_checks` 方法被标记为“已取代”,但为向后兼容仍保持功能。
请在所有新场景中使用 FreshnessPolicy,以更好地可视化和控制资产过期状态。
可配置的回填
现在启动回填(backfill)时可以提供运行配置,让你为所有运行定义一致的设置,非常适合参数化重放或针对性批处理更新。
基于时间的分区排除
`TimeWindowPartitionsDefinition` 现在支持 `exclusions` 参数。你可以跳过周末、节假日或维护窗口,指定为 cron 字符串或 datetime 对象,实现对调度的精细控制。
```python import dagster as dg from datetime import datetime
daily_partitions = dg.DailyPartitionsDefinition( start_date="2022-03-12", exclusions=["0 0 * * 0", "0 0 * * 6"] # 排除周日和周六 ) ```
执行依赖选项
所有 Executors 现在都接受带有 `require_upstream_step_success` 的 `step_dependency_config`。
将其设置为 `False`,允许下游步骤在其所需的上游输出就绪时立即启动,即使该步骤的其他输出仍在运行。
这对多资产并行和复杂依赖图是巨大提升。
支持与文档改进
我们推出了全新的支持中心,提供针对 Dagster+ Hybrid 和 Serverless 的指南及故障排除内容。你可以找到支持团队精心整理的答案,现已完全自助服务。
在文档方面,我们进行了深入的重组和新内容添加:
* 新指南:混合部署故障排除、使用 py-spy 诊断慢代码、解决传感器超时问题。 * 示例全面翻新:Examples 部分导航更友好,包括通往 Dagster University、我们的内部 Dagster 平台和客户案例 Deep Dives 的快速链接。还新增了 DSpy、PyTorch 以及涵盖动态扇出、缓存、并行性和代码共享的高级迷你示例。
致谢
本次发布得益于我们的用户和贡献者的反馈,你们的 bug 报告、功能请求和洞察每天都在塑造 Dagster。
* pmartincalvo * elipinska * piggybox * bollwyvl * aksestok * SoerenStahlmann * 2bxtech * kkanter-asml * MandyMeindersma * DominikHallab * zyd14 * nathanskone * edgarrmondragon * stevenayers * RobBrownFreeAgent * charlottevdscheun * aaronprice00 * aleewen * dschafer * chazmo03 * dwisdom0 * jmccartin * CarlyAThomas * BoLiuV5 * ajohnson5 * j1wilmot * yumazak * brunobbaraujo * CompRhys * HynekBlaha * kevJ711 * tintamarre * nhuray * EFox2413 * oohwooh * emmanuel-ferdman
有反馈或疑问?请在 Slack 或 GitHub 上发起讨论。 有兴趣与我们共事?查看我们的空缺职位。 想要更多类似内容?在 LinkedIn 上关注我们。