Requisitos do pipeline
- A assinatura Pub/Sub de origem deve existir.
- As mensagens publicadas na assinatura devem ser JSON válido.
- A tabela ClickHouse de destino deve existir, e os nomes de suas colunas devem corresponder aos nomes dos campos no payload JSON.
- O host do ClickHouse deve estar acessível a partir das máquinas dos workers do Dataflow.
- Pelo menos um destino dead-letter (
clickHouseDeadLetterTableoudeadLetterTopic) deve ser fornecido. Se ambos forem fornecidos, as mensagens com falha serão roteadas para os dois destinos simultaneamente. - Quando
clickHouseDeadLetterTableestiver definido, a tabela dead-letter já deverá existir no ClickHouse com o esquema mostrado em Tratamento de dead-letter. - Quando
deadLetterTopicestiver definido, o tópico Pub/Sub já deverá existir.
Parâmetros do template
Os valores padrão de todos os parâmetros de
ClickHouseIO podem ser encontrados em ClickHouseIO Apache Beam Connector.Formato da mensagem e mapeamento de esquema
- Obtém o esquema da tabela ClickHouse de destino.
- Cria um esquema
Rowdo Beam com base nesse esquema do ClickHouse. - Para cada mensagem recebida do Pub/Sub, analisa o payload JSON e monta uma linha lendo os campos nomeados no esquema do ClickHouse.
Conversão de tipos
Agrupamento em lotes e janelamento
Ao ajustar esses valores, você pode equilibrar latência e eficiência de insert. Janelas menores reduzem a latência de ponta a ponta; janelas maiores produzem menos lotes
INSERT, porém maiores.
Tratamento de dead-letter
clickHouseDeadLetterTable e deadLetterTopic deve ser informado; se ambos forem definidos, as mensagens com falha serão enviadas para ambos.
Tabela dead-letter do ClickHouse
clickHouseDeadLetterTable é definido, a tabela dead-letter já deve existir com este esquema fixo:
Uma definição mínima para uma implantação de nó único:
Adapte o engine e a cláusula
ORDER BY à sua implantação — use ReplicatedMergeTree para tabelas replicadas, adicione ON CLUSTER em implantações distribuídas e ajuste o particionamento ou o TTL conforme necessário.Tópico dead-letter do Pub/Sub
deadLetterTopic é definido, cada mensagem que falha é republicada no tópico com:
- Payload: os bytes originais da mensagem.
- Atributo
errorMessage: a mensagem da exceção capturada no momento da falha. - Atributo
failedAt: o timestamp de processamento no momento em que a linha falhou.
Executando o template
Revise este documento, especialmente as seções acima, para entender plenamente os requisitos de configuração e os pré-requisitos do template.
-
Clique no botão
CREATE JOB FROM TEMPLATE. - Quando o formulário do template abrir, insira um nome para o job e selecione a região desejada.
-
No campo
Dataflow Template, digiteClickHouseouPub/Sube selecione o templatePub/Sub para ClickHouse. -
Depois de selecionado, o formulário se expande. Preencha:
- A assinatura de entrada do Pub/Sub, no formato
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. - A URL do endpoint do ClickHouse — para o ClickHouse Cloud, use
https://<HOST>:8443. - O banco de dados do ClickHouse, a tabela de destino, o nome de usuário e a senha.
- Pelo menos um destino dead-letter: uma tabela do ClickHouse ou um tópico do Pub/Sub (ou ambos).
- A assinatura de entrada do Pub/Sub, no formato
-
Opcionalmente, personalize os parâmetros de agrupamento em lotes (
windowSeconds,batchRowCount) e os parâmetros de ajuste doClickHouseIO, conforme detalhado na seção Template parameters.
Monitore o job
PubSubToClickHouse, visíveis na página do job do Dataflow:
Solução de problemas
Erro de limite de memória (total) excedido (código 241)
- Aumente os recursos da instância: faça upgrade do seu servidor ClickHouse para uma instância maior, com mais memória, para dar conta da carga de processamento de dados.
- Diminua o tamanho do lote: reduza
batchRowCount(e/oumaxInsertBlockSize) na configuração do seu job do Dataflow para enviar fragmentos menores de dados ao ClickHouse, reduzindo o consumo de memória por lote.
Todas as mensagens estão indo para o destino dead-letter
- Os nomes dos campos JSON não correspondem exatamente aos nomes das colunas do ClickHouse (a correspondência diferencia maiúsculas de minúsculas).
- Não é possível converter o tipo de uma coluna a partir do valor JSON (por exemplo, uma string fora do padrão ISO-8601 em uma coluna
DateTime). - O esquema da tabela de destino mudou desde que o pipeline foi iniciado — o esquema é obtido uma vez na inicialização. Reinicie o job após aplicar as alterações no esquema.
error_message e stack_trace da tabela dead-letter do ClickHouse (ou o atributo errorMessage nas mensagens dead-letter do Pub/Sub) para identificar a causa raiz.
O pipeline inicia, mas nenhuma linha chega ao ClickHouse
- Confirme se a assinatura está recebendo mensagens — verifique a métrica
messages-receivedna página do job do Dataflow. - No modo baseado em tempo (apenas
windowSeconds), as linhas só são gravadas ao fim de cada janela. ReduzawindowSecondspara verificar se os flushes estão ocorrendo. - Verifique se há conectividade de rede entre os workers do Dataflow e o endpoint do ClickHouse (firewall, VPC peering ou private service connect).
Código-fonte do Template
GoogleCloudPlatform/DataflowTemplates— o repositório original do Google Cloud Platform.ClickHouse/DataflowTemplates— o fork da ClickHouse.