说明本规范可作为电商/跨境电商实时数仓开发规范参考。版本记录版本日期修订人修订内容v1.02026-04-05数据架构组初始版本发布一、总则1.1 适用范围本规范适用于基于阿里云 SelectDBStarRocks Flink CDC Kafka Apache Paimon架构的电商实时数仓开发。所有实时数据链路的设计、开发、上线、运维均须遵守本规范。1.2 核心原则分层解耦遵循 ODS → DWD → DWS → ADS 经典分层层与层之间通过 Kafka Topic 或 Paimon 表解耦。数据一致性优先端到端保证 Exactly-Once 语义状态 TTL 必设主键模型必定义。命名即文档库、表、字段、Topic 命名统一规范见名知意。变更可控Schema 变更需走审批流程DDL 操作须在测试环境验证。可观测性每条链路必须接入监控告警关键指标需配置阈值。二、架构分层与数据流向2.1 分层架构图┌─────────────────────────────────────────────────────────────┐ │ ADS 层 (Application Data Service) │ │ - StarRocks / SelectDB 聚合表 │ │ - 面向大屏、API、报表 │ └─────────────────────────────────────────────────────────────┘ ▲ │ Flink SQL 流式聚合 / 物化视图 │ ┌─────────────────────────────────────────────────────────────┐ │ DWS 层 (Data Warehouse Service) │ │ - Paimon 轻度汇总表 │ │ - 分钟/小时级窗口聚合 │ └─────────────────────────────────────────────────────────────┘ ▲ │ Flink SQL 窗口聚合 / Join │ ┌─────────────────────────────────────────────────────────────┐ │ DWD 层 (Data Warehouse Detail) │ │ - Paimon 主键表明细宽表 │ │ - 清洗、去重、维表关联 │ └─────────────────────────────────────────────────────────────┘ ▲ │ Flink SQL 清洗 / 维表 Join │ ┌─────────────────────────────────────────────────────────────┐ │ ODS 层 (Operational Data Store) │ │ - Kafka Topic (原始 CDC 数据) │ │ - Paimon Append-Only 表可选用于数据归档 │ └─────────────────────────────────────────────────────────────┘ ▲ │ Flink CDC / Kafka Connect │ ┌─────────────────────────────────────────────────────────────┐ │ 业务数据源 (Source) │ │ - MySQL (订单、用户、商品) │ │ - 用户行为日志 (Nginx / SDK) │ └─────────────────────────────────────────────────────────────┘2.2 数据流向规范流向技术组件一致性保证延迟要求MySQL → ODS (Kafka)Flink CDCAt-Least-Once 幂等 5sODS (Kafka) → DWD (Paimon)Flink SQLExactly-Once 30sDWD (Paimon) → DWS (Paimon)Flink SQLExactly-Once 1minDWS (Paimon) → ADS (SelectDB)Flink SQL / 物化视图Exactly-Once 10s三、命名规范3.1 数据库命名环境库前缀示例说明生产prod_prod_ods,prod_dwd,prod_dws,prod_ads生产环境专用测试test_test_ods,test_dwd测试环境数据可随时清理开发dev_dev_ods个人开发调试数据无保障3.2 表命名格式{层级前缀}_{业务域}_{表描述}_{后缀}层级前缀示例ODSods_ods_trade_orders,ods_log_user_behaviorDWDdwd_dwd_trade_order_wide,dwd_user_profileDWSdws_dws_trade_shop_1min,dws_user_cumulativeADSads_ads_bi_gmv_trend,ads_api_order_status后缀规范快照表_snapshot增量表_delta临时表_tmp_{yyyymmdd}备份表_bak_{yyyymmdd}3.3 字段命名全部采用小写字母 下划线风格。布尔类型字段以is_开头is_deleted,is_valid。时间字段统一后缀日期_date(DATE 类型)时间戳_time(TIMESTAMP/DATETIME 类型)金额字段统一后缀_amount类型为DECIMAL(20,2)。主键字段必须包含在表定义中且命名清晰order_id,user_id。3.4 Kafka Topic 命名格式{业务域}.{层级}.{表名}示例说明ecommerce.ods.orders电商域 ODS 层订单原始 CDC 数据ecommerce.dwd.order_wide电商域 DWD 层订单宽表变更流log.ods.user_behavior日志域用户行为原始数据四、数据模型设计规范4.1 Paimon 表设计规范4.1.1 表类型选择数据特征表类型必须配置CDC 同步、有 Upsert/Delete主键表PRIMARY KEY,merge-engine,changelog-producer日志、埋点等不可变数据Append-Only 表无主键按时间分区需要 Time Travel 的历史快照主键表 标签snapshot.time-retained4.1.2 主键表必设参数WITH ( bucket {N}, -- 必填且创建后不可修改 merge-engine deduplicate, -- 去重 changelog-producer input, -- CDC 源必设为 input snapshot.time-retained 7 d, -- 快照保留 7 天 file.format parquet, file.compression zstd );4.1.3 分桶数bucket设置公式bucket max(下游消费并行度, 预计单日数据量(GB) / 5)最小值4最大值128超过需走审批警告bucket一旦设定无法修改。4.1.4 分区规范必须按时间字段分区分区字段统一命名为dt格式yyyy-MM-dd或hour格式yyyy-MM-dd HH。分区字段从业务时间字段派生dt AS DATE_FORMAT(order_time, yyyy-MM-dd)4.2 SelectDB 表设计规范4.2.1 模型选择决策树是否需要有 Upsert/Delete 操作 ├── 是 → 是否有聚合需求 │ ├── 是 → AGGREGATE KEY 模型 │ └── 否 → UNIQUE KEY 模型 └── 否 → DUPLICATE KEY 模型4.2.2 Unique 模型写时合并 vs 读时合并场景推荐配置理由高频写入10万行/senable_unique_key_merge_on_write false写入性能优先高频点查API 服务enable_unique_key_merge_on_write true查询性能优先4.2.3 分区分桶规范配置项规范示例分区字段必须使用动态分区时间单位按需DAY/HOURPARTITION BY RANGE(create_time) ()分桶字段选择高基数、分布均匀的字段如主键DISTRIBUTED BY HASH(order_id)分桶数建议为 BE 节点 CPU 总数的2~4 倍3节点 × 16核 → 96 ~ 192 桶五、数据接入规范5.1 Flink CDC 接入规范5.1.1 MySQL 源表必设参数WITH ( connector mysql-cdc, scan.startup.mode initial, -- 全量增量生产必选 debezium.snapshot.locking.mode none, -- 无锁快照避免锁表 server-time-zone Asia/Shanghai, debezium.event.deserialization.failure.handling.mode warn );5.1.2 大表全量同步注意事项全量阶段预估耗时 1 小时需提前通知 DBA。全量阶段 Checkpoint 间隔调大至10 分钟避免频繁快照影响性能。全量完成后务必验证增量续接成功观察 Binlog Offset 是否推进。5.2 Kafka Sink 规范WITH ( connector upsert-kafka, sink.delivery-guarantee exactly_once, sink.transactional-id-prefix flink-txn-{job_name}-, properties.compression.type lz4 );5.3 SelectDB Sink 规范WITH ( connector doris, sink.properties.format json, sink.properties.strip_outer_array true, -- 必开批量写入优化 sink.enable-delete true, -- CDC 同步必开 sink.buffer-flush.max-rows 50000, -- 攒批行数 sink.buffer-flush.interval 5s, -- 攒批间隔 sink.max-retries 3 );六、Flink SQL 开发规范6.1 作业参数必设项-- 状态与 Checkpoint SET execution.checkpointing.interval 3min; SET execution.checkpointing.mode EXACTLY_ONCE; SET state.backend rocksdb; SET state.backend.incremental true; SET table.exec.state.ttl 86400000; -- 1 天必须设置 -- 性能优化 SET table.exec.mini-batch.enabled true; SET table.exec.mini-batch.allow-latency 5s; SET table.exec.mini-batch.size 20000;6.2 维表 Join 规范强制要求Lookup Join 必须配置缓存且开启异步。WITH ( lookup.cache.max-rows 100000, lookup.cache.ttl 10min, lookup.async true );6.3 窗口聚合规范必须使用Window TVF语法TUMBLE/HOP/CUMULATE禁止使用已废弃的 Group Window。水位线延迟设置普通业务INTERVAL 5 SECOND允许较大延迟的业务INTERVAL 30 SECOND-- 正确示例 SELECT window_start, window_end, shop_id, SUM(amount) FROM TABLE( TUMBLE(TABLE orders, DESCRIPTOR(order_time), INTERVAL 1 MINUTE) ) GROUP BY window_start, window_end, shop_id;6.4 去重规范对于 Kafka 源可能产生的重复数据使用ROW_NUMBER()按主键去重。去重窗口保留时间由table.exec.state.ttl控制。INSERT INTO dwd_table SELECT order_id, ... FROM ( SELECT *, ROW_NUMBER() OVER ( PARTITION BY order_id ORDER BY update_time DESC ) AS rn FROM kafka_source ) WHERE rn 1;七、运维监控规范7.1 必监控指标指标分类指标名称告警阈值Flink 作业Checkpoint 失败次数 0Flink 作业端到端 Checkpoint 耗时 5minFlink 作业Kafka Source Lag 100万 或 30minSelectDB查询失败率 1%SelectDB导入任务失败数 0SelectDBBE 节点 CPU 使用率 80%Paimon快照过期失败 0PaimonCompaction 队列积压 10007.2 告警响应流程P0 级告警作业失败、数据停止产出5 分钟内响应15 分钟内定位原因。优先从Savepoint 恢复禁止无状态重启。P1 级告警Lag 上涨、延迟超阈值30 分钟内响应2 小时内解决。常见处理增加并行度、优化 Sink 吞吐。P2 级告警资源使用率偏高当日评估是否需要扩容纳入迭代计划。7.3 数据质量校验每个 DWD 层作业必须输出以下数据质量指标-- 示例监控订单金额为空的占比 INSERT INTO quality_metrics SELECT dwd_order_wide AS table_name, null_amount_ratio AS metric_name, CAST(SUM(CASE WHEN amount IS NULL THEN 1 ELSE 0 END) AS DOUBLE) / COUNT(*) AS value, CURRENT_TIMESTAMP AS ts FROM dwd_order_wide;八、变更管理规范8.1 Schema 变更流程变更类型操作步骤风险等级增加非主键列1. SelectDB/PaimonALTER TABLE ADD COLUMN2. 更新 Flink 作业 DDL从 Savepoint 恢复低删除列1. 确认列无下游依赖2. 先修改作业逻辑停止写入该列3. 再ALTER TABLE DROP COLUMN中修改列类型禁止操作。必须新建表 数据迁移。高修改主键禁止操作。必须重建表。高8.2 作业变更流程开发环境验证SQL 语法校验 本地 MiniCluster 测试。测试环境验证模拟生产数据量压测观察 Checkpoint 和状态大小。生产上线新作业直接启动。修改作业必须从最新 Savepoint 恢复禁止无状态启动。回滚预案保留上线前 Savepoint 至少 7 天。九、安全规范9.1 账号权限生产环境 Flink 作业使用独立的只读 MySQL 账号和读写 SelectDB 账号。禁止使用root或admin账号运行生产作业。所有密码必须存储在密钥管理服务中禁止明文写入 SQL。9.2 数据脱敏涉及手机号、身份证、邮箱等敏感字段在 DWD 层必须脱敏。脱敏函数示例-- 手机号脱敏138****5678 CONCAT(SUBSTR(phone, 1, 3), ****, SUBSTR(phone, -4))十、附录10.1 开发检查清单上线前必须逐项确认表命名是否符合规范Paimon 表bucket是否合理设定是否设置了table.exec.state.ttlLookup Join 是否开启了异步和缓存Checkpoint 配置是否正确间隔、超时、增量是否配置了监控告警是否进行了数据量压测是否准备了回滚 Savepoint10.2 常用运维命令-- 查看 Paimon 表快照 SELECT * FROM {table}$snapshots ORDER BY snapshot_id DESC LIMIT 10; -- 手动触发 Paimon 快照过期 CALL sys.expire_snapshots({database}.{table}, 7d); -- 查看 SelectDB 导入任务 SHOW LOAD FROM {database} ORDER BY CreateTime DESC LIMIT 20; -- 查看 SelectDB 表 Tablet 分布 SHOW TABLET FROM {table};本规范自发布之日起生效相关实时数仓开发活动均须遵守。规范解释权归数据架构组所有。