NATS permite:
- Publicar em ou assinar subjects de mensagens.
- Processar novas mensagens à medida que se tornem disponíveis.
Criando uma tabela
nats_url– host:port (por exemplo,localhost:5672).nats_subjects– Lista de subjects da tabela NATS para assinar/publicar. Suporta subjects curinga comofoo.*.baroubaz.>nats_format– Formato da mensagem. Usa a mesma notação da função SQLFORMAT, comoJSONEachRow. Para mais informações, consulte a seção Formatos.
nats_schema– Parâmetro que deve ser usado se o formato exigir uma definição de schema. Por exemplo, Cap’n Proto exige o caminho para o arquivo de schema e o nome do objeto raizschema.capnp:Message.nats_stream– O nome de um stream existente no NATS JetStream.nats_consumer– O nome de um pull consumer durável existente no NATS JetStream.nats_num_consumers– O número de consumers por tabela. Padrão:1. Especifique mais consumers se a taxa de transferência de um consumer for insuficiente, somente para NATS Core.nats_queue_group– Nome do queue group dos assinantes NATS. O padrão é o nome da tabela.nats_max_reconnect– Obsoleto e sem efeito; a reconexão é realizada permanentemente com o timeoutnats_reconnect_wait.nats_reconnect_wait– Tempo de espera, em milissegundos, entre cada tentativa de reconexão. Padrão:5000.nats_server_list- Lista de servidores para conexão. Pode ser especificada para conectar a um cluster NATS.nats_skip_broken_messages- Tolerância do parser de mensagens NATS a mensagens incompatíveis com o schema por bloco. Padrão:0. Senats_skip_broken_messages = N, o engine ignora N mensagens NATS que não podem ser analisadas (uma mensagem equivale a uma linha de dados).nats_max_block_size- Número de linhas coletadas por poll(s) para descarregar dados do NATS. Padrão: max_insert_block_size.nats_flush_interval_ms- Timeout para descarregar os dados lidos do NATS. Padrão: stream_flush_interval_ms.nats_username- Nome de usuário do NATS.nats_password- Senha do NATS.nats_token- Token de autenticação do NATS.nats_credential_file- Caminho para um arquivo de credentials do NATS.nats_startup_connect_tries- Número de tentativas de conexão na inicialização. Padrão:5.nats_max_rows_per_message— O número máximo de linhas gravadas em uma mensagem NATS para formatos baseados em linha. (padrão:1).nats_handle_error_mode— Como lidar com erros no engine NATS. Valores possíveis: default (a exceção será lançada se não conseguirmos analisar uma mensagem), stream (a mensagem de exceção e a mensagem bruta serão salvas nas colunas virtuais_errore_raw_message).
nats_secure = 1.
A verificação do certificado é controlada pela variável de ambiente CLICKHOUSE_NATS_TLS_SECURE;
Se o certificado estiver expirado, for autoassinado, estiver ausente ou inválido por qualquer outro motivo, desative a verificação definindo CLICKHOUSE_NATS_TLS_SECURE=0.
Gravação na tabela NATS:
Se a tabela lê apenas de um subject, qualquer inserção será publicada nesse mesmo subject.
No entanto, se a tabela lê de vários subjects, precisamos especificar em qual subject queremos publicar.
É por isso que, sempre que for inserir em uma tabela com vários subjects, é necessário definir stream_like_engine_insert_queue.
Você pode selecionar um dos subjects dos quais a tabela lê e publicar seus dados nele. Por exemplo:
Descrição
SELECT não é particularmente útil para ler mensagens (exceto para depuração), porque cada mensagem pode ser lida apenas uma vez. É mais prático criar fluxos em tempo real usando visões materializadas. Para fazer isso:
- Use o engine para criar um consumidor do NATS e tratá-lo como um fluxo de dados.
- Crie uma tabela com a estrutura desejada.
- Crie uma visão materializada que converta os dados do engine e os insira em uma tabela criada anteriormente.
MATERIALIZED VIEW é vinculada ao engine, ela começa a coletar dados em segundo plano. Isso permite que você receba continuamente mensagens do NATS e as converta para o formato necessário usando SELECT.
Uma tabela do NATS pode ter quantas visões materializadas você quiser; elas não leem dados diretamente da tabela, mas recebem novos registros (em blocos). Assim, você pode gravar em várias tabelas com diferentes níveis de detalhamento (com agrupamento - agregação e sem).
Exemplo:
ALTER, recomendamos desabilitar a visão materializada para evitar discrepâncias entre a tabela de destino e os dados da view.
Colunas virtuais
_subject- subject da mensagem no NATS. Tipo de dado:String.
nats_handle_error_mode='stream':
_raw_message- Mensagem bruta que não pôde ser processada com sucesso. Tipo de dado:Nullable(String)._error- Mensagem de exceção ocorrida durante uma falha no processamento. Tipo de dado:Nullable(String).
_raw_message e _error são preenchidas apenas em caso de exceção durante o processamento; elas são sempre NULL quando a mensagem é processada com sucesso.
Suporte a formatos de dados
- Para formatos baseados em linhas, o número de linhas em uma mensagem NATS pode ser controlado pela configuração
nats_max_rows_per_message. - Para formatos baseados em blocos, não é possível dividir um bloco em partes menores, mas o número de linhas em um bloco pode ser controlado pela configuração geral max_block_size.
Usando o JetStream
nats do pacote NATS CLI:
criando um stream
criando um stream
criando um consumer pull durável
criando um consumer pull durável