Flink CDC 系列 - Flink MongoDB CDC 在 XTransfer 的生产实践_百度知 ...

发布网友

我来回答

1个回答

热心网友


XTransfer作为专注于跨境B2B电商中小企业的金融服务提供商,通过建立数字化、自动化平台,致力于全球的财资管理。早期,采用全量离线处理方式,数据时效性不足。随着业务扩展,对实时数据的需求增加,促使我们转向实时数仓建设,选择变更数据捕获工具和实时计算引擎。


2021年2月,我们关注到Flink CDC项目,其内嵌Debezium,简化了开发和部署。Flink的实时计算能力与丰富的外部系统接入使其成为理想选择。我们还结合业务实际,利用MongoDB的Change Streams特性,开发了Flink与MongoDB的CDC连接器,并已发布在Flink CDC的2.1版本中,接下来分享实现细节和生产实践。


Flink CDC 功能与MongoDB复制机制

Flink的Dynamic Table API支持流数据,包括Append Mode和Update Mode的变更流。Flink 1.11引入了新的TableSource和TableSink,支持Update Mode的变更日志处理。Flink通过接收外部系统如MongoDB的变更日志,转化为可识别的changelog,从而支持实时定义动态表。


MongoDB的副本集和分片集群中,复制机制决定了数据同步和捕获的复杂性。副本集的oplog记录难以满足Flink对完整变更记录的需求,而Change Streams特性则简化了数据捕获,尤其在分布式环境下。


Flink CDCMongoDB实现

我们利用MongoDB官方的Change Streams和Debezium EmbeddedEngine,将MongoDB的变更事件转换为Flink的UPSERT changelog。Flink通过Changelog Normalize和Change Streams的resume机制,支持从checkpoint和savepoint恢复。


生产实践中的注意事项

使用RocksDB State Backend来减少状态开销。
设置合适的oplog容量和过期时间以确保数据恢复。
针对变更慢的表启用心跳事件保持resume token更新。
自定义连接参数以适应特殊需求。
优化Change Stream的拉取参数以平衡处理速度和内存消耗。
灵活订阅db或cluster的变更,注意权限管理。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com