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