#kubernetes #apache-flink #flink-streaming
#kubernetes #apache-flink #flink-потоковая передача
Вопрос:
Я изучаю возможность развертывания задания Flink в Kubernetes. Просматривая документацию, мне трудно понять, каковы наилучшие методы развертывания задания, особенно когда задание должно поддерживать состояние.
Есть два основных момента, касающихся этой работы:
- Это потоковое задание, имеющее дело с неограниченными данными (бесконечный поток)
- Сохраняет и использует состояние, которое необходимо поддерживать в разных версиях заданий
В настоящее время мы работаем на Hadoop. Там это довольно просто, если вы хотите развернуть новую версию задания и сохранить состояние. Выполните следующие действия: отмените задание с помощью точки сохранения, затем разверните новое задание и укажите на эту точку сохранения.
Kubernetes:
Основываясь на определениях, кажется, что для нашего варианта использования кластер заданий наилучшим образом соответствует требованиям. В этом кластере будет выполняться только одно задание.
Проблема с настройкой Kubernetes заключается в том, что местоположение точки сохранения необходимо добавить в качестве аргумента для развертывания. В случае, если модуль переведен в автономный режим, он перезапустит приложение с исходной точкой сохранения в развертывании. В частности, это приведет к сбросу смещения Кафки всякий раз, когда задание было развернуто, и повторной обработке большого количества данных.
В дополнение к этому, как бы я мог отменить задание с помощью savepoint при запуске в кластере заданий с чего-то вроде ci / cd? Нужно ли мне создавать еще один модуль развертывания и использовать rest api?
Какова наилучшая практика в отношении развертывания задания Flink с сохранением состояния в kubernetes и его обновления без потери состояния?
Комментарии:
1. В настоящее время я пытаюсь найти хороший подход к этому. Было
PreStop
бы неплохо использовать хук kubernetes для запуска остановки задания с помощью точки сохранения (с использованием интерфейса Flink CLI). К сожалению, это не сработало.CheckpointException: Not all required tasks are currently running.
. Я предполагаю, что это происходит из-за того, что конечная точка службы отключена, и jobmanager больше не может взаимодействовать с taskmanagers2. У меня тот же вопрос. Теперь у меня есть два задания flink. Первый из них развертывается в режиме сеанса на K8s, который может работать так же, как и в yarn. Второй развертывается в режиме приложения на K8s. И я не нашел хорошего способа остановить или обновить задание без потери не запущенных данных в Windows.