Storm 中的执行者

Executors in Storm

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

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

注意:螺栓有 5 个执行器。

executor = Threads

如果您没有明确配置任务(实例)的数量,那么默认情况下,storm 将为每个执行程序运行 1 个任务。所以实际上发生的事情是有 5 个不同的螺栓实例是 运行ning,它由 5 个不同的线程处理(1 个线程处理 1 个任务)。

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

"it emits 100 record at a time" 是什么意思?这是否意味着单个元组包含 100 个 CSV 行?或者您是否在单个 nextTuple() 调用中发出 100 个元组(每个元组包含一个 CSV 行)。

  1. 对于第一种情况,Storm 无法在单个元组中并行化这 100 行。 Storm 只能将不同的元组发送给不同的执行器。
  2. 对于第二种情况,Storm会将100个元组发送给不同的执行器(当然,这取决于您选择的连接模式)。

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