Apache flink中数据流/运算符和线程之间的相关性

时间:2017-11-09 09:22:30

标签: apache-flink flink-streaming

我正在尝试了解Flink在处理多个数据流和每个数据流的多个运算符时的运行时方面。

使用案例:单个flink作业中的N个数据流(每个数据流代表1个设备 - 具有不同的时间延迟),并且每个数据流被分成两个流,其中一个进入一堆CEP运算符,一个进入过程函数。

问题:

  1. 在运行时,引擎会为每个数据流创建一个线程吗?或者每个运营商一个线程?
  2. 是否可以在作业启动时在运行时动态创建数据流? (即,如果在作业开始时从文件中读取N并且需要创建相应的N个流)
  3. 创建大量流(N~10000)时是否会产生任何特定的性能影响,而不是单个流中的N个分区?

1 个答案:

答案 0 :(得分:0)

问题#1:在运行时,引擎会为每个数据流创建一个线程吗?或者每个运营商一个线程?

在我看来,流与运营商之间没有直接关系。您需要查看execution plans以了解流如何连接到运营商。它也取决于并行性,也有various types of parallelisms in flink

问题2:当作业开始时,是否可以在运行时动态创建数据流?

是的,有可能。简单的方法是创建一个实现RichParallelSourceFunction函数的流生成器​​,并以某种速率发送流。

问题3:创建大量流(N~10000)时,是否存在特定的性能影响,而不是单个流中的N个分区?

是的,我认为会有一些性能影响,您可以通过生成多个流然后比较处理延迟来证实这一点