Skip to content

Commit

Permalink
✏数据集成
Browse files Browse the repository at this point in the history
  • Loading branch information
0xcaffebabe committed Jun 11, 2024
1 parent bcb8dc2 commit 6817e99
Showing 1 changed file with 61 additions and 2 deletions.
63 changes: 61 additions & 2 deletions doc/数据技术/数据集成.md
Original file line number Diff line number Diff line change
Expand Up @@ -26,19 +26,74 @@ ELT相比ETL,因为转换是在目的地,所以可以根据后续使用的
整性
3. 在存储和监管满足的前提下,尽量保存每一次的快照:除了做到数据的可追溯性,还能再需求发生变化时,利用这些数据重新初始化模型数据
4. 不进行业务逻辑处理
5. 做好任务编排,数据集成是任务的第一步,第一步失败了,后续的流程都做不了

### 需要考虑的工程因素

- 是有边界数据还是无边界数据
- 数据的抽取频率
- 同步获取还是异步获取,在同步获取的情况下,数据源、获取过程和写入目标有复杂的依赖关系并且是紧密耦合的
- 序列化与反序列化处理
- 吞吐量与可扩展性,数据抽取不应成为系统瓶颈,但在实践中,它常常是瓶颈,特别是随着数据量和需求的增长,因此设计可扩展且具备缓存机制的系统并利用托管服务处理突发数据获取是至关重要的
- 可靠性与持久性,需要确保系统的高正常运行时间、适当的故障转移和数据不丢失,但必须评估并平衡这些要求的成本与收益
- 数据的形态、大小、模式、数据类型
- 数据是推,还是拉

## 数据来源

- 数据库直连
- CDC
- 基于批处理的变更捕获:使用包含 updated_at 字段的数据表可以通过查询自指定时间以来的更新行来实现增量数据捕获,但这种批处理方式无法获取每行的全部变化,建议采用仅插入模式记录每个变化
- 监听binlog
- API
- 消息队列与事件流平台
- 托管的数据连接器:一套标准连接器的平台或服务,简化数据获取和同步管理,避免数据工程师自建复杂管道,通过设置源和目标、权限和更新频率等来自动管理和监控数据同步
- 对象存储
- 电子数据交换:一些数据源由于IT系统过于老旧或人类过程限制,不支持更现代的数据传输手段。通过建立自动化来自动同步数据
- 数据库直接导出文件
- 命令行:通过执行命令获取数据的接口
- SSH:用于增强其他数据获取策略的安全性和隔离性,常用于与SCP结合进行文件传输和通过SSH隧道安全连接到数据库
- FTP/SFTP
- WebHook
- 网络接口
- 网络爬虫
- ...

## ETL

### 批量数据抽取

- 增量抽取:只抽取源系统中发生变化的数据,常用的方法包括使用增量更新标志或游标等
- 全量抽取:在某些情况下需要确保数据的完整性和一致性的做法
1. 基于时间间隔的批量抽取:这种模式通常每天在非工作时间(也可以按其他频率)处理一次数据
2. 基于数据量大小的批量抽取:可以根据不同标准(比如事件总数的字节大小)将数据分成不同批次进行处理

当用户尝试执行大量小批量操作而不是少量大操作时,批处理系统通常性能不佳,例如,在某些列式数据库中,一次插入一行操作会导致系统创建许多小文件,而了解数据库或数据存储的更新模式以及专门为高写入速率设计的技术可以帮助解决此类问题

数据迁移到新的数据库或环境通常需要以批量方式进行,涉及大量数据规模和系统的迁移,需要考虑模式管理和合适的数据管道连接,同时也建议探索自动化迁移工具以应对大型和复杂的迁移挑战

批量数据抽取模式:

- 全量抽取与增量抽取:增量只抽取源系统中发生变化的数据,常用的方法包括使用增量更新标志或游标等,全量是在某些情况下需要确保数据的完整性和一致性的做法
- 基于文件的导出与抽取:由源系统控制数据的导出和预处理,并通过对象存储、SFTP、EDI或SCP等方法提供给目标系统,相较于数据库直连更安全

### 流式数据抽取

抽取模式:

- 实时数据源订阅接入
- 窗口化的抽取

需要考虑的问题:

1. 数据模式演进:处理事件数据时,模式演进是常见的,可能导致字段添加、删除或值类型变化等变化,对数据管道和目标存储产生意想不到的影响,建议使用模式注册表进行版本管理、设置死信队列以检查未处理事件,并与上游利益相关者定期沟通和主动解决潜在的模式变化
2. 数据延迟
3. 数据乱序与重复
4. 数据重放如何处理
5. 流数据要保存多久
6. 消息的大小
7. 如何进行错误处理及使用死信队列
8. 消费者端拉还是推
9. 消费者部署的节点位置

### 批量数据转换

- 清洗数据:去除重复数据、处理缺失值、解决数据不一致性等,以确保数据质量
Expand Down Expand Up @@ -81,6 +136,10 @@ stateDiagram-v2
数据平台 --> 源系统: 加工后的数据数据
```

## 数据管理

数据管理自然地从数据获取开始。这是数据血缘和数据目录的起点,所以需要考虑模式变化、道德、隐私和合规

## 错误处理

最重要的错误处理可能就是需要保证抽取过程的数据一致性,一种方式是引入事务机制保证原子性落库,另外一种则是引入死信队列,用来保存出错的数据

0 comments on commit 6817e99

Please sign in to comment.