Skip to main content
Le HTTP Sink Connector est indépendant du type de données ; il n’a donc pas besoin de schéma Kafka et prend en charge des types de données spécifiques à ClickHouse, tels que Maps et Arrays. Cette flexibilité supplémentaire s’accompagne d’une légère complexité de configuration. Nous décrivons ci-dessous une installation simple qui récupère les messages d’un seul topic Kafka et insère les lignes dans une table ClickHouse.
Le connecteur HTTP est distribué sous la Confluent Enterprise License.

Étapes de démarrage rapide

1

Rassemblez vos informations de connexion

Pour vous connecter à ClickHouse via HTTP(S), vous avez besoin des informations suivantes :Les informations de votre service ClickHouse Cloud sont disponibles dans la console ClickHouse Cloud. Sélectionnez un service, puis cliquez sur Connect :
Bouton Connect du service ClickHouse Cloud
Choisissez HTTPS. Les détails de connexion s’affichent dans un exemple de commande curl.
Détails de connexion HTTPS ClickHouse Cloud
Si vous utilisez ClickHouse autogéré, les détails de connexion sont définis par votre administrateur ClickHouse.
2

Exécuter Kafka Connect et le HTTP Sink Connector

Vous avez deux options :
  • Autogéré : Téléchargez le paquet Confluent et installez-le localement. Suivez les instructions d’installation du connecteur, comme indiqué ici. Si vous utilisez la méthode d’installation confluent-hub, vos fichiers de configuration locaux seront mis à jour.
  • Confluent Cloud : Une version entièrement gérée de HTTP Sink est disponible pour celles et ceux qui utilisent Confluent Cloud pour héberger Kafka. Cela nécessite que votre environnement ClickHouse soit accessible depuis Confluent Cloud.
Les exemples suivants utilisent Confluent Cloud.
3

Créer une table de destination dans ClickHouse

Avant le test de connectivité, commençons par créer une table de test dans ClickHouse Cloud. Cette table recevra les données de Kafka :
4

Configurer HTTP Sink

Créez un topic Kafka et une instance du HTTP Sink Connector :
Configurez le HTTP Sink Connector :
  • Indiquez le nom du topic que vous avez créé
  • Authentification
    • HTTP Url - URL ClickHouse Cloud avec une requête INSERT spécifiée : <protocol>://<clickhouse_host>:<clickhouse_port>?query=INSERT%20INTO%20<database>.<table>%20FORMAT%20JSONEachRow. Remarque : la requête doit être encodée.
    • Endpoint Authentication type - BASIC
    • Auth username - nom d’utilisateur ClickHouse
    • Auth password - mot de passe ClickHouse
Cette URL HTTP est source d’erreurs. Assurez-vous que l’échappement est précis pour éviter tout problème.

  • Configuration
    • Input Kafka record value formatCela dépend de vos données source, mais dans la plupart des cas, il s’agit de JSON ou d’Avro. Nous partons de l’hypothèse de JSON dans les paramètres suivants.
    • Dans la section advanced configurations :
      • HTTP Request Method - Définir sur POST
      • Request Body Format - json
      • Batch batch size - Conformément aux recommandations de ClickHouse, définissez cette valeur sur au moins 1000.
      • Batch json as array - true
      • Retry on HTTP codes - 400-500, mais adaptez selon vos besoins ; par exemple, cela peut changer si vous avez un proxy HTTP devant ClickHouse.
      • Maximum Reties - la valeur par défaut (10) convient, mais n’hésitez pas à l’ajuster pour rendre les tentatives de nouvelle exécution plus robustes.
5

Tester la connectivité

Créez un message dans un topic configuré par votre HTTP Sink
et vérifiez que le message créé a bien été écrit dans votre instance ClickHouse.

Dépannage

HTTP Sink ne traite pas les messages par lot

D’après la documentation du Sink :
Le connecteur HTTP Sink ne regroupe pas les requêtes pour les messages contenant des valeurs d’en-tête Kafka différentes.
  1. Vérifiez que vos enregistrements Kafka ont la même clé.
  2. Lorsque vous ajoutez des paramètres à l’URL de l’API HTTP, chaque enregistrement peut générer une URL unique. Pour cette raison, le traitement par lot est désactivé lorsque des paramètres d’URL supplémentaires sont utilisés.

