Skip to main content

data-engineering

数据工程。Airflow、Dagster、Kafka Streams、Flink、dbt、数据管道、流处理、数据质量。当用户提到数据管道、ETL、流处理、数据质量时路由到此。

来源信息

仓库
fengshao1227/ccg-workflow
最近来源活动
2026年3月31日 03:20
检测到的 SKILL.md 语言
中文
星标
5,938
分支
452

安装方式

默认使用会先检查来源的 Prompt;你也可以切换为直接命令,或下载本地副本。

检查来源文件

决定是否安装前,请先阅读 SKILL.md,以及 SkillsMP 当前展示的配套文件。

正在显示 SKILL.md

SKILL.md
来源说明 · 只读预览
name
data-engineering
description
数据工程。Airflow、Dagster、Kafka Streams、Flink、dbt、数据管道、流处理、数据质量。当用户提到数据管道、ETL、流处理、数据质量时路由到此。
license
MIT
user-invocable
false
disable-model-invocation
false
# 数据工程域 · Data Engineering ## 域概览 数据工程域涵盖数据管道编排、流式处理、数据质量保障三大核心领域。 ``` 数据管道层 流处理层 质量保障层 ├── Airflow (调度编排) ├── Kafka Streams ├── Great Expectations ├── Dagster (资产管理) ├── Flink ├── dbt └── Prefect (现代工作流) └── Spark Streaming └── Soda Core ``` --- ## 数据管道编排 ### 框架对比 | 特性 | Airflow | Dagster | Prefect | |------|---------|---------|---------| | 核心模型 | DAG + Task | Asset + Op | Flow + Task | | 学习曲线 | 陡峭 | 中等 | 平缓 | | 资产管理 | 无 | 原生支持 | 无 | | 动态任务 | 支持 | 支持 | 支持 | | 本地开发 | 复杂 | 简单 | 简单 | | 社区生态 | 最大 | 成长中 | 成长中 | ### Airflow 核心模式 - DAG 定义:`with DAG(dag_id, schedule, default_args) as dag` - TaskFlow API:`@task` 装饰器,自动 XCom 传递 - 动态任务:`@task` + `.expand()` 实现 dynamic task mapping - Operators:PythonOperator / BashOperator / SQL / HTTP / S3 - Sensors:FileSensor / HttpSensor / ExternalTaskSensor - 重试策略:`retries=3, retry_delay=timedelta(minutes=5), retry_exponential_backoff=True` - 失败回调:`on_failure_callback` 发送告警 - SLA 监控:`sla=timedelta(hours=2)` + `sla_miss_callback` ### Dagster 核心模式 - Asset 定义:`@asset(group_name, deps)` 声明数据资产 - MaterializeResult:返回元数据(行数、预览等) - Resources:`ConfigurableResource` 管理外部连接 - Jobs:`define_asset_job(selection=AssetSelection.groups(...))` - Schedules:`ScheduleDefinition(job, cron_schedule)` - Sensors:`@sensor(job)` 监听外部事件触发 - Partitions:`DailyPartitionsDefinition` 按日分区 - Asset Checks:`@asset_check` 验证数据新鲜度/质量 ### Prefect 核心模式 - Flow/Task:`@flow` + `@task(retries=3, cache_key_fn=task_input_hash)` - 并发:`ConcurrentTaskRunner` + `task.map(items)` - Deployments:`Deployment.build_from_flow(schedule=CronSchedule(...))` - Blocks:`Secret` / `JSON` 管理配置和密钥 ### 调度策略 Checklist - [ ] Cron 表达式正确(`0 2 * * *` 日批 / `*/15 * * * *` 实时) - [ ] 事件驱动:文件到达 / S3 / API 触发 - [ ] 跨 DAG 依赖:ExternalTaskSensor / Asset deps - [ ] 幂等性:UPSERT / 分区覆盖写入 - [ ] 增量处理:`WHERE updated_at > last_run` - [ ] 数据血缘:Dagster 原生 / Airflow Lineage / dbt ref() --- ## 流式处理 ### 框架对比 | 特性 | Kafka Streams | Flink | Spark Streaming | |------|---------------|-------|-----------------| | 部署模式 | 嵌入式(JVM) | 独立集群 | 独立集群 | | 状态管理 | RocksDB | 内存/RocksDB | 内存 | | Exactly-Once | 支持 | 支持 | 支持 | | 窗口类型 | 丰富 | 最丰富 | 基础 | | 学习曲线 | 平缓 | 陡峭 | 中等 | | Python API | kafka-python | PyFlink | PySpark | ### Kafka Streams 核心模式 - 拓扑构建:`StreamsBuilder` → `stream()` → `filter/map/flatMap` → `to()` - 聚合:`groupByKey().count()` / `.aggregate()` / `.reduce()` - Join:Stream-Stream(时间窗口)/ Stream-Table / Table-Table - 状态存储:`Stores.persistentKeyValueStore` + Transformer - Exactly-Once:`PROCESSING_GUARANTEE_CONFIG = EXACTLY_ONCE_V2` - 性能调优:`NUM_STREAM_THREADS=4` / `CACHE_MAX_BYTES_BUFFERING` / RocksDB 配置 ### Flink 核心模式 - DataStream API:`env.addSource()` → `filter/map` → `addSink()` - 窗口类型: - 滚动窗口 `TumblingProcessingTimeWindows.of(Time.minutes(5))` - 滑动窗口 `SlidingProcessingTimeWindows.of(size, slide)` - 会话窗口 `ProcessingTimeSessionWindows.withGap(gap)` - 全局窗口 `GlobalWindows.create()` + 自定义 Trigger - 窗口聚合:`aggregate(AggregateFunction, WindowFunction)` 增量+全窗口 - ProcessFunction:低级 API,访问时间戳、注册定时器 - 状态管理:ValueState / ListState / MapState + TTL 清理 - Checkpoint:`env.enableCheckpointing(60000)` + EXACTLY_ONCE - Savepoint:`flink run -s /path/to/savepoint` - 时间语义:Event Time + Watermark(`forBoundedOutOfOrderness`) - 延迟数据:`allowedLateness()` + `sideOutputLateData()` - 数据倾斜:添加随机前缀打散 key ### 流处理 Checklist - [ ] 选择时间语义:Event Time vs Processing Time - [ ] Watermark 策略:乱序容忍度设置 - [ ] 窗口类型匹配业务场景 - [ ] 状态 TTL 防止无限增长 - [ ] Checkpoint 间隔和超时配置 - [ ] Exactly-Once 语义端到端保证 - [ ] 背压监控和处理 - [ ] 并行度调优 --- ## 数据质量 ### 质量维度 ``` 完整性(非空) → 准确性(范围) → 一致性(关联) → 及时性(新鲜度) → 有效性(格式) ``` ### 工具对比 | 工具 | 优势 | 适用场景 | |------|------|----------| | Great Expectations | 丰富 Expectations、Data Docs | Python 生态、复杂验证 | | dbt | SQL 原生、血缘追踪 | 数据仓库、转换测试 | | Soda Core | 简洁 YAML 配置 | 快速验证、CI/CD | ### Great Expectations 核心模式 - Data Context:`gx.get_context()` → 添加数据源 → 构建批次 - 常用 Expectations: - `expect_table_row_count_to_be_between(min, max)` - `expect_column_values_to_not_be_null(column)` - `expect_column_values_to_be_unique(column)` - `expect_column_values_to_be_between(column, min, max)` - `expect_column_values_to_be_in_set(column, value_set)` - `expect_column_values_to_match_regex(column, regex)` - Checkpoints:批量运行验证 + 生成 Data Docs - 自定义 Expectation:继承 `ColumnMapExpectation` ### dbt 测试核心模式 - Schema 测试:`unique` / `not_null` / `accepted_values` / `relationships` - Generic 测试:`{% test name(model, column_name, params) %}` - Singular 测试:`tests/` 目录下自定义 SQL,返回行 = 失败 - dbt_expectations 包:`expect_column_mean_to_be_between` / `expect_row_values_to_have_recent_data` - 执行:`dbt test` / `dbt test --select model` / `dbt test --store-failures` - 血缘:`{{ ref('model') }}` + `{{ source('schema', 'table') }}` → `dbt docs generate` ### Soda Core 核心模式 ```yaml checks for table_name: - row_count > 100 - missing_count(column) = 0 - duplicate_count(column) = 0 - invalid_count(column) = 0: valid format: email - freshness(timestamp_col) < 1d ``` ### 数据质量 Checklist - [ ] 分层验证:源数据 → 转换后 → 目标数据 - [ ] 完整性:必需列非空、无空字符串 - [ ] 准确性:数值范围、格式正则、逻辑一致 - [ ] 一致性:跨表主键匹配、值一致 - [ ] 及时性:数据新鲜度 < 阈值 - [ ] 唯一性:主键/业务键无重复 - [ ] 质量指标:完整性/唯一性/有效性加权评分 - [ ] 告警:指标低于阈值自动通知(Slack/Email/PagerDuty) - [ ] 持续监控:定时执行质量检查 --- ## 最佳实践 | 实践 | 说明 | |------|------| | 幂等性设计 | UPSERT / 分区覆盖,重跑不产生副作用 | | 增量处理 | 基于时间戳/CDC 增量提取,减少全量扫描 | | 数据血缘 | dbt ref() / Dagster Asset deps 追踪上下游 | | 分层验证 | 源→转换→目标每层都验证 | | 监控告警 | 管道 SLA + 质量指标 + 延迟告警 | | 状态管理 | 流处理状态 TTL + Checkpoint + Savepoint | | 容错设计 | 重试策略 + 死信队列 + 回滚方案 | ## 触发词 数据管道、Airflow、Dagster、Prefect、ETL、流处理、Kafka Streams、Flink、数据质量、Great Expectations、dbt、数据验证、数据血缘
在 GitHub 查看