问题1:大佬们 我有个Flink问题 我用flinksql进行了分组并统计 将统计结果写入oracle 。如果多并行写入会报死锁,只能把并行度设置为1才能写入。这是因为对同一个主键同时进行了marge操作导致的吗?
问题2:因为统计数据变了要进行更新吧?count值一直在变的
问题1:如果在多并行度下写入 Oracle 数据库时出现死锁,可能是由于对相同主键同时执行 MERGE 操作导致的。当多个并行任务同时尝试插入或更新具有相同主键值的行时,可能会导致死锁情况。在这种情况下,将并行度设置为1可以解决死锁问题,但同时也会限制并行性能。
解决这个问题的一种方法是使用 Flink 的 upsert 模式,而不是 MERGE 模式。upsert 模式在插入冲突时会执行更新操作,而不是死锁。您可以在连接器配置中设置 sink.upsert-mode 参数为 upsert,以启用 upsert 模式的写入。
另外,您还可以考虑调整数据库的隔离级别或使用数据库级别的锁机制来处理并发写入的问题。这可能需要与数据库管理员或专业人员一起进行讨论和调整。
问题2:如果统计数据是实时变化的,您可以使用 Flink 提供的流式计算能力来更新统计结果。可以将源表和结果表都定义为流表,并使用 Flink 的窗口操作和聚合函数来处理实时数据的更新。
例如,您可以定义一个流式查询,将源表中的数据按照一定的窗口大小进行分组和统计,然后将结果写入到 Oracle 数据库中。这样,当源表中的数据更新时,Flink 会自动根据窗口的触发机制重新计算并更新统计结果。
具体的实现方式和查询语句会根据您的数据模型和需求而有所不同。您可以使用 Flink SQL 提供的窗口和聚合函数,或者使用 Flink 的 DataStream API 来编写相应的逻辑。
回答1:我认为insert的话应该没事,不会有行锁
回答2:或者关注下该库目前的事务机制是什么?如果业务要求,是否可以更改?这个是全局的,要慎重。事务隔离级别。更新就会锁,不管是否按照主键更新,此回答整理自钉群“【①群】Apache Flink China社区”
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
实时计算Flink版是阿里云提供的全托管Serverless Flink云服务,基于 Apache Flink 构建的企业级、高性能实时大数据处理系统。提供全托管版 Flink 集群和引擎,提高作业开发运维效率。