Storm如何管理在群集模式下共享数据?

时间:2015-05-19 08:08:25

标签: distributed-computing apache-storm

最近我正在为风暴拓扑开发一些计时工具,但我仍然有一些关于在风暴集群中共享数据的问题:

  1. 如果一个组件(spout / bolt)配置了每个worker有多个执行程序,比如worker名是1,那么该组件的parallelism_hint是3,任务号使用默认设置(即1),这是否意味着工人中有3个组件实例?如果不是,组件的字段是否应在同步块中使用?

  2. 如果在组件中创建名为“athread”的其他线程(在prepare()open()方法内),那么风暴群中有多少“athread”实例?

  3. Understanding the Parallelism of a Storm Topology所述,工作者是一个单独的进程,工作进程执行拓扑的子集。这是否意味着拓扑的全局变量(例如公共静态字段或其他静态变量)只能在一个工作者中共享?

  4. 如果spout的parallelism_hint配置为大于1,并且Utils.sleep(1000)方法中有nextTuple()个句子,这是否意味着spout的发出元组数等于执行程序'(线程)每秒喷出的数量?

  5. 非常感谢。

1 个答案:

答案 0 :(得分:2)

1)设置parallelism hint = 3会要求storm分配3个执行程序(Threads)并默认创建3个任务(请注意,如果你没有明确配置任务数量,storm默认会为每个执行程序运行一个任务)对于那个组件。如果设置no task = 1,则三个线程将在同一个组件实例上运行。

2)假设您使用默认设置(1个执行器和1个任务/组件)运行,它将创建该线程对象的一个​​单个实例,因为prepare / open方法只会被调用一次。

3)静态变量将由给定worker中组件的所有实例共享。

4)不确定你究竟是什么意思,如果你运行多个执行器和一个任务,那么当Thread-A正在睡觉时,另一个Thread-B可能正在处理元组