我需要知道Storm如何管理每个螺栓中的并行工作者数量。 IrichBolt类和IRichSpout类都没有实现Runnable类。我真的需要知道风暴如何管理多线程?
答案 0 :(得分:5)
它有点太广泛而无法讨论,但这是我可以尝试分享的东西。在风暴中非常简短的Spouts
或Bolts
可以定义为实际处理数据的实体或组件。在风暴术语中,它们被称为tasks
(因此您不需要其IRichSpout
之类的父接口来实现类似Runnable的东西。现在负责执行这些任务的线程称为Executors
。来自doc
在Storm的术语中,“ parallelism ”专门用于描述所谓的并行性提示,这意味着执行者(线程)的初始数量强>组件(喷口或螺栓)
这些执行器(线程)再次由worker process
生成。来自doc
工作进程执行拓扑的子集。工作进程属于特定拓扑,可以为此拓扑的一个或多个组件(spout或bolt)运行一个或多个执行程序
风暴群集中的机器可能run single or multiple such worker process
用于一个或多个拓扑,each process can run executors for specific topologies
(您甚至可以在运行时使用风暴重新平衡机制来更改这些执行程序)。
对于与这些工作进程的内部通信,Storm使用由LMAX Disruptor支持的各种消息队列。他们维护自己的线程,如 receiver 线程& sender 用于管理传入和传出的消息。
您可以查看this doc页面以获得更好的概述。这个very nice article解释了它如何处理并行性。这可能有助于您进一步挖掘并分享您的发现:)