Оператор Strimzi connect не создает папку плагинов.

Вопрос или проблема

Я развернул кластер Kafka strimzi в своей локальной среде. Я также развернул strimzi connect в своей локальной среде. Я хочу запустить JDBC Source Connector, чтобы читать данные из Postgresql и записывать их в тему. Когда я запускаю свой код, файл jar JDBC коннектора не копируется в папку /opt/kafka/plugins. Когда я вхожу в pod connect и вижу, что папка plugins не создана, когда развернут кластер connect. Если я создаю ее вручную и пытаюсь скопировать файл jar, требуется перезагрузка, и при перезагрузке все сбрасывается.

apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnect
metadata:
   name: my-connect-cluster
   namespace: strimzi
spec:
   replicas: 1
   bootstrapServers: my-kafka-cluster-kafka-bootstrap:9092
   config:
   group.id: "connect-cluster"
   offset.storage.topic: "connect-cluster-offsets"
   config.storage.topic: "connect-cluster-configs"
   status.storage.topic: "connect-cluster-status"
   plugin.path: "/opt/kafka/external-configuration/plugins"  # Путь к плагинам Kafka Connect
   image: strimzi/kafka-connect:latest
template:
  pod:
    securityContext:
      runAsUser: 0  # Запуск от имени root для предоставления необходимых прав
externalConfiguration:
volumes:
  - name: plugins
    configMap:
      name: my-connector-plugins  # Используйте ConfigMap для хранения коннекторов



apiVersion: kafka.strimzi.io/v1beta2
kind: KafkaConnector
metadata:
  name: postgres-source-connector
  namespace: strimzi
  labels:
    strimzi.io/cluster: my-connect-cluster

spec:
  class: io.confluent.connect.jdbc.JdbcSourceConnector
  tasksMax: 1
  config:
    connector.class: io.confluent.connect.jdbc.JdbcSourceConnector
    tasks.max: "1"
    topic.prefix: "postgres-"  
    connection.url: "jdbc:postgresql://postgres:5432/exampledb"  
    connection.user: "postgres"  # Имя пользователя для PostgreSQL
    connection.password: "examplepassword"  # Пароль для PostgreSQL
    table.whitelist: "users"  
    mode: "bulk" 
    poll.interval.ms: "5000"  
    timestamp.column.name: "last_modified"  
    numeric.mapping: "best_fit" 
    value.converter: org.apache.kafka.connect.json.JsonConverter  
    value.converter.schemas.enable: "false" 


apiVersion: apps/v1
kind: Deployment
metadata:
 name: postgres
 labels:
   app: postgres
spec:
 replicas: 1
 selector:
 matchLabels:
  app: postgres
 template:
   metadata:
     labels:
       app: postgres
   spec:
     containers:
    - name: postgres
      image: postgres:13
      env:
        - name: POSTGRES_PASSWORD
          value: "examplepassword"  # Измените это на более безопасный пароль
        - name: POSTGRES_DB
          value: "exampledb"
      ports:
        - containerPort: 5432
---
apiVersion: v1
kind: Service
metadata:
  name: postgres
spec:
  selector:
  app: postgres
  ports:
   - protocol: TCP
     port: 5432
     targetPort: 5432

Ответ или решение

Решение проблемы с отсутствием папки плагинов в Strimzi Connect Operator

При развертывании Kafka Connect с использованием Strimzi в локальной среде, вы столкнулись с проблемой отсутствия папки /opt/kafka/plugins, необходимой для работы JDBC Source Connector. Рассмотрим, как правильно настроить Strimzi, чтобы плагин корректно загружался и папка создавалась автоматически.

1. Структура и конфигурация ресурсов

Ваши манифесты показывают, что вы используете KafkaConnect, KafkaConnector, а также развернули PostgreSQL как отдельный сервис. Важно учесть, что Strimzi имеет особую логику для работы с плагинами, и вам нужно следить за несколькими моментами:

  • Spec-класс KafkaConnect: Параметр plugin.path определяет, где Kafka Connect будет искать плагины. В вашем случае это /opt/kafka/external-configuration/plugins. Убедитесь, что эта директория указана правильно.

  • ConfigMap для плагинов: Вы создали ресурс ConfigMap под названием my-connector-plugins, но важно убедиться, что этот ConfigMap действительно создан и включает JAR-файл для JDBC Connector. Проверьте, правильно ли прописаны все необходимые данные в ConfigMap и что он содержит требуемые файлы.

2. Настройка ConfigMap

Пример создания ConfigMap, который включает JAR-файл вашего JDBC Connector:

apiVersion: v1
kind: ConfigMap
metadata:
  name: my-connector-plugins
  namespace: strimzi
data:
  jdbc-connector.jar: |
    # здесь будет содержимое jar файла, или вы можете указывать его локальный путь при сборке в вашем CI/CD

Обратите внимание, что JAR-файл должен быть доступен в ConfigMap, и его содержимое должно быть корректным.

3. Использование Volume в KafkaConnect

В вашем определении KafkaConnect добавьте Volume, который будет использовать ConfigMap для загрузки плагинов:

template:
  pod:
    volumes:
      - name: plugins
        configMap:
          name: my-connector-plugins  # Указываем правильное имя ConfigMap
    volumeMounts:
      - name: plugins
        mountPath: /opt/kafka/external-configuration/plugins

4. Перезапуск и диагностика

После внесения изменений в конфигурацию:

  • Убедитесь, что вы корректно развернули все сервисы опять, вы можете использовать команду:
kubectl apply -f <имя_вашего_файла>.yaml
  • Используйте команду для контроля подов, чтобы убедиться, что все поды переинициализировались и работали:
kubectl get pods -n strimzi
  • Логи Kafka Connect также помогут вам диагностировать проблемы:
kubectl logs -f <имя_connect_pod> -n strimzi

5. Заключение

Следуя этим шагам, вы сможете устранить проблему с отсутствием папки плагинов в Strimzi Connect Operator. Проведите детальную проверку на каждом этапе настройки, чтобы гарантировать успешное подключение к PostgreSQL и загрузку JDBC Source Connector. Убедитесь, что все ресурсы корректно настроены, и конфигурации правильно указаны, что обеспечит стабильную работу вашей интеграционной схемы.

Оцените материал
Добавить комментарий

Капча загружается...