NATS permite:
- Publicar o suscribirse a subjects de NATS.
- Procesar mensajes nuevos a medida que estén disponibles.
Crear una tabla
nats_url– host:port (por ejemplo,localhost:5672)..nats_subjects– Lista de subject de la tabla NATS a los que suscribirse o en los que publicar. Admite subjects comodín comofoo.*.barobaz.>nats_format– Formato del mensaje. Usa la misma notación que la función SQLFORMAT, comoJSONEachRow. Para obtener más información, consulta la sección Formats.
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ízschema.capnp:Message.nats_stream– El nombre de un stream existente en NATS JetStream.nats_consumer– 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 timeoutnats_reconnect_wait.nats_reconnect_wait– Tiempo de espera en milisegundos entre cada intento de reconexión. Valor predeterminado:5000.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 block. Valor predeterminado:0. Sinats_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_errory_raw_message).
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:
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:
- Use el motor para crear un consumidor de NATS y considérelo un flujo de datos.
- Cree una tabla con la estructura deseada.
- Cree una vista materializada que convierta los datos del motor y los inserte en una tabla creada previamente.
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:
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.
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).
_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
- 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
stream de NATS y un consumidor pull duradero. Para ello, puede usar, por ejemplo, la utilidad nats del paquete NATS CLI:
creación de stream
creación de stream
creación de consumidor pull duradero
creación de consumidor pull duradero
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: