风暴中的执行者

rryofs0p  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(258)

我有一个关于风暴功能的问题。假设我有一个喷口,它正在读取一个csv文件并逐块发出记录。也就是说,它一次向螺栓发出100条记录。
我的问题是,当bolt接收到一个块时,它是只发送给一个执行器,还是为了并行而在不同的执行器之间进行划分。
注:螺栓有5个执行器。

dgsult0t

dgsult0t1#

executor = Threads 如果没有显式配置任务(示例)的数量,则默认情况下,storm将为每个执行器运行1个任务。所以实际发生的是有5个不同的螺栓运行示例,由5个不同的线程处理(1个线程处理1个任务)。
因此,理想情况下,您发出的元组将由5个不同的线程同时处理

z0qdvdin

z0qdvdin2#

你说的“它一次发出100张唱片”是什么意思?这是否意味着,一个元组包含100行csv?或者在一个单独的窗口中发出100个元组(每个元组包含一个csv行) nextTuple() 打电话。
对于第一种情况,storm不能在一个元组内并行化这100行。storm只能向不同的执行器发送不同的元组。
对于第二种情况,storm将把100个元组发送给不同的执行器(当然,这取决于您选择的连接模式)。
一句话:在一次调用中发出多个元组被认为是不好的做法 nextTuple() . 如果 nextTuple() 由于任何原因阻塞,喷口螺纹阻塞,无法(例如)对进料做出React acks . 最佳实践是,为每个对的调用发出一个元组 nextTuple() . 如果没有可发射的元组,则应返回(不发射)而不是阻塞,以等待元组可用。

相关问题