Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

+1 361новая вакансия за сутки·93 707вакансий открыто сейчас·Новое:Talanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Новые вакансии в TelegramРаботодателям
Talanto
Вакансии
Компании7 266
РезюмеAIПодготовкаСтатьи
BoostТарифыBoost
Войти

Не нашли подходящее?

Пусть нужная вакансия найдёт вас сама.

  1. Подборка в TelegramНовые вакансии по вашему фильтру — сразу в бота.Подключить
  2. Мэтчи по резюмеЗагрузите резюме — покажем, где вы подходите лучше всего.Загрузить
  3. Сохранить фильтрНастройте поиск один раз и возвращайтесь к новым вакансиям.Настроить
Что нового на TalantoTalanto осенью: поиск с цифрами, вакансия по шагам и каталог компаний

Для работодателей

Опубликуйте вакансию — отклики придут в ваш кабинет.

  1. Вакансиябесплатно
  2. Откликиконтакты бесплатно
  3. Наймэтапы и интервью

40 компаний публикуют вакансии напрямую · 4 402 кандидата открыты к предложениям

Разместить вакансию

Популярные направления

Все подборки
  • Python17 108
  • Облачные технологии14 073
  • QA вакансии3 460
  • Backend вакансии2 114
  • Инженер данных1 805
  • Продакт-менеджер1 266

Разработка

  • Android1 866
  • iOS1 699
  • Fullstack вакансии986
  • AI вакансии955
  • Frontend вакансии745
  • Mobile вакансии44

По стеку

  • Go8 652
  • Java6 545
  • Node.js2 019
  • .NET1 721
  • Kotlin1 623
  • Rust1 453
  • C#710
  • PHP683
  • C++571

DevOps и инфраструктура

  • Kubernetes7 763
  • DevOps вакансии6 060
  • Linux-инфраструктура5 492
  • Terraform / IaC4 261
  • CI/CD3 241
  • Мониторинг и Observability1 783
  • SRE566
  • Кибербезопасность453

Аналитика и данные

  • Data Scientist1 140
  • Бизнес-аналитик930
  • Аналитик данных853
  • Системный аналитик154

Другие направления

  • Проджект-менеджер615
  • UI/UX дизайн146
  • Ручное тестирование14

По регионам

  • Вакансии в США44 321
  • Вакансии в Европе23 862
  • Вакансии в Канаде4 479
  • Работа в России3 913

По формату

  • Удалённые вакансии75 064
  • Релокация в США44 314
  • Гибридная работа12 393
  • Офисная работа7 089

По уровню

  • Senior вакансии42 691
  • Middle вакансии20 905
  • Junior вакансии6 727

Сейчас нанимают

Все компании
  • Wise190 вакансий
  • Rakuten189 вакансий
  • ASML166 вакансий
  • Grab138 вакансий
  • Celonis39 вакансий
  • Spotify36 вакансий
  • Adyen29 вакансий
  • Infobip28 вакансий
  • Monzo20 вакансий
  • Darktrace16 вакансий

Вакансии из 344 источников: карьерные страницы компаний и джоб-борды.

КомпанииО насНовостиПубличная офертаУсловия использованияПолитика конфиденциальностиПоддержка
←К теме ClickHouseВсе вопросы
ClickHouseSeniorПроектирование систем

Как ClickHouse интегрируется с Kafka для приёма данных в реальном времени?

В закладки
Сначала попробуйте ответить сами30 секунд
Сравнить с ответом ↓

ClickHouse читает Kafka через встроенный движок Kafka (Kafka engine table), который в связке с Materialized View непрерывно опрашивает топик и записывает батчи в целевую MergeTree-таблицу; число consumer-потоков ограничено числом партиций топика, а offsets хранятся в Kafka consumer group.

Шаг 1: Целевая таблица хранения

