大佬们,Flink CDC中sink有什么异步方案吗?
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
在Flink CDC中,sink的异步处理方案可以通过以下几种方式实现,具体取决于目标系统的配置和需求。以下是详细的异步方案及相关参数说明:
Flink CDC支持通过缓存机制来实现异步写入,主要通过以下两个参数控制: - sink.buffer-flush.max-rows
定义了在flush数据之前,缓存记录的最大值。当缓存记录达到该值时,数据会被异步写入目标系统。
- 数据类型:Integer
- 是否必填:否
- 默认值:100
- 说明:可以设置为0
来禁用缓存,直接flush数据。
sink.buffer-flush.interval
Duration
1s
0
来禁用时间间隔,直接flush数据。如果需要完全异步地处理缓存的flush事件,可以将sink.buffer-flush.max-rows
设置为0
,并配置适当的flush时间间隔。对于HBase作为目标端的场景,Flink CDC提供了异步写入的支持: - sink.sync-write
控制是否同步写入HBase。
- 数据类型:Boolean
- 是否必填:否
- 默认值:true
- 参数取值:
- true
:同步写入,保证顺序,但会牺牲一定性能。
- false
:异步写入,不保证顺序,但性能更好。
- 说明:仅实时计算引擎VVR 4.0.10及以上版本支持该参数。
当目标端是文件系统(如OSS)时,可以通过以下参数优化异步写入性能: - sink.parallelism
定义了将文件写入外部文件系统的parallelism。
- 数据类型:Integer
- 是否必填:否
- 默认值:与上游chained operator的parallelism一致。
- 说明:当配置了与上游不同的parallelism时,写文件的算子会使用指定的sink parallelism。如果开启了文件合并,文件合并的算子也会使用指定的sink parallelism。该值应大于0
,否则会抛出异常。
sink.partition-commit.success-file.name
String
_SUCCESS
Flink CDC通过增量快照算法实现了全量和增量数据的无缝切换,从而简化了异步处理的复杂性: - 特点:
- 统一的全增量数据读取框架,减少了维护组件的数量。
- 支持流式处理,能够高效捕获并同步源数据库的增量变动,保证数据的实时性和一致性。
- 支持横向扩展,适应大规模数据处理场景。
重试机制:
Flink CDC提供了写入失败后的重试机制,通过sink.max-retries
参数控制最大重试次数。
Integer
3
Schema变更支持:
在异步写入过程中,需注意目标端是否支持Schema变更。例如,某些目标端可能无法支持删除或清空操作,需根据业务需求进行细粒度配置。
Flink CDC的异步sink方案主要包括基于缓存的异步写入、HBase异步写入、文件系统异步写入以及全增量一体化的异步处理。用户可以根据目标系统的特性和业务需求选择合适的配置参数,以实现高效、可靠的异步数据同步。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。