Перейти к основному содержанию
Этот движок позволяет интегрировать ClickHouse с NATS. NATS позволяет:
  • Публиковать сообщения в subject и подписываться на них.
  • Обрабатывать новые сообщения по мере их поступления.

Создание таблицы

Обязательные параметры:
  • nats_url – host:port (например, localhost:4222)..
  • nats_subjects – Список subject для таблицы NATS, на которые нужно подписываться или в которые нужно публиковать сообщения. Поддерживаются subject с подстановочными символами, например foo.*.bar или baz.>
  • nats_format – Формат сообщений. Используется та же нотация, что и в SQL-функции FORMAT, например JSONEachRow. Подробнее см. в разделе Форматы.
Необязательные параметры:
  • nats_schema – Параметр, который необходимо использовать, если формат требует определения схемы. Например, Cap’n Proto требует путь к файлу схемы и имя корневого объекта schema.capnp:Message.
  • nats_stream – Имя существующего stream в NATS JetStream.
  • nats_consumer_name – Имя существующего durable pull consumer в NATS JetStream.
  • nats_num_consumers – Количество consumers на таблицу. По умолчанию: 1. Укажите больше consumers, если пропускной способности одного consumer недостаточно; применяется только к NATS core.
  • nats_queue_group – Имя queue group для подписчиков NATS. По умолчанию используется имя таблицы.
  • nats_max_reconnect – Устарел и не имеет эффекта; переподключение выполняется постоянно с тайм-аутом nats_reconnect_wait.
  • nats_reconnect_wait – Время ожидания в миллисекундах между попытками переподключения. По умолчанию: 2000.
  • nats_server_list - Список серверов для подключения. Можно указать для подключения к кластеру NATS.
  • nats_skip_broken_messages - Допустимое число несовместимых со схемой сообщений для parser сообщений NATS на блок. По умолчанию: 0. Если nats_skip_broken_messages = N, то движок пропускает N сообщений NATS, которые не удаётся разобрать (одно сообщение соответствует одной строке данных).
  • nats_max_block_size - Число строк, собираемых с помощью poll(s) для сброса данных из NATS. По умолчанию: max_insert_block_size.
  • nats_flush_interval_ms - Тайм-аут для сброса данных, прочитанных из NATS. По умолчанию: stream_flush_interval_ms.
  • nats_username - Имя пользователя NATS.
  • nats_password - Пароль NATS.
  • nats_token - Токен аутентификации NATS.
  • nats_credential_file - Путь к файлу учётных данных NATS.
  • nats_startup_connect_tries - Количество попыток подключения при запуске. По умолчанию: 5.
  • nats_max_rows_per_message — Максимальное количество строк, записываемых в одно сообщение NATS для построчных форматов. (по умолчанию: 1).
  • nats_handle_error_mode — Как обрабатывать ошибки движка NATS. Возможные значения: default (если не удаётся разобрать сообщение, будет сгенерировано исключение), stream (сообщение об исключении и исходное сообщение будут сохранены в виртуальных столбцах _error и _raw_message).
SSL-подключение: Для безопасного подключения используйте nats_secure = 1. Проверка сертификата управляется переменной окружения CLICKHOUSE_NATS_TLS_SECURE; Если срок действия сертификата истёк, сертификат самоподписанный, отсутствует или иным образом недействителен, отключите проверку, установив CLICKHOUSE_NATS_TLS_SECURE=0. Запись в таблицу NATS: Если таблица читает только из одного subject, любая вставка будет публиковаться в тот же subject. Однако если таблица читает из нескольких subject, нужно указать, в какой subject следует публиковать данные. Поэтому при вставке в таблицу с несколькими subject необходимо задать stream_like_engine_insert_queue. Вы можете выбрать один из subject, из которых читает таблица, и опубликовать туда свои данные. Например:
Также можно добавить настройки формата вместе с настройками NATS. Пример:
Конфигурацию сервера NATS можно добавить в файл конфигурации ClickHouse. В частности, можно добавить пароль для движка NATS:

Описание

SELECT не особенно полезен для чтения сообщений (кроме отладки), поскольку каждое сообщение можно прочитать только один раз. Гораздо практичнее создавать потоки в реальном времени с помощью materialized views. Для этого:
  1. Используйте движок, чтобы создать consumer NATS, и рассматривайте его как поток данных.
  2. Создайте таблицу с нужной структурой.
  3. Создайте materialized view, которое преобразует данные из движка и помещает их в ранее созданную таблицу.
Когда MATERIALIZED VIEW подключается к движку, оно начинает собирать данные в фоновом режиме. Это позволяет непрерывно получать сообщения из NATS и преобразовывать их в требуемый формат с помощью SELECT. Одна таблица NATS может иметь сколько угодно materialized views; они не читают данные из таблицы напрямую, а получают новые записи (блоками), поэтому вы можете записывать данные в несколько таблиц с разным уровнем детализации (с группировкой — агрегацией — и без неё). Пример:
Чтобы перестать получать данные из потоков или изменить логику преобразования, отсоедините materialized view:
Если вы хотите изменить целевую таблицу с помощью ALTER, мы рекомендуем отключить materialized view, чтобы избежать расхождений между целевой таблицей и данными из представления.

Виртуальные столбцы

  • _subject - subject сообщения NATS. Тип данных: String.
Дополнительные виртуальные столбцы, если nats_handle_error_mode='stream':
  • _raw_message - Исходное сообщение, которое не удалось успешно разобрать. Тип данных: Nullable(String).
  • _error - Сообщение об исключении, возникшем при сбое разбора. Тип данных: Nullable(String).
Примечание: виртуальные столбцы _raw_message и _error заполняются только в случае исключения при разборе; если сообщение успешно разобрано, они всегда имеют значение NULL.

Поддержка форматов данных

Движок NATS поддерживает все форматы, доступные в ClickHouse. Количество строк в одном сообщении NATS зависит от того, является ли формат построчным или блочным:
  • Для построчных форматов количеством строк в одном сообщении NATS можно управлять с помощью настройки nats_max_rows_per_message.
  • Для блочных форматов блок нельзя разделить на более мелкие части, однако количество строк в одном блоке можно регулировать с помощью общей настройки max_block_size.

Использование JetStream

Перед использованием движка NATS с NATS JetStream необходимо создать stream в NATS и durable pull consumer. Для этого можно использовать, например, утилиту nats из пакета NATS CLI:
После создания stream и durable pull consumer можно создать таблицу с движком NATS. Для этого необходимо инициализировать: nats_stream, nats_consumer_name и nats_subjects:
Последнее изменение 1 июля 2026 г.