1. 项目背景与核心价值
最近在数据仓库迁移项目中遇到一个典型需求:需要将业务系统产生的MongoDB文档数据实时同步到ClickHouse进行分析查询。经过技术选型,最终决定采用Flink 1.20 + CDC 3.5的方案实现。这个方案最大的优势在于能够实现端到端的Exactly-Once语义,同时保持毫秒级的延迟。
为什么选择这个技术组合?MongoDB作为文档数据库,其灵活的模式和嵌套结构给传统ETL工具带来了巨大挑战。而Flink CDC连接器能够原生支持MongoDB的变更流(Change Stream),自动处理文档结构的动态变化。ClickHouse作为分析型数据库,其列式存储和向量化执行引擎非常适合聚合查询,但写入吞吐量有限。Flink的流批一体特性正好可以平衡两者的差异。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 环境准备与组件部署
2.1 组件版本选择
在开始前需要特别注意版本兼容性:
- Flink 1.20.1(建议使用官方编译的Scala 2.12版本)
- Flink CDC Connectors 3.5.0
- MongoDB 4.4+(必须启用副本集才能使用Change Stream)
- ClickHouse 22.3+(需要JDBC驱动版本0.3.2+)
重要提示:Flink CDC 3.x版本与Flink 1.20存在API兼容性问题,需要手动解决部分依赖冲突。建议使用Maven shade插件重新打包。
2.2 MongoDB配置要点
确保MongoDB已正确配置副本集:
bash复制# 启动mongod时指定副本集名称
mongod --replSet rs0 --bind_ip_all
# 初始化副本集配置
rs.initiate({
_id: "rs0",
members: [{
_id: 0,
host: "localhost:27017"
}]
})
还需要为CDC连接器创建专用用户:
javascript复制use admin
db.createUser({
user: "flinkcdc",
pwd: "securepassword",
roles: [
{role: "read", db: "source_db"},
{r
