Что такое Kafka connector?

«Что такое Kafka connector?» — вопрос из категории Брокеры сообщений, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Kafka Connect — это масштабируемый, отказоустойчивый фреймворк, входящий в экосистему Apache Kafka, предназначенный для потоковой передачи данных между Kafka и внешними системами без написания кастомного кода. В DevOps-практиках он используется для построения data pipelines, интеграции баз данных, синхронизации данных между системами и загрузки данных в data lakes/warehouses.

Два основных типа коннекторов:

  • Source Connectors: Забирают данные из внешней системы (например, PostgreSQL, MySQL, S3, Salesforce) в топик Kafka. Используют механизмы вроде CDC (Change Data Capture) или polling.
  • Sink Connectors: Отправляют данные из топиков Kafka во внешнюю систему (например, Elasticsearch для логов, S3 для долгосрочного хранения, базу данных, или другой кластер Kafka).

Ключевые особенности с точки DevOps:

  • Распределённый режим (Distributed Mode): Коннекторы развёртываются как кластер рабочих узлов (workers) в Kubernetes или на виртуальных машинах. Kafka Connect сам управляет распределением задач (tasks) между воркерами и обеспечивает отказоустойчивость — если воркер падает, его задачи перераспределяются.
  • Конфигурация через REST API: Удобно для автоматизации в CI/CD.
  • Поддержка сериализации: Интеграция с Schema Registry (Avro, Protobuf, JSON Schema) для контроля схемы данных.

Пример: Развёртывание Debezium PostgreSQL Source Connector для CDC через REST API

# Конфигурация коннектора (упрощённо)
CONNECTOR_CONFIG='{
  "name": "inventory-connector",
  "config": {
    "connector.class": "io.debezium.connector.postgresql.PostgresConnector",
    "tasks.max": "1",
    "database.hostname": "postgres-host",
    "database.port": "5432",
    "database.user": "replicator",
    "database.password": "${securepass}",
    "database.dbname": "inventory",
    "database.server.name": "dbserver1",
    "table.include.list": "public.customers",
    "plugin.name": "pgoutput"
  }
}'

# Отправка конфигурации в Kafka Connect кластер
curl -X POST -H "Content-Type: application/json" --data "$CONNECTOR_CONFIG" http://connect-cluster:8083/connectors

В DevOps мы упаковываем такие конфигурации в Helm-чарты или Terraform-модули для воспроизводимого развёртывания.