Prérequis du pipeline
- L’abonnement Pub/Sub source doit exister.
- Les messages publiés dans l’abonnement doivent être au format JSON valide.
- La table ClickHouse cible doit exister, et ses noms de colonnes doivent correspondre aux noms des champs de la charge utile JSON.
- L’hôte ClickHouse doit être accessible depuis les machines worker de Dataflow.
- Au moins une destination dead-letter (
clickHouseDeadLetterTableoudeadLetterTopic) doit être fournie. Si les deux sont fournies, les messages en échec sont acheminés vers les deux destinations simultanément. - Lorsque
clickHouseDeadLetterTableest défini, la table dead-letter doit déjà exister dans ClickHouse avec le schéma indiqué dans Gestion des dead-letter. - Lorsque
deadLetterTopicest défini, le topic Pub/Sub doit déjà exister.
Paramètres du modèle
Les valeurs par défaut de tous les paramètres
ClickHouseIO sont indiquées dans ClickHouseIO Apache Beam Connector.Format des messages et correspondance de schéma
- Récupère le schéma de la table ClickHouse cible.
- Construit un schéma Beam
Rowà partir de ce schéma ClickHouse. - Pour chaque message Pub/Sub entrant, analyse la charge utile JSON et assemble une ligne en lisant les champs nommés dans le schéma ClickHouse.
Conversion de type
Traitement par lots et fenêtrage
Le réglage de ces valeurs vous permet d’arbitrer entre la latence et l’efficacité des insertions. Des fenêtres plus petites réduisent la latence de bout en bout ; des fenêtres plus grandes produisent des lots
INSERT moins nombreux, mais plus volumineux.
Gestion des messages dead-letter
clickHouseDeadLetterTable ou deadLetterTopic doit être fourni ; si les deux sont définis, les messages en échec sont envoyés aux deux.
Table dead-letter ClickHouse
clickHouseDeadLetterTable est défini, la table dead-letter doit déjà exister avec ce schéma fixe :
Définition minimale pour un déploiement sur un seul nœud :
Adaptez le moteur et la clause
ORDER BY à votre déploiement — utilisez ReplicatedMergeTree pour les tables répliquées, ajoutez ON CLUSTER pour les déploiements distribués et ajustez le partitionnement ou le TTL selon vos besoins.Topic dead-letter Pub/Sub
deadLetterTopic est défini, chaque message en échec est republié dans le topic avec :
- Payload : les octets du message d’origine.
- Attribut
errorMessage: le message d’exception capturé au moment de l’échec. - Attribut
failedAt: l’horodatage de traitement indiquant le moment où la ligne a échoué.
Exécuter le modèle
Veillez à consulter ce document, en particulier les sections ci-dessus, afin de bien comprendre les exigences de configuration et les prérequis du modèle.
-
Cliquez sur le bouton
CREATE JOB FROM TEMPLATE. - Une fois le formulaire du modèle ouvert, saisissez un nom de job et sélectionnez la région souhaitée.
-
Dans le champ
Dataflow Template, saisissezClickHouseouPub/Sub, puis sélectionnez le modèlePub/Sub vers ClickHouse. -
Une fois le modèle sélectionné, le formulaire se déplie. Renseignez :
- L’abonnement d’entrée Pub/Sub, au format
projects/<PROJECT_ID>/subscriptions/<SUBSCRIPTION_NAME>. - L’URL du point de terminaison ClickHouse — pour ClickHouse Cloud, utilisez
https://<HOST>:8443. - La base de données ClickHouse, la table cible, le nom d’utilisateur et le mot de passe.
- Au moins une destination dead-letter : une table ClickHouse ou un topic Pub/Sub (ou les deux).
- L’abonnement d’entrée Pub/Sub, au format
-
Vous pouvez éventuellement personnaliser les paramètres de traitement par lots (
windowSeconds,batchRowCount) et de réglage deClickHouseIO, comme indiqué dans la section Template parameters.
Surveiller la tâche
PubSubToClickHouse, consultables depuis la page de la tâche Dataflow :
Dépannage
Erreur de dépassement de la limite de mémoire (totale) (code 241)
- Augmentez les ressources de l’instance : passez votre ClickHouse server à une instance plus grande avec davantage de mémoire afin de prendre en charge la charge de traitement des données.
- Réduisez la taille des lots : réduisez
batchRowCount(et/oumaxInsertBlockSize) dans la configuration de votre job Dataflow afin d’envoyer à ClickHouse des blocs de données plus petits, ce qui réduit la consommation de mémoire par lot.
Tous les messages sont envoyés vers la destination dead-letter
- Les noms des champs JSON ne correspondent pas exactement aux noms des colonnes ClickHouse (la correspondance est sensible à la casse).
- La valeur JSON ne peut pas être convertie vers le type de la colonne (par exemple, une chaîne non ISO-8601 dans une colonne
DateTime). - Le schéma de la table cible a changé depuis le démarrage du pipeline — le schéma n’est récupéré qu’une seule fois au démarrage. Redémarrez le job après avoir appliqué les modifications du schéma.
error_message et stack_trace de la table dead-letter ClickHouse (ou l’attribut errorMessage des messages dead-letter Pub/Sub) afin d’identifier la cause du problème.
Le pipeline démarre, mais aucune ligne n’arrive dans ClickHouse
- Vérifiez que l’abonnement reçoit bien des messages — consultez la métrique
messages-receivedsur la page du job Dataflow. - En mode temporel (
windowSecondsuniquement), les lignes ne sont écrites qu’aux limites de la fenêtre. RéduisezwindowSecondspour vérifier que des flushes ont bien lieu. - Vérifiez l’accessibilité réseau entre les workers Dataflow et le point de terminaison ClickHouse (pare-feu, VPC peering ou Private Service Connect).
Code source du modèle
GoogleCloudPlatform/DataflowTemplates— le dépôt d’origine de Google Cloud Platform.ClickHouse/DataflowTemplates— le fork de ClickHouse.