Apache развертывание Flink в Kubernetes - доступность и масштабируемость - PullRequest
1 голос
/ 13 февраля 2020

Я использую Kubernetes (Openshift) для развертывания многих микросервисов. Я sh смогу использовать то же самое для развертывания некоторых моих заданий Flink. Flink задания имеют решающее значение - некоторые задания без сохранения состояния обрабатывают все данные (ровно один раз), некоторые задания с состоянием, которые ищут шаблоны в потоке или реагируют на время. Никакие задания не могут допускать длительного простоя или частого отключения (из-за ошибок программирования, из-за того, как Flink завершает работу).

Я считаю, что документы в основном предназначены для развертывания заданий Flink в k8s как Job Cluster. Но как принять практический подход в этом?

  • Хотя k8s может перезапустить неисправный Flink pod, как Flink может восстановить свое состояние для восстановления?
  • Может ли Flink pod быть реплицирован более чем на один? Как работает JobManager & TaskManager при наличии двух или более модулей? Если нет, то почему? Другие подходы?

1 Ответ

1 голос
/ 13 февраля 2020

Хотя k8s может перезапустить неисправный модуль Flink, как Flink может восстановить его состояние для восстановления?

Из документации Flink мы имеем:

Контрольные точки позволяют Flink, чтобы восстановить состояние и позиции в потоках, чтобы дать приложению ту же семантику, что и безотказное выполнение.

Это означает, что вам необходимо иметь Check Storage , смонтированный в ваши стручки, чтобы иметь возможность восстановить состояние.

В Kubernetes вы можете использовать Постоянные тома для обмена данными между вашими модулями.

На самом деле существует множество поддерживаемых плагинов, см. здесь .

Вы можете иметь больше реплик TaskManager, но в Kubernetes вам не нужно заботиться о HA для JobManager, так как вы можете использовать Kubernetes self- исцеление развертывание.

Чтобы использовать самовосстановление развертывание в Kubernetes, вам просто нужно создать развертывание и установить для replica значение 1, например:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx
  template:
    metadata:
      labels:
        app: nginx
    spec:
      containers:
      - name: nginx
        image: nginx
        ports:
        - name: http
          containerPort: 80
        imagePullPolicy: IfNotPresent

Наконец, вы можете проверить эти ссылки, чтобы помочь вам настроить Flink в Kubernetes:

running- apache -flink-on-kubernetes

Кластер заданий Flink в Kubernetes

Развертывания Flink Kubernetes

Запуск Flink в Kubernetes с помощью KUDO

...