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 :
Choisissez HTTPS. Les détails de connexion s’affichent dans un exemple de commande 
Si vous utilisez ClickHouse autogéré, les détails de connexion sont définis par votre administrateur ClickHouse.
Les informations de votre service ClickHouse Cloud sont disponibles dans la console ClickHouse Cloud.
Sélectionnez un service, puis cliquez sur Connect :

curl.
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 :
Configurez le HTTP Sink Connector :
- Indiquez le nom du topic que vous avez créé
- Authentification
HTTP Url- URL ClickHouse Cloud avec une requêteINSERTspé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- BASICAuth username- nom d’utilisateur ClickHouseAuth 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 deJSONdans les paramètres suivants.- Dans la section
advanced configurations:HTTP Request Method- Définir sur POSTRequest Body Format- jsonBatch batch size- Conformément aux recommandations de ClickHouse, définissez cette valeur sur au moins 1000.Batch json as array- trueRetry 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.
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
Le connecteur HTTP Sink ne regroupe pas les requêtes pour les messages contenant des valeurs d’en-tête Kafka différentes.
- Vérifiez que vos enregistrements Kafka ont la même clé.
- 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
String :
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)
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 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 :
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 :request.method- Définir sur POSTretry.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ètrehttp.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.
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.