Hi: Leonard Xu 感谢回复 > 2.debezium是通过jdbc查询源表的数据来加载全量的历史数据吗? 这块会不会对数据库造成瞬时压力? > 不会,不是直接查询源表,所以不会锁表,加载全量历史数据时只是读取binlog的一个offset 这里恰好是我的疑问,之前看debezium代码,没有找到使用jdbc加载全量历史数据的代码,debezium的snapshot看起来只是保存了表的schema变更记录,这样重新消费binlog时,可以为每条binlog数据找到正确schema,达到正确解析历史数据的目的。
我的疑问是,如果加载全量历史数据,只是指定binlog的offset,从头读取binlog,那么是不是有可能无法加载到全量的数据,因为通常binlog是有过期时间的,不会保存全量的binlog。如果我理解的没问题,那么目前flink1.11 的cdc是无法加载全量历史数据的。 我理解加载全量数据,无非两种方式: 1.jdbc从源表全量拉取数据 2.将原表数据初始化到一个kafka topic中(topic设置为compact模式),再消费binlog,往这个topic里写入增量数据,确保这个topic的数据和原表一致,然后flink作业启动时,从这个topic的earliest offset消费,得到全量的历史数据。 不知道我的理解是否正确,希望能帮忙解答 Best, Xingxing Di 发件人: Leonard Xu 发送时间: 2020-08-25 10:03 收件人: user-zh 主题: Re: 请问一下,flink 1.11 的cdc历史数据问题 Hello > Flink1.11 的cdc是支持加载历史数据的,有两个问题想求证一下: > 1.底层是使用了debezium来加载历史数据的吗? Flink支持两种CDC格式,debezium json和 canal json, debezium 和 canal都是CDC系统,简单说他们可以把数据库表的binlog以对应的json写入到消息队列如Kafka, 作为下游系统的Flink 支持去消费对应的cdc数据,两个CDC工作都支持加载历史数据的。 另外Jark 在Veverica 开源了一个Flink CDC connector [1],支持利用debezuim直接读取数据库的cdc数据,不需要搭建CDC系统。 > 2.debezium是通过jdbc查询源表的数据来加载全量的历史数据吗? 这块会不会对数据库造成瞬时压力? 不会,不是直接查询源表,所以不会锁表,加载全量历史数据时只是读取binlog的一个offset Best Leonard [1] https://github.com/ververica/flink-cdc-connectors <https://github.com/ververica/flink-cdc-connectors>