flink connector怎么保证数据的一致性的操作
1.flink的operator是可以通过相关的配置来保证operator的一致性的,这个不是主要讨论的问题;
2.下面我们主要讨论的问题是在数据层面,flink是如何保证数据的基准的一次性的消费的。
首先,我们需要有如下的前提,我们认为程序是会出错的,并且flink的处理任务是会报错的。那么我们已经可以获取得到算子的状态数据了,那么我们小得的数据是如何能够实现查找的。下面是一些典型的框架的处理思路的。我们首先讨论的是数据的source侧,然后处理的是数据的sink的,看一下如何保证数据的exactly-once的消费的
source侧:
1)kafka,rabiitmq:source端维护对应的offset就可以实现数据的精准的一次性的消费的。对应的维护相关的offset就可以了,根据offset就可以实现精准的offset的消费的。
2)mysql的cdc的connector对应的也是存储了相关的offset来保证对应的excatly-once的数据消费的,对应的文件是BinlogOffset ,对应的是结合了offset加上相关的snapshot机制来实现的。mysql的cdc的话只能作为source来操作的,如果想要对应的sink操作的话,需要的是flink的jdbc的connector的机制来操作的。flink的底层是使用Debezium来读取mysql的changlog的数据,而不是使用canel来读取数据的。mysql的cdc是采用单线程读取数据的。cdc是不会动态的捕获数据库的schema的变更的。
3)mongodb的cdc:mongodb的cdc利用的是mongodb的新特性的,对应的是采用相关的Change Stream来发送消息时间,订阅消息完成数据订阅操作的。需要的是mongod
flink下面的connector的一致性的思考
于 2022-03-26 16:53:58 首次发布
![](https://img-home.csdnimg.cn/images/20240711042549.png)