我很想知道需要使用setNumTasks函数的情况。文档说,默认是每个执行者的一项任务。风暴:何时使用setNumTasks?
如果我有一个'昂贵'的数据库任务(需要花费时间的外部数据库调用)在任何一方执行'快速'任务的螺栓运行,我会添加额外的任务吗?
或者,这是那些'尝试它,看看会发生什么'的情景?
我很想知道需要使用setNumTasks函数的情况。文档说,默认是每个执行者的一项任务。风暴:何时使用setNumTasks?
如果我有一个'昂贵'的数据库任务(需要花费时间的外部数据库调用)在任何一方执行'快速'任务的螺栓运行,我会添加额外的任务吗?
或者,这是那些'尝试它,看看会发生什么'的情景?
如何决定多少执行人/任务你需要什么?
我建议你阅读this page
我只是验证了这一点,发现为什么有这种混淆的任务。
在这种情况下:
int BoltParallelism = 3;
int BoltTaskParallelism = 2;
builder.setBolt("bolt1", new BoltA(), BoltParallelism)
.setNumTasks(BoltTaskParallelism)
BoltParallelism
确实是执行者的数量和BoltTaskParallelism
确实是任务数。
但
int BoltParallelism = 3;
builder.setBolt("bolt1", new BoltA(), BoltParallelism)
如果不指定setNumTasks
,风暴造成BoltParallelism
多项任务,并创建BoltParallelism
执行人的数量为好。
如果您创建了3个任务,那么Storm会创建3个Bolt A实例。如果您的DB数据库读取发生在BoltA的一个实例中,那么很可能其他BoltA实例也会做同样的事情,因为这是同一班。然而,如果你写逻辑的方式使得BoltA类可能在某些情况下执行数据库读取,而在其他情况下执行一些其他处理,那么是的;值得拥有更多的任务,值得让每个任务都在不同的执行者(线程)中运行,因为如果你有3个任务并且只有一个执行者,那么这个任务将由执行者一个一个地执行。
我试着用setNumTasks(10)发送http请求来配置一个螺栓。此请求的响应延迟了3秒。我注意到Bolt实际上是一个接一个地发送请求。所以我仍然困惑。 – prehawk