当我多个任务往同一个数据库表做upsert时,容易造成死锁,有什么机制可以让flink sink时超[阿里云实时计算 Flink版]

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

「点点赞赏,手留余香」

    还没有人赞赏,快来当第一个赞赏的人吧!
=====这是一个广告位,招租中,联系qq 78315851====
3 条回复 A 作者 M 管理员
  1. 可以去了解一下

  2. 可以去了解一下有种机制叫做“Checkpointing”。Checkpointing可以帮助你在多个任务往同一个数据库表做upsert时,避免死锁的发生。它可以让Flink在每次sink时,都会检查是否有其他任务正在操作同一个表,如果有,则会等待一段时间,如果超时则放弃。

  3. 这个改一下sink不就好了,catch一下异常自己加下异常策略的处理.

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

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

    DataStream 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机制可以减少数据丢失的风险,但也会增加系统的开销和延迟。