开发者社区 > 大数据与机器学习 > 实时计算 Flink > 正文

Flink CDC我创建了两个检查点,一次启动生成01,他不会执行这个insert 数据是怎么回事?

Flink CDC我创建了两个检查点,一次启动生成01,一次启动生产到02,这两个检查点都完成了快照,这时候02的程序过程中我执行了insert,然后我从01恢复,他不会执行这个insert 数据是怎么回事?我使用的是postgresql,我在想是不是跟postgresql的复制槽有关系,因为我是指定同一个复制槽,这个复制槽只能被一个进程处理?

展开
收起
真的很搞笑 2023-10-10 18:56:07 47 0
3 条回答
写回答
取消 提交回答
  • 数据库的变更日志没有更新:如果在生成检查点时,数据库的变更日志没有更新,那么Flink CDC可能会错过这个insert数据。在Flink CDC中,如果数据库的变更日志没有更新,那么Flink CDC无法正确地读取和处理binlog消息,可能会导致数据丢失。
    检查点间隔设置过短:如果检查点间隔设置过短,那么Flink CDC可能会频繁地生成检查点,导致检查点数量过多。在Flink CDC中,如果检查点数量过多,可能会导致Flink无法正确地处理检查点,从而影响数据的正确性和完整性。

    2023-10-12 16:14:25
    赞同 展开评论 打赏
  • 在Flink CDC中,检查点是一种用于保存和恢复任务状态的方式。当你创建一个新的检查点时,Flink会将当前任务的状态保存到磁盘上,并将新的检查点信息写入到检查点文件中。当任务重新启动时,Flink会从检查点文件中读取检查点信息,并将任务状态恢复到检查点的状态。
    在你的情况下,你创建了两个检查点,并且从01检查点恢复了任务。在你执行insert操作后,你从01检查点恢复了任务。由于01检查点的状态已经被保存到磁盘上,因此在你执行insert操作后,Flink不会执行这个insert操作。这是因为Flink会从检查点文件中读取检查点信息,并将任务状态恢复到检查点的状态,而不是从数据库中读取数据。
    如果你想要在任务恢复后执行insert操作,你可以使用Flink的checkpoint recovery模式。在checkpoint recovery模式下,Flink会在每次启动任务时,从最新的检查点文件中读取检查点信息,并将任务状态恢复到检查点的状态。这样,你就可以在任务恢复后执行insert操作了。如果你使用的是PostgreSQL,那么在Flink CDC中,你需要使用PostgreSQL的逻辑复制功能来实现数据的复制和同步。在PostgreSQL中,逻辑复制是一种用于复制和同步数据库数据的方式,它可以通过复制槽来实现。在Flink CDC中,你可以通过指定相同的复制槽来实现数据的复制和同步。由于复制槽只能被一个进程处理,因此在你启动多个任务时,你需要确保这些任务都指定了不同的复制槽,以避免数据的冲突和不一致性。

    2023-10-11 14:51:42
    赞同 展开评论 打赏
  • Flink的CDC(Change Data Capture)功能在捕获数据库更改数据时,会维护一个全局的变更跟踪。这个跟踪会记录所有已经捕获到的变更,以便在故障恢复时,不会重复捕获已经捕获过的变更。

    在你描述的情况下,当你从01的检查点恢复时,Flink的CDC插件会发现已经存在一个变更跟踪,所以这个插入操作(insert)不会被捕获。这是因为在你从01的检查点恢复之前,这个插入操作已经在一个更早的检查点中被捕获过了。

    这与PostgreSQL的复制槽(replication slot)无关。复制槽是用来在多个PostgreSQL实例之间同步数据的,而Flink的CDC插件是在单个实例上捕获数据库的更改数据。

    如果你希望再次捕获这个插入操作,你需要清除Flink的CDC插件的变更跟踪,然后再从01的检查点恢复。你可以通过调用Flink的CDC插件的API来清除变更跟踪。

    2023-10-11 13:55:00
    赞同 展开评论 打赏

实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。

相关产品

  • 实时计算 Flink版
  • 相关电子书

    更多
    Flink CDC Meetup PPT - 龚中强 立即下载
    Flink CDC Meetup PPT - 王赫 立即下载
    Flink CDC Meetup PPT - 覃立辉 立即下载