2015-06-04 3 views
5

Возможно ли обеспечить принудительное выполнение в Spark Streaming? Наш прецедент - это чтение событий от Kafka, где каждая тема должна обрабатываться по порядку.Обработка заказа в Spark Streaming

Из того, что я могу сказать, это невозможно - каждый поток, разбитый на RDD, и RDDS обрабатываются параллельно, поэтому нет способа гарантировать порядок.

ответ

1

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

+0

Но DStream разбит на RDD - не возможно ли, что второй RDD завершит обработку до первого? – EugeneMi

+0

В соответствии с документацией «По умолчанию выходные операции выполняются по очереди, и они выполняются в том порядке, в котором они определены в приложении». – Holden

1

«Наше Прецедент читает события из Кафки, где каждая тема должна быть обработана в порядке.»

Согласно моему пониманию, каждая тема формы separata Dstreams. Таким образом, вы должны обрабатывать каждый Dstream один за другим.

Но, скорее всего, вы хотите, чтобы вы обрабатывали каждое событие, которое вы получаете от 1 темы Кафки в порядке. В этом случае вы не должны зависеть от упорядочивания записи в RDD, скорее, вы должны пометить каждую запись меткой времени, когда вы впервые увидите их (возможно, путь вверх), и использовать эту метку времени для заказа позже.

У вас есть другие варианты, которые плохо :)

  1. Как говорит Холден, положить все в одном разделе
  2. Partition с некоторой возрастающей функцией, основанной на времени приема, так что вы заполнить разделы один за другим , Тогда вы можете надежно использовать zipWithIndex.