Hive Sink 端支持 Exactly Once 语义
发布时间:2025-06-24 18:46:07 作者:北方职教升学中心 阅读量:470
目前支持三种文件切分策略:文件大小、事件时间、RocketMQ 等
DTS Sink 将数据输出到目标数据源,支持 HDFS、Hive 等
DTS Core 贯穿整个数据同步流程,通过 Source 读取源端数据,经过 DTS Framework 处理,最后通过 Sink 将数据输出到目标端。增量场景数据集成
架构升级,支持更多部署环境,比如 K8S
服务化完善,降低用户接入成本
总结
==
随着字节跳动业务产品逐渐多元化快速发展,字节跳动内部一站式大数据开发平台功能也越来越丰富,并提供离线、
容错处理
理想情况下流式任务会一直运行不需要重启,但实际不可避免会遇到以下几个场景:
Flink 计算引擎升级,需要重启任务
上游数据增加,需要调整任务并发度
Task Failover
并发度调整
目前 Flink 原生支持 State Rescale。由于 Sink 端是并发写入,同时会有多个 Task 写同一个分区数据,因此只有当所有 Task 分区数据写入完成,才能认为分区数据是就绪,本文解决思路如下:
在 Sink 端,对于每个 Task 保存当前最小处理时间,需要满足单调递增的特性
在 Checkpoint Complete 时,Task 上报最小处理时间到 JM 端
JM 拿到所有 Task 的最小处理时间后,可以得到全局最小处理时间,并以此作为 Hive 分区的最小就绪时间
当最小就绪时间更新时,可判断是否添加 Hive 分区
动态分区
动态分区是根据上游输入数据的值,确定数据写到哪个分区目录,而不是写到固定分区目录,例如 date={date}/hour={hour}/app={app}的场景,根据分区时间以及 app 字段的值确定最终的分区目录,以实现每个小时内,相同的 app 数据在同一个分区下。地震、DTS Core、
全局最小归档时间
Source 端是并发读取,并且一个 Task 可能同时读取多个 MQ Partition 的数据,对于 MQ 的每一个 Parititon 会保存当前分区归档时间,取分区中最小值作为 Task 的最小归档时间,最终取 Task 中最小值,作为全局最小归档时间。Text 等多种存储格式,不同的存储格式数据写入过程不太一样,具体可以分为两大类:
RowFormat:基于单条写入,支持按照 Offset 进行 HDFS Truncate 操作,例如 Text 格式
BulkFormat:基于 Block 写入,不支持 HDFS Truncate 操作,例如 Parquet、类型转换不兼容等场景。归档的难点在于如何确定全局最小归档时间以及如何容忍一定的乱序。归档效果统计等,具体如下图所示:
未来规划
====
基于 Flink 实时解决方案目前已在公司上线和推广,未来主要关注以下几个方面:
数据集成功能增强,支持更多数据源的接入,支持用户自定义数据转换逻辑等
Data Lake 打通,支持 CDC 数据实时导入
流批架构统一,支持全量、准确的做 Task Failover 就显得比较重要。
在实际场景中,不可避免会遇到各种上下游故障,并在持续一段时间后恢复,如果采用 Process Time 的处理策略,则事故期间的数据会写入到恢复后的时间分区下,最终导致分区空洞或者数据漂移的问题;如果采用归档的策略,会按照事件时间写入,则没有此类问题。因此针对 Checkpoint 失败,提高系统的容错性以及稳定性就比较重要。
参考文献
====
- Real-time Exactly-once ETL with Apache Flink
http://shzhangji.com/blog/2018/12/23/real-time-exactly-once-etl-with-apache-flink/
- Implementing the Two-Phase Commit Operator in Flink
https://flink.apache.org/features/2018/03/01/end-to-end-exactly-once-apache-flink.html
- A Deep Dive into Rescalable State in Apache Flink
https://flink.apache.org/features/2017/07/04/flink-rescalable-state.html
- Data Streaming Fault Tolerance
https://ci.apache.org/projects/flink/flink-docs-release-1.9/internals/stream_checkpointing.html
欢迎关注「字节跳动技术团队」