Estoy investigando la implementación de un trabajo de Flink en Kubernetes. Al revisar la documentación, me cuesta encontrar cuáles son las mejores prácticas con respecto a cómo implementar el trabajo específicamente cuando el trabajo tiene que mantener el estado.
Hay dos puntos principales con respecto a este trabajo:
Actualmente, estamos ejecutando en Hadoop. Allí es bastante fácil cuando desea implementar una nueva versión del trabajo y mantener el estado. Los pasos son: cancelar el trabajo con el punto de guardado, luego implementar un nuevo trabajo y apuntar a ese punto de guardado.
Kubernetes:
Según las definiciones, parece que para nuestro caso de uso, un Job Cluster es el que mejor se adapta a los requisitos. Solo habrá un trabajo ejecutándose en este clúster.
El problema con la configuración de Kubernetes es que la ubicación del punto de guardado debe agregarse como argumento para la implementación. En el caso de que un pod se desconecte, reiniciará la aplicación con el punto de guardado original en la implementación. Específicamente, esto restablecerá el desplazamiento de Kafka a cada vez que se implementó el trabajo y reprocesará una gran cantidad de datos.
Además de eso, ¿cómo haría para cancelar un trabajo con un punto de guardado cuando se ejecuta en un clúster de trabajo desde algo como ci/cd? ¿Tendría que crear otro módulo de implementación y usar el resto de la API?
¿Cuál es la mejor práctica para implementar un trabajo de Flink con estado en kubernetes y actualizarlo sin perder el estado?