风暴中的执行者



我有一个关于Storm功能的问题。假设我有一个喷口,它正在读取csv文件并逐块发送记录。也就是说,它一次向螺栓发送100条记录。

我的问题是,当bolt接收到单个块时,是只发送给一个执行者,还是为了并行性而在不同的执行者之间分配。

注:螺栓有5个执行器

"它一次发出100条记录"是什么意思?这是否意味着一个元组包含100行CSV ?或者在单个nextTuple()调用中发出100个元组(每个元组包含单个CSV行)。

  1. 对于第一种情况,Storm不能并行处理单个元组中的100行代码。Storm只能发送不同的元组给不同的执行者。
  2. 对于第二种情况,Storm将发送100个元组到不同的执行者(当然,取决于你选择的连接模式)。

旁注:在对nextTuple()的单个调用中发出多个元组被认为是不好的做法。如果nextTuple()因任何原因阻塞,喷口线程被阻塞,不能(例如)对传入的acks作出反应。最佳实践是,为每次调用nextTuple()发出一个元组。如果没有可用的元组可以发出,则应该返回(不发出)而不是阻塞,等待元组可用。

executor = Threads

如果您没有显式配置任务(实例)的数量,那么storm将默认为每个executor运行1个任务。所以实际发生的情况是,有5个不同的螺栓实例正在运行,由5个不同的线程处理(一个线程处理一个任务)。

所以理想情况下,你发出的元组将由5个不同的线程处理同时

相关内容

  • 没有找到相关文章

最新更新