2017-06-22 27 views
1

我在本地计算机上开发一个Flink玩具应用程序,然后在真实群集上部署真实的玩具应用程序。 现在我必须确定需要设置群集的节点数量。关于Flink上的节点号

但是我仍然对有多少节点需要考虑执行我的应用程序感到困惑。

例如,如果我有以下代码(从DOC):

DataStream<String> lines = env.addSource(new FlinkKafkaConsumer<>()...); 

DataStream<Event> events = lines.map((line)->parse(line)); 

DataStream<Statistics> stats = events 
     .keyBy("id"); 
     .timeWindow(Time.seconds(10)) 
     .apply(new MyWindowAggregationFunction()); 

stats.addSink(new RollingSink(path)); 
  • 这意味着,操作“上同一行”在相同的节点上执行? (这听起来有点怪我)

一些证实:

  • 如果回答前一个问题是肯定的,如果我设置并行至1,我可以建立我需要多少个节点计数如何我必须执行许多操作?

  • 如果我将并行度设置为N,但我的可用节点少于N个,Flink会自动缩放可用节点上的精细度?

我的吞吐量和数据负载不相关我认为这并不重要。

回答

0

如果您还没有,我推荐阅读https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html,它解释了Flink运行时是如何组织的。

每个任务管理器(工作者节点)都有一定数量的任务插槽(至少一个),而Flink集群需要的作业数量与作业中使用的最高并行度一样多。所以如果整个作业具有一个并行性,那么单个节点就足够了。如果并行度是N并且少于N个任务槽可用,则该作业不能被执行。

Flink社区正在进行动态重新缩放,但从1.3版开始,它尚不可用。

+0

好的,但是,看看图像: https://ibb.co/dCYVHk 我想建立一个像这样的管道,其中每个圆代表一个不同的物理节点。在我看来,我的并行度为'1',并且集群是像图像中的一组管道(也是因为我有一个无界流,所以我更喜欢如果每个节点必须执行快速操作(实时)以避免创建长队列) –

+0

Flink可以灵活地按照您描述的方式进行配置。您可以安排每个插槽有多个CPU,并且您还可以通过任务链和资源组来控制操作员分组(https://ci.apache.org/projects/flink/flink-docs-release -1.3的/ dev/datastream_api.html#任务链和资源-组)。 –