Как создать коннекторы для Kafka-connect на Kubernetes? - PullRequest
1 голос
/ 01 февраля 2020

Я развертываю Kafka-connect в Google Kubernetes Engine (GKE), используя cp-kafka-connect Диаграмма руля в распределенном режиме.

Работающий кластер Kafka с брокером и zookeeper уже работает на том же кластере GKE. Я понимаю, что могу создавать соединители, отправляя почтовые запросы конечной точке http://localhost:8083/connectors, как только она станет доступна. Однако контейнер Kafka-connect переходит в состояние RUNNING, а затем начинает загружать файлы JAR, и пока все файлы JAR не будут загружены, указанная выше конечная точка недоступна.

Я ищу способ автоматизировать шаг вручную exec модуль, проверьте, готова ли конечная точка, а затем отправьте запросы на публикацию. У меня есть сценарий оболочки, у которого есть куча curl -X POST запросов к этой конечной точке для создания соединителей, а также файлы конфигурации для этих соединителей, которые прекрасно работают в автономном режиме (с использованием демонстрации платформы Confluent в этом confluent blog ).

Теперь существует только два способа создания соединителя:

  1. Каким-то образом определить, когда контейнер фактически готов (когда конечная точка начала прослушивание), а затем запустить сценарий оболочки. содержащий запросы curl
  2. ИЛИ использовать файлы конфигурации, как мы делаем это в автономном режиме (Пример: $ <path/to/CLI>/confluent local load connector_name -- -d /connector-config.json)

Какой из вышеперечисленных подходов лучше?

Можно ли вообще использовать второй подход (файлы конфигурации) в распределенном режиме?

  • Если ДА: Как это сделать?
  • Если NO: Как успешно выполнить то, что объясняется в первом подходе?

РЕДАКТИРОВАТЬ: Со ссылкой на его GitHub выпуск (спасибо к ответу @ cricket_007 ниже) Я добавил следующее по мере того, как команда контейнера и коннекторы были созданы после того, как конечная точка была готова:

...
command:
  - /bin/bash
  - -c
  - |
    /etc/confluent/docker/run &
    echo "Waiting for Kafka Connect to start listening on kafka-connect  "
    while : ; do
      curl_status=`curl -s -o /dev/null -w %{http_code} http://localhost:8083/connectors`
      echo -e `date` " Kafka Connect listener HTTP state: " $curl_status " (waiting for 200)"
      if [ $curl_status -eq 200 ] ; then
        break
      fi
      sleep 5
    done
    echo -e "\n--\n+> Creating Kafka Connector(s)"
    /tmp/scripts/create-connectors.sh
    sleep infinity
...

/tmp/scripts/create-connectors.sh - это скрипт, смонтированный извне, содержащий группу запросов POST, использующих CURL для API-интерфейс Kafka-connect.

1 Ответ

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

confluent local не взаимодействует с удаленным кластером Connect, например кластером в Kubernetes.

Пожалуйста, обратитесь к REST API Kafka Connect

You ' подключитесь к нему, как к любому другому API RESTful, работающему в кластере (например, через Nodeport или Ingress / API Gateway)

указанная выше конечная точка недоступна.

Локальный хост - это физическая машина, на которой вы вводите команды, а не удаленный кластер GKE

Каким-то образом определите, когда контейнер фактически готов

Проверки работоспособности Kubernetes Ответственный за это

kubectl get services

Существует только два способа создания соединителя

Это не так. Вы можете дополнительно запустить пользовательский интерфейс Land oop Kafka Connect или Confluent Control Center в своем кластере, чтобы указать и щелкнуть.

Но если у вас есть локальные конфигурационные файлы, вы также можете написать код для взаимодействия с API

Или попробовать и посмотреть, можете ли вы сделать PR для этой проблемы

https://github.com/confluentinc/cp-docker-images/issues/467

...