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

Flink CDC有什么办法或者什么方法可以回滚这种操作之类的吗?

Flink CDC我现在有个这个场景就是监听mysql读出来的数据我会落库到日志表中,但是如果这条数据因为网络原因反正各种原因抛出了异常,虽然有重新执行机制但是有次数限制,打比方3次执行完3次都异常然后监听会停止,这个时候我重新启动监听,那么他不会读我异常的这条数据,而是继续读取新的数据,这样就永远丢失这条数据了,有什么办法或者什么方法可以回滚这种操作之类的吗?

展开
收起
真的很搞笑 2023-11-22 09:33:29 101 0
4 条回答
写回答
取消 提交回答
  • 面对过去,不要迷离;面对未来,不必彷徨;活在今天,你只要把自己完全展示给别人看。

    在 Flink CDC 中,当数据处理过程中发生异常时,会自动重试若干次,但如果重试次数达到上限,就会放弃当前记录,并继续处理下一个记录。因此,在这种情况下,您可以考虑以下几种方式来避免数据丢失:

    1. 设置重试次数足够多:当数据处理失败时,系统会自动重试多次以确保所有数据都能被正确处理。
    2. 使用事务或分布式快照技术:可以保证即使任务失败也能恢复到一个稳定状态,从而确保数据的一致性和完整性。
    3. 使用 Kudu 或 HBase 等存储系统:Kudu 和 HBase 提供了事务和记录级别的数据备份功能,可以帮助您实现事务一致性。
    4. 使用消息队列:将数据放入消息队列,然后让任务重新执行之前未成功处理的数据。
    2023-11-29 13:33:02
    赞同 展开评论 打赏
  • 对于Flink CDC的情况,如果在消费数据的过程中发生了异常,并且超过了重试次数,那么Flink CDC并不会自动回滚或者重试。这是因为Flink CDC的设计目标是实时的数据同步,而不是事务性的数据处理。

    在这种情况下,你可能需要在业务逻辑层面进行处理。例如,你可以设计一个消息队列系统,将需要消费的数据放入消息队列中。然后在消费数据的过程中,如果出现异常,你可以将数据重新放入消息队列中,等待下一次的消费。

    另外,你也可以考虑使用Flink的Checkpoint机制。Checkpoint机制可以帮助你在出现故障时,恢复到最近的Checkpoint状态,从而避免数据丢失。但是需要注意的是,Checkpoint机制可能会增加系统的延迟和开销。

    总的来说,你需要根据你的业务需求和系统环境,设计适合你的数据处理流程。

    2023-11-29 12:01:12
    赞同 展开评论 打赏
  • 为了解决这个问题,尝试以下方法:

    1. 异常重试:配置合理的重试次数,并为异常记录增加标志以表示是否已经被处理过。
    2. 消息队列持久化:在消费失败的情况下,您可以将消息重新推入队列,并在以后的时间点重新消费。
    3. 使用 Dead Letter Queue:把故障消息放入 DLQ 并定期清理。
    4. 跟踪日志和事务:使用事务来确保每条消息都被正确处理,并将故障消息保存在日志中。
    2023-11-22 17:00:42
    赞同 展开评论 打赏
  • flink-cdc就是保证你不多不少,建议你从上一个执行的检查点继续,报错是绕不过去这个binlog对应的数据吧,从flink官网看哈,但其实你还是绕不过去那个错误的点位,建议全量重跑下,此回答整理自钉群“Flink CDC 社区”

    2023-11-22 12:11:12
    赞同 展开评论 打赏

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

相关产品

  • 实时计算 Flink版
  • 热门讨论

    热门文章

    相关电子书

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