我从两个流中获取数据。我想基于一个键连接这两个流。例如,考虑两个流。流A中的数据可以先出现。有时流B中的数据可以优先出现。流中的连接数据可以在任何时候出现。由于这种性质,我不能使用窗口连接。有可能将两个无界流连接在一起吗?
我相信一个非窗口的Join会像你想的那样运行:https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/sql/queries/joins/#regular-joins
如果您使用的是DataStream API
而不是SQL API
,则CoFlatMap
操作符实现了共享状态,该操作符保留了两边的元素并在有更新时将它们连接起来,这也将允许您实现此行为。
考虑到这需要使双方永远处于状态,这可以使状态无限增长。
Flink SQL文档中的注释建议查看设置状态TTL: https://nightlies.apache.org/flink/flink-docs-stable/docs/dev/table/config/#table-exec-state-ttl。问题是,如果状态中的某些记录过期,并且需要与过期元素连接的更新,则结果将是不正确的。