Apache storm ApacheStorm:为什么以及如何选择每个执行者的任务数?
根据报告: 要为喷口/螺栓创建多少个实例。一个任务在一个线程上运行,同一个喷口/螺栓的其他任务为零或多个。在拓扑的整个生命周期内,喷口/螺栓的任务数始终相同,但喷口/螺栓的执行器(线程)数可能会随时间而变化。这使得拓扑可以扩展到更多或更少的资源,而无需重新部署拓扑或违反Storm的约束(例如,字段分组可以确保相同的值用于相同的任务) 我的问题是:Apache storm ApacheStorm:为什么以及如何选择每个执行者的任务数?,apache-storm,apache-storm-topology,Apache Storm,Apache Storm Topology,根据报告: 要为喷口/螺栓创建多少个实例。一个任务在一个线程上运行,同一个喷口/螺栓的其他任务为零或多个。在拓扑的整个生命周期内,喷口/螺栓的任务数始终相同,但喷口/螺栓的执行器(线程)数可能会随时间而变化。这使得拓扑可以扩展到更多或更少的资源,而无需重新部署拓扑或违反Storm的约束(例如,字段分组可以确保相同的值用于相同的任务) 我的问题是: 在什么情况下,我会选择在一个执行器中运行多个任务 如果我在一个执行器中使用多个任务,我会在喷口和螺栓之间选择每个执行器不同数量的任务(例如每个螺栓执行
#线程
任务执行实际的数据处理,并在其父执行器的执行线程中运行。您在代码中实现的每个喷口或插销在集群中执行相同数量的任务
在拓扑的整个生命周期中,组件的任务数始终相同,但组件的执行器(线程)数可能会随时间而变化。这意味着以下条件成立:#threads我认为这是一个很好的答案,但我将尝试将其改写为示例:
提交拓扑时,组件(例如喷口或螺栓)的任务数将一成不变,而执行器的数量可以在不重新部署拓扑的情况下更改。执行器的数量始终小于或等于组件的任务数量
问题1
通常情况下,您没有理由选择在1个执行器中运行2个任务,但如果您当前的负载较低,但预期稍后的负载较高,则可以选择提交任务数量较多但执行器数量较少的拓扑。当然,您可以只提交包含您期望的尽可能多的执行器的拓扑,但是由于上下文切换和/或潜在的资源争用,在只需要少量执行器的情况下使用多个线程是低效的
例如,假设您提交拓扑,使喷口具有4个任务和4个执行器(每个执行器一个)。当负载增加时,您无法进一步扩展,因为4是您可以拥有的最大执行器数。现在,您必须重新部署拓扑,以便根据负载进行扩展
让我们假设您提交了拓扑结构,这样喷口就有32个任务和4个执行器(每个8个)。当负载增加时,您可以将执行器的数量增加到32,即使一开始只有4个。您可以在不重新部署拓扑的情况下进行此扩展
问题2
假设您的拓扑有一个喷口a和一个螺栓B。假设螺栓B做一些重量级的工作(例如,每执行器每秒可以做10个元组),而喷口是轻量级的(例如,每执行器每秒可以做1000个元组)。假设您在拓扑中的负载最初为每秒20条消息,但您预计会增加
在这种情况下,您可以将喷口配置为1个执行器和1个任务,因为它可能大部分时间处于空闲状态。同时,您希望为您的bolt配置大量任务,以便您可以为其扩展执行者的数量,并至少启动2-3个执行者。我认为这是一个很好的答案,但我将尝试将其改写为示例:
提交拓扑时,组件(例如喷口或螺栓)的任务数将一成不变,而执行器的数量可以在不重新部署拓扑的情况下更改。执行器的数量始终小于或等于组件的任务数量
问题1
通常情况下,您没有理由选择在1个执行器中运行2个任务,但如果您当前的负载较低,但预期稍后的负载较高,则可以选择提交任务数量较多但执行器数量较少的拓扑。当然,您可以只提交包含您期望的尽可能多的执行器的拓扑,但是由于上下文切换和/或潜在的资源争用,在只需要少量执行器的情况下使用多个线程是低效的
例如,假设您提交拓扑,使喷口具有4个任务和4个执行器(每个执行器一个)。当负载增加时,您无法进一步扩展,因为4是您可以拥有的最大执行器数。现在,您必须重新部署拓扑,以便根据负载进行扩展
让我们假设您提交了拓扑结构,这样喷口就有32个任务和4个执行器(每个8个)。当负载增加时,您可以将执行器的数量增加到32,即使一开始只有4个。您可以在不重新部署拓扑的情况下进行此扩展
问题2
假设您的拓扑有一个喷口a和一个螺栓B。假设螺栓B做一些重量级的工作(例如,每执行器每秒可以做10个元组),而喷口是轻量级的(例如,每执行器每秒可以做1000个元组)。假设您在拓扑中的负载最初为每秒20条消息,但您预计会增加
在这种情况下,您可以将喷口配置为1个执行器和1个任务,因为它可能大部分时间处于空闲状态。同时,您希望为您的bolt配置大量任务,以便您可以为其扩展执行器的数量,并至少启动2-3个执行器。还有另一个原因
Config#TOPOLOGY_TASKS -> How many tasks to create per component.