Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flink 使用Flink实现大时间窗的流连接_Apache Flink_Flink Streaming - Fatal编程技术网

Apache flink 使用Flink实现大时间窗的流连接

Apache flink 使用Flink实现大时间窗的流连接,apache-flink,flink-streaming,Apache Flink,Flink Streaming,我需要根据密钥加入两个事件源。事件之间的间隔可能长达1年(即,id1的事件1可能在今天到达,第二个事件源的id1的相应事件2可能在一年后到达)。假设我只想输出连接的事件输出 我正在探索将Flink与RocksDB后端一起使用的选项(我遇到了一些表API,它们似乎适合我的用例)。我找不到进行这种长窗口连接的参考体系结构。我预计该系统每天处理大约2亿个事件 问题: 对于这种长窗连接,使用Flink是否存在明显的限制/陷阱 关于处理这种长窗口联接的任何建议 相关:我也在探索使用Lambda和Dynam

我需要根据密钥加入两个事件源。事件之间的间隔可能长达1年(即,id1的事件1可能在今天到达,第二个事件源的id1的相应事件2可能在一年后到达)。假设我只想输出连接的事件输出

我正在探索将Flink与RocksDB后端一起使用的选项(我遇到了一些表API,它们似乎适合我的用例)。我找不到进行这种长窗口连接的参考体系结构。我预计该系统每天处理大约2亿个事件

问题:

  • 对于这种长窗连接,使用Flink是否存在明显的限制/陷阱

  • 关于处理这种长窗口联接的任何建议


  • 相关:我也在探索使用Lambda和DynamoDB作为流连接()的状态。如果此信息相关,我将使用托管AWS服务。

    此用例的明显挑战是一年的大连接窗口大小和可能导致巨大状态大小的高摄取率

    这里的主要问题是这是否是1:1联接,即流a中的记录是否与流B中的记录精确(或最多)联接一次。这一点很重要,因为如果您有1:1联接,您可以在记录与另一个记录联接后立即将其从状态中删除,并且您不需要将其保留一整年。因此,您的州仅存储尚未加入的记录。假设大多数记录都很快加入,那么您所在的州可能仍然很小

    如果您有一个1:1连接,那么Flink表API(和SQL)的时间窗口连接和DataStream API的间隔连接就不是您想要的。它们被实现为m:n联接,因为每个记录都可能与另一个输入的多个记录联接。因此,它们保留整个窗口间隔的所有记录,即在您的用例中保留一年。如果您有一个1:1联接,您应该将联接自己实现为一个
    keyedcomprocessfunction


    如果每个记录可以在一年内加入多次,那么就没有办法缓冲这些记录。在这种情况下,您可以使用Flink表API(和SQL)的时间窗口联接和DataStream API的间隔联接。

    BTW,这里有一个1:1联接和的示例。@Fabian Hueske感谢您的快速响应。我很想知道庞大的国家规模的含义是什么?1.它是否会影响性能(连接性能/吞吐量)2。它是否会影响操作开销(群集维护)(假设AWS是我唯一的选择)流应用程序需要确保在出现故障时不会丢失其状态。Flink会定期执行检查点,这意味着它会将应用程序状态复制到远程持久性存储系统。对于较大的状态,这会变得更昂贵。对于恢复,将重新加载状态。再说一次,如果国家规模很大,这将更加昂贵。