关于Flink

时间:2017-06-22 17:16:19

标签: cluster-computing apache-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会自动缩放可用节点上的详细信息吗?

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

1 个答案:

答案 0 :(得分:0)

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

每个任务管理器(工作节点)都有一些任务槽(至少一个),而Flink群集需要的工作槽数与作业中使用的最高并行度一样多。因此,如果整个作业具有一个并行性,那么单个节点就足够了。如果并行度为N且少于N个任务槽可用,则无法执行作业。

Flink社区正致力于动态重新缩放,但从版本1.3开始,它尚未推出。