2015-07-29 2 views
0

У меня есть вопрос, связанный с функцией Storm. Предположим, у меня есть носик, который читает csv-файл и испускает фрагмент записей куском. То есть, он испускает 100 записей за раз на болт.Исполнители в Storm

Мой вопрос заключается в том, будет ли один кусок при получении болтом отправлен только одному исполнителю или будет разделен между различными исполнителями ради параллелизма.

Примечание: болт имеет 5 исполнителей.

ответ

4

Что вы имеете в виду «он испускает 100 записи в то время»? Означает ли это, что один кортеж содержит 100 строк CSV? Или вы испускаете 100 кортежей (каждая из которых содержит одну строку CSV) в одном вызове nextTuple().

  1. В первом случае Storm не может распараллелить эти 100 строк в пределах одного кортежа. Storm может отправлять только разные кортежи для разных исполнителей.
  2. Для второго случая Storm отправит 100 кортежей различным исполнителям (конечно, в зависимости от выбранного вами шаблона соединения).

Замечание одной стороны: считается, что плохая практика испускает несколько кортежей за один звонок до nextTuple(). Если nextTuple() блокирует по какой-либо причине, поток носика блокируется и не может (например) реагировать на входящие acks. Лучшая практика состоит в том, чтобы испускать один кортеж для каждого вызова до nextTuple(). Если кортеж не доступен, вы должны вернуться (без испускания), а не блокировать, чтобы ждать, пока не будет доступен кортеж.

0

executor = Threads

Если вы явно не настроить количество задач (экземпляров), то шторм будет работать 1 задача каждого исполнителя по умолчанию. Таким образом, практически все, что происходит, состоит из 5 различных экземпляров болта, который обрабатывается 5 различными потоками (1 задача обработки резьбы 1).

Так в идеале кортежи вы испускают будут обработаны 5 различных потоков одновременно

Смежные вопросы