tongchenkeji 发表于:2023-2-16 12:38:520次点击 已关注取消关注 关注 私信 当我多个任务往同一个数据库表做upsert时,容易造成死锁,有什么机制可以让flink sink时超[阿里云实时计算 Flink版] 暂停朗读为您朗读 当我多个任务往同一个数据库表做upsert时,容易造成死锁,有什么机制可以让flink sink时超时就放弃吗? 「点点赞赏,手留余香」 赞赏 还没有人赞赏,快来当第一个赞赏的人吧! 海报 实时计算Flink版# 实时计算 Flink版3179# 数据库1310# 流计算2236
认真学习的heartAM 2023-11-27 18:26:30 2 可以去了解一下有种机制叫做“Checkpointing”。Checkpointing可以帮助你在多个任务往同一个数据库表做upsert时,避免死锁的发生。它可以让Flink在每次sink时,都会检查是否有其他任务正在操作同一个表,如果有,则会等待一段时间,如果超时则放弃。
凌云CloudAM 2023-11-27 18:26:30 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机制可以减少数据丢失的风险,但也会增加系统的开销和延迟。
可以去了解一下
可以去了解一下有种机制叫做“Checkpointing”。Checkpointing可以帮助你在多个任务往同一个数据库表做upsert时,避免死锁的发生。它可以让Flink在每次sink时,都会检查是否有其他任务正在操作同一个表,如果有,则会等待一段时间,如果超时则放弃。
这个改一下sink不就好了,catch一下异常自己加下异常策略的处理.
此答案来自钉钉群“【2】Apache Flink China 社区”
楼主你好,Flink 提供了一种名为 “RetryingFailedSinkFunction”的机制,可以在Sink出现失败时进行重试。这个机制通过在sink调用时设置超时和最大重试次数,可以在遇到死锁等情况时,自动重试sink操作,以便尽可能地消除死锁的影响。例如:
在这个例子中,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机制可以减少数据丢失的风险,但也会增加系统的开销和延迟。