Saltar al contenido principal
Este motor permite integrar ClickHouse con NATS. NATS permite:
  • Publicar o suscribirse a subjects de NATS.
  • Procesar mensajes nuevos a medida que estén disponibles.

Crear una tabla

Parámetros obligatorios:
  • nats_url – host:port (por ejemplo, localhost:4222)..
  • nats_subjects – Lista de subject de la tabla NATS a los que suscribirse o en los que publicar. Admite subjects comodín como foo.*.bar o baz.>
  • nats_format – Formato del mensaje. Usa la misma notación que la función SQL FORMAT, como JSONEachRow. Para obtener más información, consulta la sección Formats.
Parámetros opcionales:
  • nats_schema – Parámetro que debe usarse si el formato requiere una definición de schema. Por ejemplo, Cap’n Proto requiere la ruta al archivo de schema y el nombre del objeto raíz schema.capnp:Message.
  • nats_stream – El nombre de un stream existente en NATS JetStream.
  • nats_consumer_name – El nombre de un consumidor pull duradero existente en NATS JetStream.
  • nats_num_consumers – El número de consumidores por tabla. Valor predeterminado: 1. Especifica más consumidores si el throughput de un consumidor no es suficiente, solo para NATS core.
  • nats_queue_group – Nombre del queue group de los suscriptores de NATS. El valor predeterminado es el nombre de la tabla.
  • nats_max_reconnect – Deprecated y no tiene efecto; la reconexión se realiza permanentemente con el timeout nats_reconnect_wait.
  • nats_reconnect_wait – Tiempo de espera en milisegundos entre cada intento de reconexión. Valor predeterminado: 2000.
  • nats_server_list - Lista de servidores para la conexión. Puede especificarse para conectarse a un cluster de NATS.
  • nats_skip_broken_messages - Tolerancia del parser de mensajes NATS a mensajes incompatibles con el schema por bloque. Valor predeterminado: 0. Si nats_skip_broken_messages = N, el motor omite N mensajes NATS que no pueden parsearse (un mensaje equivale a una fila de datos).
  • nats_max_block_size - Número de filas recopiladas por poll(s) para el flushing de datos desde NATS. Valor predeterminado: max_insert_block_size.
  • nats_flush_interval_ms - Timeout para el flushing de los datos leídos desde NATS. Valor predeterminado: stream_flush_interval_ms.
  • nats_username - Nombre de usuario de NATS.
  • nats_password - Contraseña de NATS.
  • nats_token - Token de autenticación de NATS.
  • nats_credential_file - Ruta a un archivo de credentials de NATS.
  • nats_startup_connect_tries - Número de intentos de conexión al inicio. Valor predeterminado: 5.
  • nats_max_rows_per_message — El número máximo de filas escritas en un mensaje NATS para formatos basados en filas. (valor predeterminado: 1).
  • nats_handle_error_mode — Cómo gestionar los errores del motor NATS. Valores posibles: default (se lanzará una excepción si no se puede parsear un mensaje), stream (el mensaje de excepción y el mensaje sin procesar se guardarán en las columnas virtuales _error y _raw_message).
Conexión SSL: Para una conexión segura, use nats_secure = 1. La verificación del certificado se controla mediante la variable de entorno CLICKHOUSE_NATS_TLS_SECURE; Si el certificado ha caducado, es autofirmado, falta o no es válido por cualquier otro motivo, desactive la verificación estableciendo CLICKHOUSE_NATS_TLS_SECURE=0. Escritura en la tabla NATS: Si la tabla lee solo de un subject, cualquier inserción se publicará en ese mismo subject. Sin embargo, si la tabla lee de varios subjects, es necesario especificar en qué subject queremos publicar. Por eso, siempre que se inserten datos en una tabla con varios subjects, es necesario configurar stream_like_engine_insert_queue. Puede seleccionar uno de los subjects de los que lee la tabla y publicar allí sus datos. Por ejemplo:
También se pueden agregar opciones de formato junto con las opciones relacionadas con NATS. Ejemplo:
La configuración del servidor NATS se puede añadir mediante el archivo de configuración de ClickHouse. Más concretamente, puede añadir la contraseña del motor NATS:

Descripción

SELECT no es especialmente útil para leer mensajes (salvo para depuración), porque cada mensaje solo puede leerse una vez. Es más práctico crear flujos en tiempo real mediante vistas materializadas. Para ello:
  1. Use el motor para crear un consumidor de NATS y considérelo un flujo de datos.
  2. Cree una tabla con la estructura deseada.
  3. Cree una vista materializada que convierta los datos del motor y los inserte en una tabla creada previamente.
Cuando la MATERIALIZED VIEW se conecta al motor, comienza a recopilar datos en segundo plano. Esto le permite recibir continuamente mensajes de NATS y convertirlos al formato requerido mediante SELECT. Una tabla de NATS puede tener tantas vistas materializadas como desee; no leen datos de la tabla directamente, sino que reciben nuevos registros (en bloques). De este modo, puede escribir en varias tablas con distintos niveles de detalle (con agrupación - agregación y sin ella). Ejemplo:
Para dejar de recibir datos de los streams o cambiar la lógica de conversión, desvincula la vista materializada:
Si quiere cambiar la tabla de destino mediante ALTER, le recomendamos deshabilitar la vista materializada para evitar discrepancias entre la tabla de destino y los datos de la vista.

Columnas virtuales

  • _subject - subject del mensaje de NATS. Tipo de dato: String.
Columnas virtuales adicionales cuando nats_handle_error_mode='stream':
  • _raw_message - Mensaje sin procesar que no pudo analizarse correctamente. Tipo de dato: Nullable(String).
  • _error - Mensaje de excepción producido durante un error de análisis. Tipo de dato: Nullable(String).
Nota: las columnas virtuales _raw_message y _error se rellenan solo en caso de excepción durante el análisis; siempre son NULL cuando el mensaje se ha analizado correctamente.

Compatibilidad con formatos de datos

El motor NATS es compatible con todos los formatos compatibles con ClickHouse. El número de filas en un mensaje de NATS depende de si el formato está basado en filas o en bloques:
  • En los formatos basados en filas, el número de filas en un mensaje de NATS puede controlarse mediante la configuración nats_max_rows_per_message.
  • En los formatos basados en bloques, no es posible dividir un bloque en partes más pequeñas, pero el número de filas de un bloque puede controlarse mediante la configuración general max_block_size.

Uso de JetStream

Antes de usar el motor NATS con NATS JetStream, debe crear un stream de NATS y un consumidor pull duradero. Para ello, puede usar, por ejemplo, la utilidad nats del paquete NATS CLI:
Después de crear el stream y el consumidor pull duradero, podemos crear una tabla con el motor NATS. Para ello, debe inicializar: nats_stream, nats_consumer_name y nats_subjects:
Última modificación el 2 de julio de 2026