«Наше Прецедент читает события из Кафки, где каждая тема должна быть обработана в порядке.»
Согласно моему пониманию, каждая тема формы separata Dstreams. Таким образом, вы должны обрабатывать каждый Dstream один за другим.
Но, скорее всего, вы хотите, чтобы вы обрабатывали каждое событие, которое вы получаете от 1 темы Кафки в порядке. В этом случае вы не должны зависеть от упорядочивания записи в RDD, скорее, вы должны пометить каждую запись меткой времени, когда вы впервые увидите их (возможно, путь вверх), и использовать эту метку времени для заказа позже.
У вас есть другие варианты, которые плохо :)
- Как говорит Холден, положить все в одном разделе
- Partition с некоторой возрастающей функцией, основанной на времени приема, так что вы заполнить разделы один за другим , Тогда вы можете надежно использовать zipWithIndex.
Но DStream разбит на RDD - не возможно ли, что второй RDD завершит обработку до первого? – EugeneMi
В соответствии с документацией «По умолчанию выходные операции выполняются по очереди, и они выполняются в том порядке, в котором они определены в приложении». – Holden