Почему стоит передавать данные из SQL Server в ClickHouse?
- Внутренняя отчётность без влияния на производительность рабочих приложений
- Клиентские панели мониторинга, которые должны работать быстро и всегда показывать актуальные данные
- Стриминг событий, например чтобы журналы активности пользователей всегда оставались актуальными для аналитики
Что нужно для начала
Предварительные требования
- Работающий экземпляр SQL Server
- Для этого руководства мы используем AWS RDS for SQL Server, но подойдет любой современный экземпляр SQL Server.Настройка AWS SQL Server с нуля.
- Экземпляр ClickHouse
- Самоуправляемый или облачный.Настройка ClickHouse с нуля.
- Streamkap
- Этот инструмент станет основой вашего конвейера потоковой передачи данных.
Параметры подключения
- адрес сервера SQL Server, порт, имя пользователя и пароль. Для доступа Streamkap к вашей базе данных SQL Server рекомендуется создать отдельные учетную запись и роль.Ознакомьтесь с нашей документацией по настройке.
- адрес сервера ClickHouse, порт, имя пользователя и пароль. IP Access List в ClickHouse определяет, какие сервисы могут подключаться к вашей базе данных ClickHouse.Следуйте инструкциям здесь.
- таблицы, которые вы хотите передавать в поток — пока начните с одной
1
Создание источника SQL Server в Streamkap
Давайте начнём!Сначала настроим подключение к источнику. Так Streamkap понимает, откуда получать изменения.Вот как это сделать:
- Откройте Streamkap и перейдите в раздел источников.
- Создайте новый источник.
- Укажите понятное имя (например, sqlserver-demo-source).
- Заполните сведения о подключении к SQL Server:
- Хост (например, your-db-instance.rds.amazonaws.com)
- Порт (по умолчанию для SQL Server используется 3306)
- Имя пользователя и пароль
- Имя базы данных
Что происходит в фоновом режиме
После настройки Streamkap подключится к вашему SQL Server и обнаружит таблицы. Для этой демонстрации мы выберем таблицу, в которую уже поступают данные, например events или transactions.2
Добавьте ClickHouse как пункт назначения в Streamkap
Теперь настроим пункт назначения, куда будут отправляться все эти данные.Как и в случае с источником, мы создадим пункт назначения, используя сведения о подключении ClickHouse.
Шаги:
- Перейдите в раздел пунктов назначения в Streamkap.
- Добавьте новый пункт назначения — выберите ClickHouse в качестве типа пункта назначения.
- Введите данные для ClickHouse:
- Хост
- Порт (по умолчанию — 9000)
- Имя пользователя и пароль
- Имя базы данных
Режим upsert: что это?
Это важный шаг: нам нужно использовать режим ClickHouse «upsert», который «под капотом» использует движок ReplacingMergeTree в ClickHouse. Это позволяет эффективно объединять входящие записи и обрабатывать обновления после приёма, используя то, что ClickHouse называет «слиянием частей».- Это гарантирует, что ваша целевая таблица не будет заполняться дубликатами при изменениях на стороне SQL Server.
Обработка изменения схемы
В ClickHouse и SQL Server набор столбцов иногда различается — особенно когда приложение уже работает, а разработчики продолжают добавлять новые столбцы на лету.- Хорошая новость: Streamkap поддерживает базовое изменение схемы. Это значит, что если вы добавите новый столбец в SQL Server, он появится и в ClickHouse.
3
Настройте конвейер в Streamkap
Когда источник и пункт назначения заданы, пора перейти к самой интересной части — стримингу данных!
Настройка конвейера
- Перейдите на вкладку Pipelines в Streamkap.
- Создайте новый конвейер.
-
Выберите источник SQL Server (
sqlserver-demo-source). -
Выберите пункт назначения ClickHouse (
clickhouse-tutorial-destination). -
Выберите таблицу, которую хотите передавать в стриминге, — допустим, это
events. - Настройте CDC (фиксация изменений данных).
- В этом примере мы будем передавать в стриминге новые данные (на первом этапе дозагрузку можно пропустить и сосредоточиться на событиях CDC).
Нужна ли вам дозагрузка?
У вас может возникнуть вопрос: нужно ли дозагружать старые данные?Во многих аналитических сценариях достаточно просто начать со стриминга изменений с текущего момента, а при необходимости позже можно дозагрузить и более старые данные.Пока просто выберите “don’t backfill”, если только у вас нет конкретной необходимости.4
Просмотр потока данных
Теперь ваш конвейер настроен и работает!Вот что происходит:При высокой нагрузке возможна некоторая задержка, но в большинстве случаев данные поступают почти в реальном времени.
- Когда в исходную таблицу SQL Server поступают новые данные, конвейер Streamkap фиксирует изменения и отправляет их в ClickHouse.
- ClickHouse (благодаря ReplacingMergeTree и слиянию частей) принимает эти строки и объединяет обновления.
- Схема успевает за изменениями — добавьте столбцы в SQL Server, и они появятся и в ClickHouse.
Что происходит «под капотом»: что на самом деле делает Streamkap?
- Streamkap отслеживает бинарный лог SQL Server (тот самый лог, который используется для репликации).
- Как только в вашей таблице вставляется, обновляется или удаляется строка, Streamkap сразу фиксирует это событие.
- Он преобразует событие в формат, понятный ClickHouse, и передаёт его дальше, мгновенно применяя изменения в вашей аналитической БД.
Расширенные возможности
Режимы Upsert и Insert
- Режим Insert: Каждая новая строка добавляется — даже если это обновление, в результате появляются дубликаты.
- Режим Upsert: Обновления существующих строк перезаписывают текущие данные — такой режим гораздо лучше поддерживает актуальность и чистоту аналитики.
Обработка изменений схемы
- Добавили новый столбец в рабочую таблицу? Streamkap обнаружит его и добавит на стороне ClickHouse.
- Удалили столбец? В зависимости от настроек может потребоваться миграция, но в большинстве случаев новые столбцы добавляются без проблем.
Практический мониторинг: как следить за конвейером
Проверка состояния конвейера
- Просматривать отставание конвейера (насколько свежи ваши данные?)
- Отслеживать количество строк и пропускную способность
- Получать оповещения, если что-то идет не так
Основные метрики, за которыми стоит следить
- Отставание: насколько ClickHouse отстаёт от SQL Server?
- Пропускная способность: число строк в секунду
- Частота ошибок: должна быть близка к нулю
Переходим к делу: запросы к ClickHouse
Следующие шаги и материалы для углублённого изучения
- Настройка фильтрации потоков (синхронизация только некоторых таблиц/столбцов)
- Стриминг данных из нескольких источников в одну аналитическую БД
- Использование этого вместе с S3/озёрами данных для холодного хранения
- Автоматизация миграций схемы при изменении таблиц
- Защита вашего конвейера с помощью SSL и правил firewall
FAQ и устранение неполадок
Подводя итоги
- Upsert и вставка: все тонкости обоих подходов
- Сквозная задержка: как быстро можно получить итоговое аналитическое представление?
- Настройка производительности и пропускная способность
- Практические панели мониторинга на основе этого стека