CREATE TABLE events_raw
(
    event_time  DateTime,
    user_id     UInt64,
    event_type  String,
    payload     String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMM(event_time)
ORDER BY (user_id, event_time);

Интеграция ClickHouse с Kafka

ClickHouse имеет встроенный движок таблиц Kafka, который работает как consumer: читает сообщения из топиков, конвертирует их в строки и передаёт в материализованное представление (Materialized View), которое пишет в целевую MergeTree-таблицу. Это стандартный паттерн приёма данных в реальном времени без внешних сервисов (Kafka Connect, Flink и др.).

Архитектура потока данных

  • Kafka topic → Kafka engine table (читает сообщения) → Materialized View (трансформирует) → MergeTree table (хранит)
  • Kafka-таблица является виртуальной: SELECT из неё потребляет сообщения и не позволяет читать их повторно.
  • Offsets хранятся в Kafka (consumer group), а не в ClickHouse.

Шаг 2: Kafka engine table

CREATE TABLE events_kafka
(
    event_time  DateTime,
    user_id     UInt64,
    event_type  String,
    payload     String
)
ENGINE = Kafka()
SETTINGS
    kafka_broker_list = 'kafka:9092',
    kafka_topic_list = 'events',
    kafka_group_name = 'clickhouse_consumer',
    kafka_format = 'JSONEachRow',
    kafka_num_consumers = 4,
    kafka_max_block_size = 65536,
    kafka_poll_timeout_ms = 500;

Шаг 3: Materialized View

CREATE MATERIALIZED VIEW events_mv
TO events_raw
AS
SELECT
    event_time,
    user_id,
    event_type,
    payload
FROM events_kafka;

Поддерживаемые форматы

  • JSONEachRow — один JSON-объект на строку (NDJSON)
  • AvroConfluent — Avro с Schema Registry
  • Protobuf — требует .proto файл в format_schema_path
  • CSV, TSV, RawBLOB и др.

Мониторинг потребления

-- Статус consumer threads
SELECT *
FROM system.kafka_consumers
WHERE database = 'default' AND table = 'events_kafka';

-- Метрики из system.metrics
SELECT metric, value
FROM system.metrics
WHERE metric LIKE 'Kafka%';

Настройка для высокой пропускной способности

-- kafka_num_consumers должен быть <= числу партиций в топике
-- kafka_max_block_size определяет размер батча (строк) перед записью в MV
ALTER TABLE events_kafka MODIFY SETTING
    kafka_num_consumers = 8,
    kafka_max_block_size = 100000,
    kafka_flush_interval_ms = 7500;

Схема с dead-letter queue

-- Добавляем вспомогательную таблицу для ошибок парсинга
CREATE TABLE events_errors
(
    raw_message String,
    error       String,
    received_at DateTime DEFAULT now()
)
ENGINE = MergeTree()
ORDER BY received_at;

-- В MV используем _error virtual column (ClickHouse 23.9+)
CREATE MATERIALIZED VIEW events_mv_errors
TO events_errors
AS
SELECT
    _raw_message AS raw_message,
    _parse_error AS error
FROM events_kafka
WHERE _parse_error != '';

Подводные камни

  • Kafka-таблица не поддерживает транзакционную семантику exactly-once «из коробки» — при сбое ClickHouse до commit offset возможны дубликаты; используйте ReplacingMergeTree или дедупликацию по уникальному полю.
  • kafka_num_consumers не может превышать число партиций топика — лишние consumer threads простаивают, увеличивая load без пользы.
  • DROP TABLE events_kafka немедленно сбрасывает consumer group offset — при пересоздании таблица начнёт читать с latest (или earliest по настройке), что ведёт к пропуску или дублированию данных.
  • Materialized View и Kafka-таблица должны находиться в одной базе данных — межбазовый MV с Kafka не работает корректно.
  • SELECT из Kafka-таблицы потребляет сообщения безвозвратно — никогда не делайте вручную SELECT для отладки в production; используйте system.kafka_consumers.
  • При изменении схемы Kafka-таблицы (ALTER) нужно пересоздавать MV — ALTER не обновляет MV автоматически.
  • Kafka engine в ClickHouse Cloud имеет ограничения на версию librdkafka и не поддерживает все настройки kafka_* — часть настроек игнорируется молча.
  • При высокой latency сети между ClickHouse и Kafka broker kafka_poll_timeout_ms нужно увеличивать — иначе consumer threads тратят большую часть времени на ожидание.

Частые вопросы на собеседовании

  • Что такое ClickHouse и к какому типу СУБД он относится?
  • Что такое колоночное хранение (columnar storage) и почему оно лучше подходит для аналитических нагрузок?
  • Что такое движок таблиц MergeTree и как он работает?
  • Что такое первичный ключ (primary key) в ClickHouse и чем он отличается от primary key в реляционных базах данных?

Типичные ошибки

  • Объяснять kafka integration как OLTP-механику row-store базы вместо аналитической колоночной модели ClickHouse.
  • Путать primary key ClickHouse с уникальным constraint из PostgreSQL или MySQL.
  • Игнорировать parts, merges, ORDER BY, sparse index и стоимость маленьких вставок.
  • Предлагать синтаксис или транзакционное поведение, которого в ClickHouse нет.

Что проверяет интервьюер

  • Кандидат объясняет kafka integration через реальный механизм ClickHouse, а не общими словами.
  • Приводит корректный SQL или диагностический запрос для этой СУБД.
  • Называет ограничения, версионные отличия или эксплуатационные последствия.
  • Связывает ответ с проектированием приложения, производительностью, надежностью или безопасностью.

Как вы знаете этот вопрос?

Проверить себя по теме ClickHouse →

Источники

  • https://clickhouse.com/docs/integrations/kafka

Связанные темы

ClickHousedata-ingestionstream-processing