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 от коннектора.
Сравнительная таблица
Exactly-once в Kafka Connect
Kafka Connect достигает exactly-once через три механизма одновременно:
- Idempotent producer (
enable.idempotence=true) — Kafka broker дедуплицирует повторные записи от producer - Kafka транзакции — Connect worker использует Kafka транзакции для атомарной записи offset + данных
- 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
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) для трансформации схемы
Ключевые выводы
- Kafka Engine — pull-модель: ClickHouse читает из Kafka самостоятельно, без внешних сервисов. At-least-once.
- Kafka Connect Sink — push-модель: внешний Connect кластер отправляет данные в ClickHouse. Exactly-once через EOS.
- Kafka Connect требует отдельного Connect кластера — дополнительная инфраструктура, мониторинг, scaling.
- Для Debezium CDC pipeline выбирайте Connect Sink: нативная поддержка CDC-событий и SMT.
- Для простоты и at-least-once аналитики выбирайте Kafka Engine: меньше движущихся частей, ниже операционная сложность.