Streaming non window left outer join
是flink1.6中的新功能。当我在两个动态表之间进行操作时。连接结果出现故障。我应该如何正确使用此功能?
这两个动态表均按data_update_time
排序。 NonWindowJoin左表状态和右表状态均使用flink管理状态MapState
。当我查看flink的non window join
代码时。我感到困惑:
(1)NonWindowJoin.scala code
MapState
的键是Row
对象。 hashCode
的{{1}}和equal
函数由Row
的所有字段确定。因此,如果流事件来自mysql数据库的Row
,则binlog
将始终追加(不更新)。该MapState[Row, JTuple2[Long, Long]]
将记录与mysql数据库中相同记录的变更日志。我怀疑联接结果的顺序是否不确定?
(2)进行迭代时,是否按放置状态的顺序遍历?
(3)如何查找加入结果的原因。
答案 0 :(得分:0)
不能保证连接结果的顺序。就像在关系数据库中一样,Flink的联接以便于实现和高效实现的顺序生成结果。通过MapState
对象联接迭代,这些迭代器的具体顺序取决于所使用的状态后端。