我正在我的本地计算机上开发一个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 :(得分:0)
如果您还没有,我建议您阅读https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html,它解释了Flink运行时的组织方式。
每个任务管理器(工作节点)都有一些任务槽(至少一个),而Flink群集需要的工作槽数与作业中使用的最高并行度一样多。因此,如果整个作业具有一个并行性,那么单个节点就足够了。如果并行度为N且少于N个任务槽可用,则无法执行作业。
Flink社区正致力于动态重新缩放,但从版本1.3开始,它尚未推出。