开发者社区> 问答> 正文

使用DataStream → IterativeStream → DataStream 出问题

想请教各位一个问题:目前有一个这样的需求:

两个事实流A 和B, 需要使用B 去关联A 。现在A的消息可能比B或早或晚达到,时间长度最长可能晚两天。

目前方案是:StreamA connect StreamB , 将A、B分别去对方的mapstate中去关联,关联上则下发,关联不上则写入自己的mapstate中,等待对方来关联。但是目前还是存在一些误差,猜测是 部分AB的消息同时到达同时写入自身的mapstate中,无法触发关联下发。

所以目前在想了另一个方案: 将 流A写入外部kv(tair)存储中, 然后用B采用.iterate()的方式持续去关联tair。现在有个疑问,比如有部分数据关联不上,那么B中有消息产生死循环持续运行关联,这个问题有没有什么好的解决方案

*来自志愿者整理的flink邮件归档

展开
收起
小阿怪 2021-12-06 12:26:30 887 0
1 条回答
写回答
取消 提交回答
  • 我认为你后提出的那个方法没用,不清楚你想怎么做。

    这个问题本身用你的第一个方法是没问题的,误差可以再分析下,不存在你说的2个同时写入的逻辑(flink的task是单线程,不会有并发问题)。

    其次,你说的第一种方法(connect)的方式,flink本身就提供了现成的实现的,即intervalJoin,貌似不需要你自己去实现。

    *来自志愿者整理的flink邮件归档

    2021-12-06 13:26:51
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载