Я установил Kafka на локальный Minikube, используя диаграммы Helm https://github.com/confluentinc/cp-helm-charts, следуя этим инструкциям https://docs.confluent.io/current/installation/installing_cp/cp-helm-charts/docs/index.html следующим образом:
helm install -f kafka_config.yaml confluentinc/cp-helm-charts --name kafka-home-delivery --namespace cust360
kafka_config.yaml почти идентичен yaml по умолчанию, за одним исключением: я уменьшил его до 1 сервера/брокера вместо 3 (просто потому, что я пытаюсь сохранить ресурсы на своем локальном мини-кубе; надеюсь, это не имеет отношения к моя проблема).
Также на Minikube работает экземпляр MySQL. Вот результат kubectl get pods --namespace myNamespace:
Я хочу подключить MySQL и Kafka, используя один из коннекторов (например, Дебезиум MySQL CDC). В инструкции написано:
Install your connector
Use the Confluent Hub client to install this connector with:
confluent-hub install debezium/debezium-connector-mysql:0.9.2
Звучит хорошо, за исключением 1) я не знаю, на каком модуле запустить эту команду, 2) похоже, что ни один из модулей не имеет доступной команды конфлюэнтного концентратора.
Вопросы:
См. «Автоматически установить подключаемый модуль Kafka Connect» — rmoff.net/2018/12/15/docker-tips-and-tricks-with-ksql-and-kafka, т. е. изменить команду контейнера Connect.






В модуле Kafka Connect уже должен быть установлен confluent-hub. Это тот модуль, на котором вы должны запускать команды.
Однако, если модуль перезапустится, этот разъем исчезнет.
На данный момент игнорирую вопрос @cricket_007 (хотя это может быть проблематично) — когда я запускаю bash на этом модуле, я ввожу confluent-hub как команду и получаю «команда не найдена»
В идеале это должно быть настроено как часть сценария helm, но, к сожалению, на данный момент это не так. Один из способов обойти это — создать новый Docker из образа Docker Kafka Connect от Confluent. Загрузите коннектор вручную и извлеките содержимое в папку. Скопируйте его содержимое в путь в контейнере. Что-то вроде ниже.
Содержимое Dockerfile
FROM confluentinc/cp-kafka-connect:5.2.1
COPY <connector-directory> /usr/share/java
/usr/share/java — это место по умолчанию, в котором Kafka Connect ищет плагины. Вы также можете использовать другое местоположение и указать новое местоположение (plugin.path) во время установки helm.
Создайте этот образ и разместите его в доступном месте. Вам также нужно будет предоставить/переопределить данные изображения и тега во время установки helm.
Здесь — это путь к файлу values.yaml. Вы можете найти значения image и plugin.path здесь.
Модуль cp kafka connect имеет 2 контейнера, один из них — контейнер cp-kafka-connect-server. В этом контейнере установлен confluent-hub. Вы можете войти в этот контейнер и запустить там свои команды соединителя. Чтобы войти в этот контейнер, выполните следующую команду:
kubectl exec -it {pod-name} -c cp-kafka-connect-server -- /bin/bash
Просто дополнение к комментарию Джегана выше: https://stackoverflow.com/a/56049585/6002912
Вы можете сделать Dockerfile ниже. Рекомендуемые.
FROM confluentinc/cp-server-connect-operator:5.4.0.0
RUN confluent-hub install --no-prompt debezium/debezium-connector-postgresql:1.0.0
Или вместо этого вы можете использовать многоэтапную сборку Docker.
FROM confluentinc/cp-server-connect-operator:5.4.0.0
COPY --from=debezium/connect:1.0 \
/kafka/connect/debezium-connector-postgres/ \
/usr/share/confluent-hub-components/debezium-connector-postgres/
Это поможет вам сэкономить время на получении правильных jar-файлов для ваших плагинов, таких как debezium-connector-postgres.
Из документации Confluent: https://docs.confluent.io/current/connect/managing/extending.html#create-a-docker-image-content-c-hub-connectors
Снято в темноте, но разве разъем не должен быть установлен в
kafka-connectpod? Вы также можете взглянуть на Strimzi. Он предоставляет встроенный в kube способ развертывания кластеров Kafka на k8s.