Сжатие сообщений
Мы настоятельно рекомендуем использовать сжатие для топиков Kafka. Сжатие позволяет существенно сократить затраты на передачу данных практически без ущерба для производительности. Чтобы узнать больше о сжатии сообщений в Kafka, рекомендуем начать с этого руководства.Ограничения
DEFAULTне поддерживается.- По умолчанию размер отдельного сообщения ограничен 16 МБ (без сжатия) при использовании реплики минимального размера (XS) и 32 МБ (без сжатия) при использовании реплик большего размера. Сообщения, превышающие этот лимит, будут отклонены с ошибкой. Если вам нужны сообщения большего размера, обратитесь в службу поддержки.
Семантика доставки
ClickPipes for Kafka по умолчанию гарантирует доставку как минимум один раз, отслеживая ход ингестии по смещениям группы потребителей Kafka. Также он опционально поддерживает семантику «ровно один раз»: каждая запись Kafka вставляется в ClickHouse ровно один раз, даже при перезапусках подов, перебалансировках потребителей и сбоях вставки. Для обеспечения семантики «ровно один раз» ClickPipes сохраняет прогресс каждой партиции во внутреннем хранилище состояния, используя два значения:- Метка верхней границы — смещение, до которого подтверждена вставка в ClickHouse всех записей партиции. После перезапуска ClickPipes отбрасывает записи с этим смещением или меньшим, поэтому уже доставленные данные никогда не отправляются повторно.
- Ожидающие диапазоны — диапазоны смещений блоков вставки, отправленных в ClickHouse, но ещё не подтверждённых. После сбоя ClickPipes повторно обрабатывает именно эти диапазоны.
topic:partition:firstOffset-lastOffset. При повторной обработке ClickPipes воспроизводит тот же диапазон смещений и, следовательно, тот же токен, поэтому ClickHouse отклоняет дубликат. Поскольку токен зависит только от диапазона смещений, повторная обработка дедуплицируется, даже если заново сформированный блок не идентичен исходному побайтно.
Окно дедупликацииДедупликация по токенам ограничена параметрами целевой таблицы
replicated_deduplication_window (по умолчанию последние 10 000 блоков вставки) и replicated_deduplication_window_seconds (по умолчанию один час). Пайпы с высокой пропускной способностью могут быстро исчерпать окно по количеству блоков, поэтому рекомендуем проверить и при необходимости увеличить оба параметра целевой таблицы, чтобы они покрывали максимальную возможную задержку повторной обработки. Данные, повторно обработанные после того, как их токен вышел из окна, могут быть вставлены снова, поэтому в этом случае семантика «ровно один раз» не гарантируется.from_beginning ни на что не влияет, если у группы потребителей уже есть зафиксированное смещениеСтратегия смещения (from_beginning, from_latest, from_timestamp) применяется только тогда, когда группа потребителей впервые читает данную партицию. Если брокер уже хранит зафиксированное смещение для этой группы потребителей, стратегия не действует. Именно так происходит, когда вы удаляете и заново создаёте ClickPipe с прежним именем группы потребителей (независимо от того, было ли имя сгенерировано автоматически или задано явно, например в Terraform). Брокер продолжает чтение с последнего зафиксированного смещения, а не с начала топика, и сообщения, записанные или сохранённые до этого смещения, пропускаются, а не принимаются повторно.Если при повторном создании нужно заново прочитать весь топик, используйте новое имя группы потребителей (или явно сбросьте/удалите смещения старой группы потребителей на стороне брокера) — одной лишь стратегии смещения для этого недостаточно.Обработка tombstone-записей
Tombstone-записи Kafka — это записи с ключом и значением null. В разделе расширенной настройки можно настроить, как Kafka ClickPipe будет их обрабатывать:- Delete matching rows удаляет соответствующие строки из целевой таблицы с помощью легковесного удаления. Этот параметр доступен только при включенной семантике «ровно один раз». Легковесные удаления ресурсоёмки и не подходят для больших рабочих нагрузок.
- Mark rows as deleted записывает каждую tombstone-запись в виде строки. Для больших рабочих нагрузок рекомендуется именно этот параметр: создайте целевую таблицу на движке
ReplacingMergeTreeи выберите виртуальный столбец_is_deleted. ClickPipes назначит этот виртуальный столбец столбцомis_deletedдвижка.
Аутентификация
Для источников данных, использующих протокол Apache Kafka, ClickPipes поддерживает аутентификацию SASL/PLAIN с шифрованием TLS, а такжеSASL/SCRAM-SHA-256 и SASL/SCRAM-SHA-512. В зависимости от источника стриминга (Redpanda, MSK и т. д.) будут доступны все или только некоторые из этих механизмов аутентификации — в зависимости от совместимости. Если вам нужны другие способы аутентификации, пожалуйста, сообщите нам об этом.
Размер выборки в Warpstream
ClickPipes используют параметр Kafkamax.fetch_bytes, чтобы ограничить размер данных, одновременно обрабатываемых одним узлом ClickPipes. В некоторых случаях
Warpstream игнорирует этот параметр, что может приводить к непредвиденным сбоям пайпов. Мы настоятельно рекомендуем при настройке агента WarpStream установить специальный параметр Warpstream kafkaMaxFetchPartitionBytesUncompressedOverride
в значение 8 MB (или меньше), чтобы предотвратить сбои ClickPipes.
IAM
ClickPipes поддерживает следующие способы аутентификации AWS MSK- аутентификация SASL/SCRAM-SHA-512
- аутентификация с использованием учетных данных IAM или доступа на основе ролей
Настройка доверительной связи
Если вы выполняете аутентификацию в MSK с помощью ARN роли IAM, вам нужно настроить доверительную связь между вашим экземпляром ClickHouse Cloud и этой ролью, чтобы экземпляр мог принять роль.Доступ на основе ролей работает только для экземпляров ClickHouse Cloud, развернутых в AWS.
Пользовательские сертификаты
ClickPipes for Kafka поддерживает загрузку пользовательских сертификатов для брокеров Kafka, использующих непубличные серверные сертификаты. Также можно загружать клиентские сертификаты и ключи для аутентификации на основе взаимного TLS (mTLS).Производительность
Батчинг
ClickPipes вставляет данные в ClickHouse батчами. Это позволяет избежать создания слишком большого количества частей в базе данных, что может привести к проблемам с производительностью кластера. Батчи вставляются при выполнении одного из следующих условий:- Размер батча достиг максимального значения (100 000 строк или 28 МБ на 1 ГБ памяти пода)
- Батч оставался открытым в течение максимально допустимого времени (5 секунд)
Задержка
Задержка (определяемая как время между публикацией сообщения в Kafka и моментом, когда оно становится доступным в ClickHouse) зависит от ряда факторов (например, задержки брокера, сетевой задержки, размера/формата сообщения). Батчинг, описанный в разделе выше, также влияет на задержку. Мы всегда рекомендуем тестировать ваш конкретный сценарий при типичных нагрузках, чтобы определить ожидаемую задержку. ClickPipes не предоставляет никаких гарантий по задержке. Если у вас есть строгие требования к низкой задержке, пожалуйста, свяжитесь с нами.Масштабирование
ClickPipes for Kafka поддерживает горизонтальное и вертикальное масштабирование. По умолчанию создается группа потребителей с одним потребителем. Это можно настроить при создании ClickPipe или позже в разделе Настройки -> Дополнительные настройки -> Масштабирование. ClickPipes обеспечивает высокую доступность благодаря архитектуре, распределенной по зонам доступности. Для этого необходимо масштабирование как минимум до двух потребителей. Независимо от количества работающих потребителей отказоустойчивость обеспечивается на уровне архитектуры. Если потребитель или базовая инфраструктура выйдет из строя, ClickPipe автоматически перезапустит потребителя и продолжит обработку сообщений.Бенчмарки
Ниже приведены несколько неформальных бенчмарков для ClickPipes for Kafka, которые помогут получить общее представление о базовой производительности. Важно учитывать, что на производительность влияет множество факторов, включая размер сообщений, типы данных и формат данных. Фактические результаты могут отличаться, и приведенные здесь значения не гарантируют такой же производительности в реальных условиях. Детали бенчмарка:- Мы использовали сервисы ClickHouse Cloud в продакшн-конфигурации с достаточным объемом ресурсов, чтобы пропускная способность не упиралась в обработку вставки на стороне ClickHouse.
- Сервис ClickHouse Cloud, кластер Kafka (Confluent Cloud) и ClickPipe работали в одном регионе (
us-east-2). - ClickPipe был настроен с одной репликой размера L (4 GiB оперативной памяти и 1 vCPU).
- Тестовые данные включали вложенные структуры и сочетание типов
UUID,StringиInt. Другие типы данных, такие какFloat,DecimalиDateTime, могут давать более низкую производительность. - Заметной разницы в производительности между сжатыми и несжатыми данными не наблюдалось.