关于 Flink 上的节点数
About nodes number on Flink
我正在我的本地机器上开发一个 Flink 玩具应用程序,然后将真实的应用程序部署到真实的集群上。
现在我必须确定我需要多少个节点来设置集群。
但我仍然对我必须考虑多少节点来执行我的应用程序感到困惑。
例如,如果我有以下代码(来自文档):
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));
- 这意味着操作"on same line"是在同一个节点上执行的? (我觉得有点奇怪)
部分确认:
如果对上一个问题的回答是肯定的,并且如果我将并行度设置为 1,我可以确定我需要多少个节点来计算我必须执行多少个操作?
如果我将并行度设置为 N 但我的可用节点少于 N 个,Flink 会自动扩展可用节点上的详细信息吗?
我认为我的吞吐量和数据负载不相关,它不重。
如果您还没有阅读过,我建议您阅读 https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html,其中解释了 Flink 运行时是如何组织的。
每个任务管理器(工作节点)都有一定数量的任务槽(至少一个),并且 Flink 集群需要与作业中使用的最高并行度一样多的任务槽。因此,如果整个作业的并行度为 1,那么单个节点就足够了。如果并行度为N,可用的任务槽少于N个,则作业无法执行。
Flink 社区正在致力于动态缩放,但从 1.3 版本开始,还没有。
我正在我的本地机器上开发一个 Flink 玩具应用程序,然后将真实的应用程序部署到真实的集群上。 现在我必须确定我需要多少个节点来设置集群。
但我仍然对我必须考虑多少节点来执行我的应用程序感到困惑。
例如,如果我有以下代码(来自文档):
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));
- 这意味着操作"on same line"是在同一个节点上执行的? (我觉得有点奇怪)
部分确认:
如果对上一个问题的回答是肯定的,并且如果我将并行度设置为 1,我可以确定我需要多少个节点来计算我必须执行多少个操作?
如果我将并行度设置为 N 但我的可用节点少于 N 个,Flink 会自动扩展可用节点上的详细信息吗?
我认为我的吞吐量和数据负载不相关,它不重。
如果您还没有阅读过,我建议您阅读 https://ci.apache.org/projects/flink/flink-docs-release-1.3/concepts/runtime.html,其中解释了 Flink 运行时是如何组织的。
每个任务管理器(工作节点)都有一定数量的任务槽(至少一个),并且 Flink 集群需要与作业中使用的最高并行度一样多的任务槽。因此,如果整个作业的并行度为 1,那么单个节点就足够了。如果并行度为N,可用的任务槽少于N个,则作业无法执行。
Flink 社区正在致力于动态缩放,但从 1.3 版本开始,还没有。