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

当我多个任务往同一个数据库表做upsert时,容易造成死锁,有什么机制可以让flink sink时超

当我多个任务往同一个数据库表做upsert时,容易造成死锁,有什么机制可以让flink sink时超时就放弃吗?

展开
收起
绿子直子 2023-02-16 12:38:52 962 1
4 条回答
写回答
取消 提交回答
  • 可以去了解一下

    2023-02-19 08:20:00
    赞同 展开评论 打赏
  • 可以去了解一下有种机制叫做“Checkpointing”。Checkpointing可以帮助你在多个任务往同一个数据库表做upsert时,避免死锁的发生。它可以让Flink在每次sink时,都会检查是否有其他任务正在操作同一个表,如果有,则会等待一段时间,如果超时则放弃。

    2023-02-17 08:06:07
    赞同 展开评论 打赏
  • 这个改一下sink不就好了,catch一下异常自己加下异常策略的处理.

    此答案来自钉钉群“【2】Apache Flink China 社区”

    2023-02-17 08:04:04
    赞同 展开评论 打赏
  • 发表文章、提出问题、分享经验、结交志同道合的朋友

    楼主你好,Flink 提供了一种名为 “RetryingFailedSinkFunction”的机制,可以在Sink出现失败时进行重试。这个机制通过在sink调用时设置超时和最大重试次数,可以在遇到死锁等情况时,自动重试sink操作,以便尽可能地消除死锁的影响。例如:

    DataStream<T> stream = ...;
    stream.addSink(new RetryingFailedSinkFunction(new MySink(), 3, Time.seconds(30)));
    

    在这个例子中,MySink() 是用户自定义的 SinkFunction,3 表示最大重试次数,Time.seconds(30) 表示每次重试之间的间隔时间为 30 秒。当SinkFunction失败时,RetryingFailedSinkFunction 会自动重试,直到达到最大重试次数或者成功为止。

    在Flink 1.12及以上版本中,还引入了一个新的机制叫做 “Write-Ahead Log (WAL)”,它可以在Sink出现故障时自动恢复数据。通过启用WAL,Flink会在数据到达Sink之前,先将数据写入WAL文件中,如果Sink出现故障,Flink可以使用WAL文件来恢复Sink中的数据。WAL机制可以减少数据丢失的风险,但也会增加系统的开销和延迟。

    2023-02-16 14:53:25
    赞同 1 展开评论 打赏

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

相关产品

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

    更多
    DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
    阿里云瑶池数据库精要2022版 立即下载
    2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载