近日,2024 MongoDB 中国用户大会上海站顺利举办,XTransfer 技术专家、Apache Flink Committer 孙家宝受邀参加本次大会,并以“Apache Flink 连接 MongoDB 助力流式计算 ”为主题进行演讲。

本次演讲简要介绍 Apache Flink 流式计算引擎,Apache Flink CDC 流式数据集成框架,并重点探讨 Flink 与 MongoDB 数据库的集成能力,以及如何利用这些工具实现高效的数据流摄入、处理和分析

XTransfer技术专家亮相2024MongoDB中国用户大会_数据

 图为孙家宝发表演讲

Apache Flink 是一个针对无界和有界数据流进行有状态计算的框架和分布式处理引擎,用于在无边界和有边界数据流上进行有状态的计算。Flink 擅长处理无界和有界数据集,精确的时间控制和状态化使得 Flink 的运行时能够运行任何处理无界流的应用。

XTransfer技术专家亮相2024MongoDB中国用户大会_数据_02

Apache Flink 应用程序可以消费来自消息队列或分布式日志这类流式数据源(例如 Apache Kafka)的实时数据,也可以从各种的数据源中消费有界的历史数据。同样,Flink 应用程序生成的结果流也可以发送到各种数据存储中。

XTransfer技术专家亮相2024MongoDB中国用户大会_数据_03

作为一个计算引擎,Flink 本身不持有数据,需要从外部系统中读取数据进行计算,然后将计算的结果写入目的地。Flink 通过 Flink Connectors 组件与外部系统相连接,Flink Connectors 在社区中一直是作为一等公民存在。

XTransfer技术专家亮相2024MongoDB中国用户大会_Apache_04

Apache Flink 官方支持的 MongoDB 连接器有两个,分别是 Flink MongoDB Connector 和 Flink MongoDB CDC Connector,均由来自 XTransfer 的贡献者发起并贡献给社区,使 Flink 具有了流批读取、流批写入 MongoDB 的能力。

Flink MongoDB Connector 基于全新的 Source 和 Sink 接口实现,同时支持 DataStream 和 Table API,在 Flink 1.16 版本得到支持。Flink MongoDB Connector 2.0.0 版本也计划近期发布,将支持 MongoDB 7.0,分片集合写入等新功能特性。

Flink MongoDB Connector 有以下四个功能特性:

● 分布式读取:MongoDB 连接器支持使用分区策略将需要读取的数据集合进行分区,将分区下发给多个 Reader 分布式读取,提升批量抽取数据的效率,减少数据读取时间。

XTransfer技术专家亮相2024MongoDB中国用户大会_SQL_05

● Lookup: MongoDB 连接器可以用在时态表关联中作为一个可 lookup 的 source (又称为维表),适用于流式数据处理时数据补全、打宽的场景。

XTransfer技术专家亮相2024MongoDB中国用户大会_数据_06

● 流批写入:MongoDB 连接器支持流式和批量写入 MongoDB,在指定主键时,支持 Upsert 方式写入 MongoDB。

XTransfer技术专家亮相2024MongoDB中国用户大会_数据_07

● 过滤器下推: MongoDB 支持将 Flink SQL 的简单比较和逻辑过滤器下推以优化查询,并支持细粒度的开关让用户决定是否开启过滤器下推。

XTransfer技术专家亮相2024MongoDB中国用户大会_SQL_08

Apache Flink CDC 是新一代的流式数据集成框架,并且增加了一些高级特性,如表结构变更自动同步(Schema Evolution)、数据转换(Data Transformation)、整库同步(Full Database Synchronization)以及精确一次(Exactly-once)语义。

XTransfer技术专家亮相2024MongoDB中国用户大会_SQL_09

Flink MongoDB CDC Connector 使用 MongoDB Change Stream 特性,实时捕获数据变更,转换成 Flink upsert 类型的变更流进行处理。

XTransfer技术专家亮相2024MongoDB中国用户大会_SQL_10

Flink MongoDB Connector 有以下四个功能特性:

● 增量快照: 接入了 Flink CDC 增量快照读框架,实现了并行增量快照读取的能力,加速快照过程,允许在快照阶段进行故障恢复。

● 多种启动模式: initial 初始读取数据快照,增量读取变更数据;lastest-offset 不读取快照,仅读取变更数据;timestamp 指定时间开始读取变更数据。

● 正则匹配多集合: 支持使用正则表达式匹配多库,多集合。

● Exactly-Once: 依托于增量快照读框架,支持精确一次读语义。

Flink SQL Planner 会对 Upsert 类型的 Changelog 使用 Changelog Normalize 算子标准化。但 Changelog Normalize 算子缓存流入的最新数据来补齐前置镜像值,带来额外的状态开销。在 MongoDB 6.0 版本,提供了 Pre- and Post-Images 选项,允许 Change Stream 返回变更完整的前置和后置镜像值,开启变更完整镜像配置后,Flink SQL Planner 会移除 Changelog Normalize 算子,从而大幅度减少状态开销,提升吞吐量。

XTransfer技术专家亮相2024MongoDB中国用户大会_数据_11

MongoDB 是一款高性能、高可用性和易扩展性的 NoSQL 数据库,在 XTransfer 有着较大规模的应用。为了推动 Apache Flink 和 MongoDB 相集成,由来自 XTransfer 的贡献者发起和贡献了 Flink MongoDB Connector 和 Flink MongoDB CDC Connector,使 Flink 具有了完整的 MongoDB 集成能力,可以实现 MongoDB 实时入湖入仓,MongoDB 与异构数据源计算,MongoDB 参与构建实时物化视图, MongoDB 构建实时数仓等场景。

XTransfer 技术团队正在关注包括人工智能、大数据等多个领域的技术发展,旨在运用前沿技术推动跨境金融解决方案的创新。XTransfer 一直秉承开放合作的理念,持续与社区保持互动,从开源中受益,并力所能及地反哺社区。