Prérequis
- Java 11+ (pour Flink 1.17+) ou 17+ (pour Flink 2.0+)
- Apache Flink 1.17+
Matrice de compatibilité des versions de Flink
Le connecteur n’a pas été testé avec des versions de Flink antérieures à la version 1.17.2.
Installation et configuration
Ajouter comme dépendance
Pour Flink 2.0+
- Maven
- Gradle
- SBT
Pour Flink 1.17+
- Maven
- Gradle
- SBT
Télécharger le binaire
flink_versionvaut soit2.0.0, soit1.17stable_versionest une version stable de l’artefact
Utiliser la DataStream API
Extrait
- Java
Exemple de prise en main rapide
Options de connexion de DataStream API
Options du client ClickHouse
options et serverSettings doivent être transmis au client sous forme de Map<String, String>. Une map vide pour l’un ou l’autre utilisera respectivement les valeurs par défaut du client ou du serveur.
Toutes les options disponibles du client Java sont répertoriées dans ClientConfigProperties.java et sur cette page de documentation.Tous les paramètres de session disponibles côté serveur sont répertoriés sur cette page de documentation.
- Java
Options du sink
AsyncSinkBase de Flink :
Types de données pris en charge
Insertion de données depuis Flink dans ClickHouse
Remarques :
- Un
ZoneIddoit être fourni lors de l’exécution d’opérations sur des dates. - La précision et l’échelle doivent être fournies lors de l’exécution d’opérations décimales.
- Pour que ClickHouse puisse interpréter une
StringJava comme du JSON, vous devez activerenableJsonSupportAsStringdansClickHouseClientConfig. - Le connecteur nécessite un
ElementConvertorpour faire correspondre les éléments duDataStreamd’entrée aux payloads ClickHouse. À cette fin, le connecteur fournitClickHouseConvertoretPOJOConvertor, que vous pouvez utiliser pour implémenter ce mapping à l’aide des méthodes de sérialisation deDataWriterci-dessus.
Formats d’entrée pris en charge
setClickHouseFormat. Par exemple :
Par défaut, le connecteur utilisera RowBinaryWithDefaults ou RowBinary si
setSupportDefault dans ClickHouseClientConfig est explicitement défini sur true ou false, respectivement.Métriques
Limitations
- Le sink fournit actuellement une garantie de livraison at-least-once. Les travaux visant à prendre en charge une sémantique exactly-once sont suivis ici.
- Le sink ne prend pas encore en charge de file dead-letter (DLQ) pour la mise en mémoire tampon des enregistrements qui ne peuvent pas être traités. En attendant, le connector tentera de réinsérer les enregistrements en échec et les abandonnera en cas d’échec. Cette fonctionnalité est suivie ici.
- Le sink ne prend pas encore en charge la création via la Table API de Flink ou Flink SQL. Cette fonctionnalité est suivie ici.
Compatibilité des versions de ClickHouse et sécurité
- Le connecteur est testé quotidiennement, via un workflow CI, avec un ensemble de versions récentes de ClickHouse, y compris latest et head. Les versions testées sont mises à jour périodiquement, à mesure que de nouvelles versions de ClickHouse sont publiées. Consultez ici la liste des versions testées chaque jour pour le connecteur.
- Consultez la politique de sécurité de ClickHouse pour connaître les vulnérabilités de sécurité connues et savoir comment signaler une vulnérabilité.
- Nous vous recommandons de mettre régulièrement à niveau le connecteur afin de ne pas manquer les correctifs de sécurité et les nouvelles améliorations.
- Si vous rencontrez un problème de migration, veuillez créer une issue GitHub et nous vous répondrons !
Utilisation avancée recommandée
- Pour des performances optimales, assurez-vous que le type d’élément de votre DataStream n’est pas un type générique ; voir ici pour la distinction des types dans Flink. Les éléments non génériques évitent le surcoût de sérialisation induit par Kryo et améliorent le débit vers ClickHouse.
- Nous recommandons de définir
maxBatchSizeà au moins 1000, et idéalement entre 10 000 et 100 000. Consultez ce guide sur les insertions en masse pour plus d’informations. - Pour effectuer une déduplication de type OLTP ou un upsert dans ClickHouse, reportez-vous à cette page de documentation. Remarque : à ne pas confondre avec la déduplication par lot qui intervient lors des nouvelles tentatives.
Dépannage
CANNOT_READ_ALL_DATA
Faible débit
numRequestSubmitted et actualRecordsPerBatch afin de déterminer comment ajuster la taille de lot (maxBatchSize) et la fréquence des flushs. Consultez également Utilisation avancée et recommandée pour des recommandations sur le dimensionnement des lots.
Il manque des lignes dans ma table ClickHouse
ClickHouseClientConfig.setNumberOfRetries()). Remarque : par défaut, le connecteur tentera de réinsérer un lot jusqu’à 3 fois avant de l’abandonner.
Solution : inspectez les logs du TaskManager et/ou les pile(s) d’appels pour identifier la cause du problème.