Descrição
Apache Avro é um formato de serialização orientado a linhas que usa codificação binária para o processamento eficiente de dados. O formatoAvroConfluent oferece suporte à leitura e à gravação de mensagens codificadas em Avro usando o Confluent Schema Registry (ou serviços compatíveis com a API).
Cada mensagem usa o wire format da Confluent: um byte mágico (0x00), seguido de um ID de schema de 4 bytes em big-endian e, em seguida, do datum binário Avro. Durante a leitura, o ClickHouse resolve o ID do schema consultando o registry. Durante a gravação, o ClickHouse registra o schema derivado das colunas de saída e prefixa cada linha com o ID resultante. Os schemas são armazenados em cache para garantir desempenho ideal.
Mapeamento de tipos de dados
A tabela abaixo mostra todos os tipos de dados compatíveis com o formato Apache Avro e seus respectivos tipos de dados no ClickHouse em consultasINSERT e SELECT.
bytesé o padrão, controlado pela configuraçãooutput_format_avro_string_column_pattern
null como valor de campo; assim, por exemplo, o Avro union(T1, T2, null) será convertido em Variant(T1, T2).
Como resultado, ao gerar Avro a partir do ClickHouse, precisamos sempre incluir o tipo null no conjunto de tipos union do Avro, pois não sabemos, durante a inferência de esquema, se algum valor é de fato null.
*** Tipos lógicos do Avro
Tipos de dados lógicos do Avro não compatíveis:
time-millistime-microsduration
Configurações de formato
Exemplos
Lendo do Kafka
Para ler um tópico do Kafka codificado em Avro usando o motor de tabela Kafka, use a configuraçãoformat_avro_schema_registry_url para informar a URL do schema registry.
Gravando no Kafka
Para gravar mensagens AvroConfluent em um tópico do Kafka, defina a URL do schema registry e o nome do subject. O schema é registrado automaticamente no schema registry na primeira gravação.Usando autenticação básica
Se o seu schema registry exigir autenticação básica (por exemplo, se você estiver usando o Confluent Cloud), você pode fornecer credenciais codificadas em URL na configuraçãoformat_avro_schema_registry_url.
Solução de problemas
Para monitorar o progresso da ingestão e depurar erros no consumer do Kafka, você pode consultar a tabela de sistemasystem.kafka_consumers. Se a sua implantação tiver várias réplicas (por exemplo, no ClickHouse Cloud), será necessário usar a função de tabela clusterAllReplicas.