Функция Flink Map с многопараллельностью, и как удостовериться в порядке конечного стока - PullRequest
0 голосов
/ 27 августа 2018

простой конвейерный код парней:

source = env.addSource(kafkaConsumer)
.map(func).setParallelism(2).sink()

как сделать так, чтобы порядок вышел?

1 Ответ

0 голосов
/ 27 августа 2018

Для начала давайте предположим, что все остальное в вашем примере имеет параллелизм, равный единице, и только функция map будет работать параллельно.(Хотя для этого на самом деле это нужно было бы где-то настроить; параллелизм по умолчанию выше единицы.)

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

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

Если записи потоков помечены каким-либо образом, скажем, по возрастаниювременные метки или идентификаторы, тогда вы можете гипотетически ввести некоторую буферизацию и восстановить исходный порядок, либо в пользовательском приемнике, либо в непараллельной функции RichCoMap между вашей картой и операторами приемников.

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

...