Apache storm ApacheStorm:为什么以及如何选择每个执行者的任务数?

Apache storm ApacheStorm:为什么以及如何选择每个执行者的任务数?,apache-storm,apache-storm-topology,Apache Storm,Apache Storm Topology,根据报告: 要为喷口/螺栓创建多少个实例。一个任务在一个线程上运行,同一个喷口/螺栓的其他任务为零或多个。在拓扑的整个生命周期内,喷口/螺栓的任务数始终相同,但喷口/螺栓的执行器(线程)数可能会随时间而变化。这使得拓扑可以扩展到更多或更少的资源,而无需重新部署拓扑或违反Storm的约束(例如,字段分组可以确保相同的值用于相同的任务) 我的问题是: 在什么情况下,我会选择在一个执行器中运行多个任务 如果我在一个执行器中使用多个任务,我会在喷口和螺栓之间选择每个执行器不同数量的任务(例如每个螺栓执行

根据报告:

要为喷口/螺栓创建多少个实例。一个任务在一个线程上运行,同一个喷口/螺栓的其他任务为零或多个。在拓扑的整个生命周期内,喷口/螺栓的任务数始终相同,但喷口/螺栓的执行器(线程)数可能会随时间而变化。这使得拓扑可以扩展到更多或更少的资源,而无需重新部署拓扑或违反Storm的约束(例如,字段分组可以确保相同的值用于相同的任务)

我的问题是:

  • 在什么情况下,我会选择在一个执行器中运行多个任务
  • 如果我在一个执行器中使用多个任务,我会在喷口和螺栓之间选择每个执行器不同数量的任务(例如每个螺栓执行器2个任务,但每个喷口执行器仅1个任务),原因可能是什么 任务执行实际的数据处理,并在其父执行器的执行线程中运行。您在代码中实现的每个喷口或插销在集群中执行相同数量的任务

    在拓扑的整个生命周期中,组件的任务数始终相同,但组件的执行器(线程)数可能会随时间而变化。这意味着以下条件成立:
    #线程
    任务执行实际的数据处理,并在其父执行器的执行线程中运行。您在代码中实现的每个喷口或插销在集群中执行相同数量的任务

    在拓扑的整个生命周期中,组件的任务数始终相同,但组件的执行器(线程)数可能会随时间而变化。这意味着以下条件成立:
    #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.