Рекомендации по использованию кластера заданий Flink в Kubernetes в отношении сохранения и обновления задания

#kubernetes #apache-flink #flink-streaming

#kubernetes #apache-flink #flink-потоковая передача

Вопрос:

Я изучаю возможность развертывания задания Flink в Kubernetes. Просматривая документацию, мне трудно понять, каковы наилучшие методы развертывания задания, особенно когда задание должно поддерживать состояние.

Есть два основных момента, касающихся этой работы:

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

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

Kubernetes:

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

Проблема с настройкой Kubernetes заключается в том, что местоположение точки сохранения необходимо добавить в качестве аргумента для развертывания. В случае, если модуль переведен в автономный режим, он перезапустит приложение с исходной точкой сохранения в развертывании. В частности, это приведет к сбросу смещения Кафки всякий раз, когда задание было развернуто, и повторной обработке большого количества данных.

В дополнение к этому, как бы я мог отменить задание с помощью savepoint при запуске в кластере заданий с чего-то вроде ci / cd? Нужно ли мне создавать еще один модуль развертывания и использовать rest api?

Какова наилучшая практика в отношении развертывания задания Flink с сохранением состояния в kubernetes и его обновления без потери состояния?

Комментарии:

1. В настоящее время я пытаюсь найти хороший подход к этому. Было PreStop бы неплохо использовать хук kubernetes для запуска остановки задания с помощью точки сохранения (с использованием интерфейса Flink CLI). К сожалению, это не сработало. CheckpointException: Not all required tasks are currently running. . Я предполагаю, что это происходит из-за того, что конечная точка службы отключена, и jobmanager больше не может взаимодействовать с taskmanagers

2. У меня тот же вопрос. Теперь у меня есть два задания flink. Первый из них развертывается в режиме сеанса на K8s, который может работать так же, как и в yarn. Второй развертывается в режиме приложения на K8s. И я не нашел хорошего способа остановить или обновить задание без потери не запущенных данных в Windows.