Запрос на обмен данными в Apache Flink - PullRequest
0 голосов
/ 29 апреля 2020

Просматривая книгу на Apache Flink, она имеет следующее:

Если задача отправителя и задача получателя выполняются в одном и том же процессе TaskManager, задача отправителя сериализует исходящие записи в буфер байтов и помещает буфер в очередь, как только он заполнен. Принимающая задача берет буфер из очереди и десериализует входящие записи. Следовательно, сетевое взаимодействие не требуется.

Зачем нам нужна сериализация, если отправитель и получатель находятся в одном и том же процессе JVM?

1 Ответ

2 голосов
/ 30 апреля 2020

Есть несколько причин, но давайте вернемся немного назад и поговорим о цепочках операторов.

Цепочка операторов может использоваться, если два последовательных оператора имеют одинаковую степень параллелизма, имеют только один вход / выход, совместно используют слот задачи , а также предоставляют определенные свойства (например, они говорят, что их можно приковать). Самая простая цепочка - это просто серия карт. Но это также может быть источник -> карта -> сток, который может быть полностью связан. Записи в цепочке не сериализуются, а копируются (если не установлено enableObjectReuse). Я думаю, это то, что вы имели в виду, когда были удивлены сериализацией.

Цепочка операторов, например, разрывается, если у вас более одного входа или явная перестановка в сети. И то, и другое верно для объединений. Таким образом, данные сериализуются. Тем не менее, вы можете иметь две последовательные подзадачи в одной и той же TM. Вот где в игру вступают местные входные каналы, которые соответствуют тому, что вы нашли. Сериализация на локальных входных каналах делает обработку противодавления и контрольных точек намного проще, чем если бы на данном этапе некоторые записи сериализовались, а другие - нет.

...