Состояние трансляции Flink с более чем одним параллелизмом

Позвольте мне рассказать об этом, я очень новичок во Flink и стараюсь уловить как можно больше концепций.

Допустим, у меня есть флинк-кластер с 10 диспетчерами задач. У меня есть работа над каждым из них. Задание также использует широковещательное состояние. Это состояние широковещания создается путем чтения 5 файлов S3 каждые 10 минут, выполнения некоторой обработки и создания карты int to list of strings, которая транслируется.

Вопрос: Где происходит чтение файлов, это в JobManager, который читает и обрабатывает файл и отправляет обработанное содержимое диспетчерам задач.

Or

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

ИЗМЕНИТЬ

поэтому диспетчер задач считывает широковещательный поток и транслирует его нижестоящим задачам.

Например. Допустим, есть поток Kafka с 5 разделами, которые нужно транслировать. Также есть подчиненный оператор с параллелизмом 5.

  1. Задача потребителя раздела 1, считывает элемент из потока и переводит его в состояние широковещания. Как только это установлено, состояние транслируется на все задачи нижестоящего оператора 5.
  2. Задача потребителя раздела 2, считывает элемент из потока и переводит его в состояние широковещания.

Вопрос: На этом этапе нужно ли нам убедиться, что мы не перезаписываем элементы из раздела 1, когда мы устанавливаем состояние широковещания из элемента раздела 2, или сам flink управляет этим.

OR

Также как мы можем быть уверены, что к моменту, когда раздел 2 потребляет элемент и устанавливает состояние широковещания, состояние широковещательной передачи раздела 1 достигло задачи оператора нижестоящего раздела 2.


person Gaurav Kumar    schedule 21.10.2019    source источник


Ответы (1)


Где происходит чтение файлов?

Диспетчер задач. JobManager отвечает только за управление такими задачами, как планирование и отработка отказа.

Как отправить обработанный контент диспетчерам задач?

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

Как flink справляется с этим, если диспетчер задач не может читать с S3?

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

Состояние трансляции одинаково для всех диспетчеров задач.

На самом деле состояние трансляции не во всех задачах одно и то же. Причина в том, что нельзя гарантировать доставку событий в задачу в том же порядке во время передачи по сети.

person Jiayi Liao    schedule 21.10.2019
comment
Спасибо, если широковещательный поток имеет параллелизм, например. 3, тогда мне нужно убедиться, что при обработке элемента широковещательного потока в каждой задаче состояние широковещательной передачи, записанное другой задачей, не перезаписывается, и что об этом не позаботится мигание. - person Gaurav Kumar; 21.10.2019
comment
Да, но это зависит от обстоятельств. Например, вы хотите транслировать какие-то правила с уникальным идентификатором для каждого правила. И сообщение правила с тем же идентификатором правила может появиться в любой из задач источника широковещательной передачи, тогда вы должны убедиться, что в этой ситуации последующие задачи получают самую последнюю. - person Jiayi Liao; 22.10.2019