我有一个与 Storm 功能相关的问题。假设我有一个 spout,它正在读取一个 csv 文件并逐块发出记录。也就是说,它一次向 Bolt 发出 100 条记录。
我的问题是,当螺栓接收到单个块时,是否会仅将其发送给一个执行器,或者为了并行性而将其分配给不同的执行器。
注意:螺栓有 5 个执行器。
我有一个与 Storm 功能相关的问题。假设我有一个 spout,它正在读取一个 csv 文件并逐块发出记录。也就是说,它一次向 Bolt 发出 100 条记录。
我的问题是,当螺栓接收到单个块时,是否会仅将其发送给一个执行器,或者为了并行性而将其分配给不同的执行器。
注意:螺栓有 5 个执行器。
“一次发出 100 条记录”是什么意思?这是否意味着单个元组包含 100 个 CSV 行?nextTuple()
或者您是否在一次调用中发出 100 个元组(每个元组包含一个 CSV 行) 。
一方面说:在一次调用中发出多个元组被认为是不好的做法nextTuple()
。如果nextTuple()
由于任何原因阻塞,则 spout 线程被阻塞并且不能(例如)对传入acks
的 . 最佳实践是,为每次调用发出一个元组nextTuple()
。如果没有可发出的元组,则应返回(不发出)而不是阻塞,以等待元组可用。
executor = Threads
如果你没有明确配置任务(实例)的数量,那么storm默认每个执行器运行1个任务。所以实际上发生的情况是有 5 个不同的螺栓实例正在运行,由 5 个不同的线程处理(1 个线程处理 1 个任务)。
所以理想情况下,您发出的元组将由 5 个不同的线程同时处理