400 Requête incorrecte

CANNOT_PARSE_QUOTED_STRING
Si HTTP Sink échoue avec le message suivant lors de l’insertion d’un objet JSON dans une colonne String :
Définissez le paramètre input_format_json_read_objects_as_strings=1 dans l’URL sous la forme d’une chaîne encodée SETTINGS%20input_format_json_read_objects_as_strings%3D1

Charger le jeu de données GitHub (facultatif)

Notez que cet exemple conserve les champs Array du jeu de données GitHub. Nous partons du principe que vous disposez d’un topic github vide dans les exemples et que vous utilisez kcat pour insérer des messages dans Kafka.
1

Préparer la configuration

Suivez ces instructions pour configurer Connect en fonction de votre type d’installation, en tenant compte des différences entre un cluster en mode autonome et un cluster distribué. Si vous utilisez Confluent Cloud, c’est la configuration distribuée qui s’applique.Le paramètre le plus important est http.api.url. L’interface HTTP de ClickHouse exige que vous encodiez l’instruction INSERT dans l’URL sous forme de paramètre. Celui-ci doit inclure le format (JSONEachRow dans ce cas) et la base de données cible. Le format doit être cohérent avec les données Kafka, qui seront converties en chaîne dans le payload HTTP. Ces paramètres doivent être encodés pour l’URL. Un exemple de ce format pour le jeu de données GitHub (en supposant que vous exécutez ClickHouse localement) est présenté ci-dessous :
Les paramètres supplémentaires suivants sont pertinents pour l’utilisation de HTTP Sink avec ClickHouse. Une liste complète des paramètres est disponible ici :
  • request.method - Définir sur POST
  • retry.on.status.codes - Définir sur 400-500 pour réessayer sur tous les codes d’erreur. À ajuster en fonction des erreurs attendues dans les données.
  • request.body.format - Dans la plupart des cas, ce sera JSON.
  • auth.type - Définir sur BASIC si vous utilisez l’authentification avec ClickHouse. Les autres mécanismes d’authentification compatibles avec ClickHouse ne sont pas pris en charge actuellement.
  • ssl.enabled - définir sur true si vous utilisez SSL.
  • connection.user - nom d’utilisateur pour ClickHouse.
  • connection.password - mot de passe pour ClickHouse.
  • batch.max.size - Le nombre de lignes à envoyer dans un seul lot. Assurez-vous que cette valeur est définie sur un nombre suffisamment élevé. Conformément aux recommandations de ClickHouse, 1000 doit être considéré comme une valeur minimale.
  • tasks.max - Le connecteur HTTP Sink permet d’exécuter une ou plusieurs tâches. Cela peut être utilisé pour améliorer les performances. Avec la taille des lots, c’est votre principal levier d’optimisation des performances.
  • key.converter - définir en fonction des types de vos clés.
  • value.converter - définir en fonction du type de données de votre topic. Ces données n’ont pas besoin de schéma. Le format indiqué ici doit être cohérent avec le FORMAT spécifié dans le paramètre http.api.url. Le plus simple est d’utiliser JSON et le convertisseur org.apache.kafka.connect.json.JsonConverter. Il est également possible de traiter la valeur comme une chaîne via le convertisseur org.apache.kafka.connect.storage.StringConverter, bien que cela oblige l’utilisateur à extraire une valeur dans l’instruction insert à l’aide de fonctions. Le format Avro est également pris en charge dans ClickHouse si vous utilisez le convertisseur io.confluent.connect.avro.AvroConverter.
Une liste complète des paramètres, y compris la configuration d’un proxy, des nouvelles tentatives et des options SSL avancées, est disponible ici.Des fichiers de configuration d’exemple pour les données d’exemple GitHub sont disponibles ici, en supposant que Connect s’exécute en mode autonome et que Kafka est hébergé dans Confluent Cloud.
2

Créer la table ClickHouse

Assurez-vous que la table a bien été créée. Un exemple de jeu de données GitHub minimal reposant sur un MergeTree standard est présenté ci-dessous.
3

Ajouter des données à Kafka

Insérez des messages dans Kafka. Ci-dessous, nous utilisons kcat pour y insérer 10k messages.
Une simple requête de lecture sur la table cible “Github” devrait confirmer l’insertion des données.
Dernière modification le 23 juillet 2026