Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/drupal/3.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.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 窗口操作符行为澄清后的Apache Flink KeyedStream_Apache Flink_Partitioning_Flink Streaming_Sliding Window_Topography - Fatal编程技术网

Apache flink 窗口操作符行为澄清后的Apache Flink KeyedStream

Apache flink 窗口操作符行为澄清后的Apache Flink KeyedStream,apache-flink,partitioning,flink-streaming,sliding-window,topography,Apache Flink,Partitioning,Flink Streaming,Sliding Window,Topography,我请求澄清在事件通过窗口发送并应用了某些操作符(如reduce()或process())之后,Apache Flink(1.6.0)如何处理来自KeyedStreams的事件 假设一个单节点集群,在执行键控窗口流上的一个操作符后,剩下的是正好1个数据流还是正好k个数据流(其中k是键的唯一值的数量) 为澄清,考虑需要从某个源读取事件,通过一些K键,将键事件发送到一些窗口流,减少,然后做很多其他事情。下面两个图中,哪一个是实际构建的 图形A |-------

我请求澄清在事件通过窗口发送并应用了某些操作符(如reduce()或process())之后,Apache Flink(1.6.0)如何处理来自KeyedStreams的事件

假设一个单节点集群,在执行键控窗口流上的一个操作符后,剩下的是正好1个数据流还是正好k个数据流(其中k是键的唯一值的数量)

为澄清,考虑需要从某个源读取事件,通过一些K键,将键事件发送到一些窗口流,减少,然后做很多其他事情。下面两个图中,哪一个是实际构建的

图形A

                     |--------------|
                     |    source    |
                     | (DataStream) |
                     |--------------|
                            |
                       [all events]
                            |
                            v
                     |--------------|
                     |  key by( k ) |
                     | (KeyedStream)|
                     |--------------|
                   /         |        \
                 /           |          \
            [ k = 1 ]    [ k = 2 ]    [ k = 3 ]
             /               |               \
           /                 |                 \
         v                   v                   v
|------------------||------------------||------------------|
|  sliding window  ||  sliding window  ||  sliding window  |
| (WindowedStream) || (WindowedStream) || (WindowedStream) |
|------------------||------------------||------------------|
         |                   |                   |
     [ k = 1 ]           [ k = 2 ]           [ k = 3 ]
         |                   |                   |
         v                   v                   v
   |----------|        |----------|        |----------|
   |  reduce  |        |  reduce  |        |  reduce  |
   |----------|        |----------|        |----------|
         |                   |                   |
     [ k = 1 ]           [ k = 2 ]           [ k = 3 ]
         |                   |                   |
         v                   v                   v
  |--------------|    |--------------|    |--------------|
  |     foo      |    |     foo      |    |     foo      |
  | (DataStream) |    | (DataStream) |    | (DataStream) |
  |--------------|    |--------------|    |--------------|
图B

                     |--------------|
                     |    source    |
                     | (DataStream) |
                     |--------------|
                            |
                       [all events]
                            |
                            v
                     |--------------|
                     |  key by( k ) |
                     | (KeyedStream)|
                     |--------------|
                   /         |        \
                 /           |          \
            [ k = 1 ]    [ k = 2 ]    [ k = 3 ]
             /               |               \
           /                 |                 \
         v                   v                   v
|------------------||------------------||------------------|
|  sliding window  ||  sliding window  ||  sliding window  |
| (WindowedStream) || (WindowedStream) || (WindowedStream) |
|------------------||------------------||------------------|
         |                   |                   |
     [ k = 1 ]           [ k = 2 ]           [ k = 3 ]
         |                   |                   |
         v                   v                   v
   |----------|        |----------|        |----------|
   |  reduce  |        |  reduce  |        |  reduce  |
   |----------|        |----------|        |----------|
         \                   |                  /
            \                |                /
               \             |             /
                  \          |          /
                     \       |       /
                        \    |    /
                           \ | /
                       [all products]
                             |
                             v
                      |--------------|
                      |     foo      |
                      | (DataStream) |
                      |--------------|
编辑(2018-09-22)

基于David的回答,我认为我误解了KeyedStreams与窗口或其他流的结合方式。不知怎的,我得到了这样的印象:KeyedStream通过在幕后创建多个流来划分传入流,而不是使用同一个流根据某个值将对象分组在一起

我以为弗林克在做的事情相当于:

List<Foo> eventsForKey1 = ...;
List<Foo> eventsForKey2 = ...;
List<Foo> eventsForKey3 = ...;
...
List<Foo> eventsForKeyN = ...;
Map<Key, List<Foo>> events = ...;
List eventsForKey1=。。。;
列出事件orkey2=。。。;
列出事件标记3=。。。;
...
列出事件rkeyn=。。。;
我现在看到,弗林克实际上在做的是:

List<Foo> eventsForKey1 = ...;
List<Foo> eventsForKey2 = ...;
List<Foo> eventsForKey3 = ...;
...
List<Foo> eventsForKeyN = ...;
Map<Key, List<Foo>> events = ...;
Map事件=。。。;

探索各种场景下的工作图的最佳方式是编写一些简单的应用程序,并在Flink附带的仪表板中检查它们的工作图

我不知道如何解释你在按键后显示的扇出,这使得回答你的问题变得困难。如果您询问生成的foo数据流的并行性,它可以是您想要的任何形式

如果keyBy前后的并行度都是1,那么流将不会像您所示那样被分割。相反,将有一个单独的窗口操作符来处理所有的键。(并行性与关键点的数量无关,尽管已设置关键点的操作符(如滑动窗口及其reduce函数)不能利用大于关键点数量的并行性。)

但是,即使在单个节点中,也可以有多个核心,并将窗口操作符的并行度设置为3。如果你想要的话,reduce函数的结果可以被后续的操作符并行处理。但不管并行性如何,您的作业的这一部分将只有一个数据流(foo)

如果我误解了您的问题,请更新您的问题,我会再试一次。

我想您真正想问的是,您是否会在
reduce
操作之后使用
KeyedStream
。如果是这样,那么答案是否定的,您将得到一个常规的
数据流

尽管可以通过
datastreamits.reinterpretAsKeyedStream(DataStream,KeySelector)
将其转换回
KeyedStream
,但前提是您要小心确保没有更改用于创建窗口键的字段值