Requisitos del pipeline
- La suscripción de Pub/Sub de origen debe existir.
- Los mensajes publicados en la suscripción deben ser JSON válidos.
- La tabla de ClickHouse de destino debe existir y sus nombres de columna deben coincidir con los nombres de los campos de la carga útil JSON.
- El host de ClickHouse debe ser accesible desde las máquinas worker de Dataflow.
- Se debe proporcionar al menos un destino dead-letter (
clickHouseDeadLetterTableodeadLetterTopic). Si se proporcionan ambos, los mensajes fallidos se enrutan a ambos destinos simultáneamente. - Cuando se establece
clickHouseDeadLetterTable, la tabla dead-letter ya debe existir en ClickHouse con el esquema que se muestra en Gestión de mensajes dead-letter. - Cuando se establece
deadLetterTopic, el tema de Pub/Sub ya debe existir.
Parámetros de la plantilla
Los valores predeterminados de todos los parámetros de
ClickHouseIO se pueden encontrar en el conector Apache Beam ClickHouseIO.Formato de los mensajes y mapeo del esquema
- Obtiene el esquema de la tabla de ClickHouse de destino.
- Crea un esquema
Rowde Beam a partir de ese esquema de ClickHouse. - Para cada mensaje entrante de Pub/Sub, analiza la carga útil JSON y arma una fila leyendo los campos indicados en el esquema de ClickHouse.
Conversión de tipos
Agrupación por lotes y ventanas
Ajustar estos valores permite equilibrar la latencia y la eficiencia de inserción. Las ventanas más pequeñas reducen la latencia de extremo a extremo; las más grandes generan menos lotes
INSERT, pero de mayor tamaño.
Gestión de mensajes dead-letter
clickHouseDeadLetterTable o deadLetterTopic; si ambos están configurados, los mensajes fallidos se envían a ambos.
Tabla dead-letter de ClickHouse
clickHouseDeadLetterTable, la tabla dead-letter ya debe existir con este esquema fijo:
Una definición mínima para una implementación de un solo nodo:
Adapta el motor y la cláusula
ORDER BY para tu despliegue: usa ReplicatedMergeTree para las tablas replicadas, añade ON CLUSTER en entornos distribuidos y ajusta la partición o el TTL según sea necesario.Tema dead-letter de Pub/Sub
deadLetterTopic, cada mensaje fallido se vuelve a publicar en el tema con:
- Carga útil: los bytes del mensaje original.
- Atributo
errorMessage: el mensaje de excepción capturado en el momento del fallo. - Atributo
failedAt: la marca temporal de procesamiento en la que falló la fila.
Ejecutar la plantilla
Asegúrese de revisar este documento y, en particular, las secciones anteriores, para comprender por completo los requisitos de configuración y los requisitos previos de la plantilla.
-
Presione el botón
CREATE JOB FROM TEMPLATE. - Una vez que se abra el formulario de la plantilla, introduzca un nombre para el job y seleccione la región deseada.
-
En el campo
Dataflow Template, escribaClickHouseoPub/Suby seleccione la plantillaPub/Sub to ClickHouse. -
Una vez seleccionada, el formulario se expande. Complete lo siguiente:
- La suscripción de entrada de Pub/Sub, con el formato
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. - La URL del endpoint de ClickHouse; para ClickHouse Cloud, use
https://<HOST>:8443. - La base de datos de ClickHouse, la tabla de destino, el nombre de usuario y la contraseña.
- Al menos un destino dead-letter: una tabla de ClickHouse o un tema de Pub/Sub (o ambos).
- La suscripción de entrada de Pub/Sub, con el formato
-
De forma opcional, personalice la agrupación en lotes (
windowSeconds,batchRowCount) y los parámetros de ajuste deClickHouseIO, como se detalla en la sección Parámetros de la plantilla.
Supervisa el trabajo
PubSubToClickHouse, visibles desde la página del trabajo de Dataflow:
Solución de problemas
Error: se superó el límite total de memoria (código 241)
- Aumente los recursos de la instancia: actualice su servidor ClickHouse a una instancia más grande y con más memoria para soportar la carga de procesamiento de datos.
- Reduzca el tamaño del lote: reduzca
batchRowCount(y/omaxInsertBlockSize) en la configuración del trabajo de Dataflow para enviar fragmentos de datos más pequeños a ClickHouse, lo que reduce el consumo de memoria por lote.
Todos los mensajes van al destino dead-letter
- Los nombres de los campos JSON no coinciden exactamente con los nombres de las columnas de ClickHouse (la coincidencia es sensible a mayúsculas y minúsculas).
- El valor JSON no se puede convertir implícitamente al tipo de la columna (por ejemplo, una cadena que no siga ISO-8601 en una columna
DateTime). - El esquema de la tabla de destino ha cambiado desde que se inició el pipeline; el esquema se obtiene una sola vez al arrancar. Reinicie el job después de aplicar los cambios de esquema.
error_message y stack_trace de la tabla dead-letter de ClickHouse (o el atributo errorMessage en los mensajes dead-letter de Pub/Sub) para identificar la causa raíz.
El pipeline se inicia, pero no llegan filas a ClickHouse
- Confirma que la suscripción esté recibiendo mensajes: comprueba la métrica
messages-receiveden la página del job de Dataflow. - En el modo basado en tiempo (solo
windowSeconds), las filas solo se vuelcan al finalizar cada ventana. ReducewindowSecondspara verificar que los volcados se estén produciendo. - Verifica la conectividad de red entre los workers de Dataflow y el endpoint de ClickHouse (firewall, peering de VPC o private service connect).
Código fuente de la plantilla
GoogleCloudPlatform/DataflowTemplates— el repositorio original de Google Cloud Platform.ClickHouse/DataflowTemplates— el fork de ClickHouse.