传统数据同步方案
基于 Flink SQL CDC 的数据同步方案(Demo)
Flink SQL CDC 的更多应用场景
Flink SQL CDC 的未来规划
直播回顾:
https://www.bilibili.com/video/BV1zt4y1D7kt/
传统的数据同步方案与
Flink SQL CDC 解决方案
业务系统经常会遇到需要更新数据到多个存储的需求。例如:一个订单系统刚刚开始只需要写入数据库即可完成业务使用。某天 BI 团队期望对数据库做全文索引,于是我们同时要写多一份数据到 ES 中,改造后一段时间,又有需求需要写入到 Redis 缓存中。
Flink SQL CDC 数据同步与原理解析
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
-
能够捕获所有数据的变化,捕获完整的变更记录。在异地容灾,数据备份等场景中得到广泛应用,如果是基于查询的 CDC 有可能导致两次查询的中间一部分数据丢失 -
每次 DML 操作均有记录无需像查询 CDC 这样发起全表扫描进行过滤,拥有更高的效率和性能,具有低延迟,不增加数据库负载的优势 -
无需入侵业务,业务解耦,无需更改业务模型 -
捕获删除事件和捕获旧记录的状态,在查询 CDC 中,周期的查询无法感知中间数据是否删除
选择 Flink 作为 ETL 工具
https://github.com/ververica/flink-cdc-connectors
-
开箱即用,简单易上手 -
减少维护的组件,简化实时链路,减轻部署成本 -
减小端到端延迟 -
Flink 自身支持 Exactly Once 的读取和计算 -
数据不落地,减少存储成本 -
支持全量和增量流式读取 -
binlog 采集位点可回溯*
基于 Flink SQL CDC 的
数据同步方案实践
下面给大家带来 3 个关于 Flink SQL + CDC 在实际场景中使用较多的案例。在完成实验时候,你需要 Docker、MySQL、Elasticsearch 等组件,具体请参考每个案例参考文档。
案例 1 : Flink SQL CDC + JDBC Connector
https://www.bilibili.com/video/BV1bp4y1q78d
案例 2 : CDC Streaming ETL
CREATE TABLE orders (order_id INT,order_date TIMESTAMP(0),customer_name STRING,price DECIMAL(10, 5),product_id INT,order_status BOOLEAN) WITH ('connector' = 'mysql-cdc','hostname' = 'localhost','port' = '3306','username' = 'root','password' = '123456','database-name' = 'mydb','table-name' = 'orders');SELECT * FROM orders
视频链接: https://www.bilibili.com/video/BV1zt4y1D7kt 文档教程: https://github.com/ververica/flink-cdc-connectors/wiki/中文教程
案例 3 : Streaming Changes to Kafka
视频链接:
https://www.bilibili.com/video/BV1zt4y1D7kt
文档教程:
https://github.com/ververica/flink-cdc-connectors/wiki/中文教程
Flink SQL CDC 的更多应用场景
Flink 在数据同步场景中的灵活定位
-
如果你已经有 Debezium/Canal + Kafka 的采集层 (E),可以使用 Flink 作为计算层 (T) 和传输层 (L) -
也可以用 Flink 替代 Debezium/Canal ,由 Flink 直接同步变更数据到 Kafka,Flink 统一 ETL 流程 -
如果不需要 Kafka 数据缓存,可以由 Flink 直接同步变更数据到目的地,Flink 统一 ETL 流程
Flink SQL CDC : 打通更多场景
-
实时数据同步,数据备份,数据迁移,数仓构建 优势: 丰富的上下游(E & L),强大的计算(T),易用的 API(SQL),流式计算低延迟 -
数据库之上的实时物化视图、流式数据分析 -
索引构建和实时维护 -
业务 cache 刷新 -
审计跟踪 -
微服务的解耦,读写分离 -
基于 CDC 的维表关联
未来规划
未来规划
-
FLIP-132 :Temporal Table DDL(基于 CDC 的维表关联) -
Upsert 数据输出到 Kafka -
更多的 CDC formats 支持(debezium-avro, OGG, Maxwell) -
批模式支持处理 CDC 数据 -
flink-cdc-connectors 支持更多数据库
总结
Q & A
Q & A
1、GROUP BY 结果如何写到 Kafka ?
因为 group by 的结果是一个更新的结果,目前无法写入 append only 的消息队列中里面去。更新的结果写入 Kafka 中将在 1.12 版本中原生地支持。在 1.11 版本中,可以通过 flink-cdc-connectors 项目提供的 changelog-json format 来实现该功能,具体见文档。
文档链接:
https://github.com/ververica/flink-cdc-connectors/wiki/Changelog-JSON-Format
2、CDC 是否需要保证顺序化消费?

本文分享自微信公众号 - 浪尖聊大数据(bigdatatip)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。
来源:oschina
链接:https://my.oschina.net/u/4590259/blog/4701992