Перейти к содержанию
Learning Platform
Глоссарий Troubleshooting
Урок 12.03 · 25 мин
Продвинутый
Kafka Connectcomparisonexactly-oncepush model

Kafka Connect Sink vs Kafka Engine

Для интеграции Kafka с ClickHouse существуют два принципиально разных подхода: Kafka Engine (pull-модель, встроенная в ClickHouse) и Kafka Connect ClickHouse Sink (push-модель, внешний коннектор). Выбор между ними определяется требованиями к семантике доставки, сложности инфраструктуры и операционной модели.


Два подхода к интеграции

Kafka Engine (pull-модель)

ClickHouse сам является Kafka consumer. Внешние компоненты не нужны — Engine работает как встроенная часть ClickHouse. Подробно рассмотрен в уроке 02.

Kafka Connect Sink (push-модель)

Внешний Kafka Connect кластер читает данные из Kafka и отправляет их в ClickHouse через HTTP/native интерфейс. ClickHouse выступает пассивным получателем — он не знает о Kafka, только принимает INSERT от коннектора.


Сравнительная таблица

Kafka Engine vs Kafka Connect Sink: сравнение подходов
ХарактеристикаХарактеристика: атрибут, по которому сравниваются подходы.
Kafka Engine (Pull)Kafka Engine (Pull): ClickHouse — активный consumer. Читает данные самостоятельно из Kafka broker.
Kafka Connect Sink (Push)Kafka Connect Sink (Push): внешний Kafka Connect кластер читает из Kafka и отправляет данные в ClickHouse через INSERT.
МодельМодель взаимодействия: определяет кто является активной стороной в процессе передачи данных.
Pull (ClickHouse читает)Pull: ClickHouse сам опрашивает Kafka broker с интервалом kafka_poll_timeout_ms. Инициатор — ClickHouse.
Push (Connect пишет)Push: Kafka Connect worker читает из Kafka и отправляет батчи в ClickHouse. Инициатор — Connect worker.
СемантикаСемантика доставки: гарантии обработки каждого сообщения.
At-least-onceAt-least-once: каждое сообщение обработано хотя бы один раз. При сбое возможны дубли — offset коммитится после INSERT, но сбой между ними создаёт повторную обработку.
Exactly-once (EOS)Exactly-once: каждое сообщение обработано ровно один раз. Достигается через idempotent producer + Kafka транзакции + Connect exactly-once semantics (EOS). Требует Kafka 2.3+ и Connect 2.3+.
ИнфраструктураСложность инфраструктуры: что нужно дополнительно к Kafka и ClickHouse.
Kafka + ClickHouseМинимальная: только Kafka + ClickHouse. Никаких дополнительных сервисов не требуется. Kafka Engine — встроенная часть ClickHouse.
Kafka + ClickHouse + Connect кластерТребует отдельный Kafka Connect кластер (distributed mode для production). Это дополнительные JVM-процессы, monitoring, scaling, failover для Connect workers.
Debezium CDCСовместимость с Debezium CDC: Debezium — популярный коннектор для Change Data Capture из PostgreSQL, MySQL.
Не поддерживается напрямуюНе поддерживается напрямую: Kafka Engine читает сырые сообщения. Для CDC-событий с полем op и before/after нужна дополнительная трансформация в MV.
Нативная поддержка CDCПолная поддержка: Debezium Connect + ClickHouse Sink — стандартный enterprise CDC pipeline. SMT (Single Message Transforms) для трансформации CDC-событий поддерживаются нативно.
ThroughputThroughput: относительная производительность при равных ресурсах.
Высокий (прямой)Высокий: прямое чтение из Kafka без промежуточного сервиса. Нет дополнительных network hop.
Высокий (+ network hop)Высокий, но с доп. hop: Connect worker → HTTP/native → ClickHouse. Дополнительный network round-trip может снизить throughput при высоких нагрузках.

Exactly-once в Kafka Connect

Kafka Connect достигает exactly-once через три механизма одновременно:

  1. Idempotent producer (enable.idempotence=true) — Kafka broker дедуплицирует повторные записи от producer
  2. Kafka транзакции — Connect worker использует Kafka транзакции для атомарной записи offset + данных
  3. ClickHouse idempotent INSERT — ClickHouse ClickHouse Sink connector использует insert_deduplication_token при вставке
# Kafka Connect ClickHouse Sink конфигурация с exactly-once
name: clickhouse-sink
config:
  connector.class: com.clickhouse.kafka.connect.ClickHouseSinkConnector
  topics: events
  clickhouse.server.url: http://clickhouse:8123
  clickhouse.server.database: default
  clickhouse.server.table: events_local
  exactlyOnce: true
  # Требует Kafka транзакции на стороне Connect worker
WARNING

Kafka Connect Sink требует отдельный запущенный Kafka Connect кластер. В production это означает несколько Connect worker-процессов для высокой доступности. Это дополнительная инфраструктура, которую нужно развертывать, мониторить и масштабировать.


Когда выбирать Kafka Engine

Kafka Engine — правильный выбор когда:

  • Нужна простота: минимум инфраструктурных компонентов
  • At-least-once семантика достаточна (большинство аналитических сценариев)
  • Данные идут напрямую из Kafka без CDC-трансформации
  • Команда предпочитает управлять всем внутри ClickHouse

Когда выбирать Kafka Connect Sink

Kafka Connect Sink — правильный выбор когда:

  • Требуется exactly-once (compliance, финансовые транзакции, аудит)
  • Используется Debezium CDC pipeline из PostgreSQL/MySQL
  • Уже существует корпоративная инфраструктура Kafka Connect
  • Нужны SMT (Single Message Transforms) для трансформации схемы

Ключевые выводы

  1. Kafka Engine — pull-модель: ClickHouse читает из Kafka самостоятельно, без внешних сервисов. At-least-once.
  2. Kafka Connect Sink — push-модель: внешний Connect кластер отправляет данные в ClickHouse. Exactly-once через EOS.
  3. Kafka Connect требует отдельного Connect кластера — дополнительная инфраструктура, мониторинг, scaling.
  4. Для Debezium CDC pipeline выбирайте Connect Sink: нативная поддержка CDC-событий и SMT.
  5. Для простоты и at-least-once аналитики выбирайте Kafka Engine: меньше движущихся частей, ниже операционная сложность.
Apache Kafka: consumer groups, at-least-once и идемпотентность Spark Structured Streaming: Kafka source, offsets и exactly-once

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 11