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>

回复