Kafka et AVRO dans un Job - 6.4

Kafka

author
Talend Documentation Team
EnrichVersion
6.4
EnrichProdName
Talend Big Data
Talend Big Data Platform
Talend Data Fabric
Talend Open Studio for Big Data
Talend Real-Time Big Data Platform
task
Création et développement > Systèmes tiers > Composants Messaging (Intégration) > Composants Kafka
Gouvernance de données > Systèmes tiers > Composants Messaging (Intégration) > Composants Kafka
Qualité et préparation de données > Systèmes tiers > Composants Messaging (Intégration) > Composants Kafka
EnrichPlatform
Studio Talend

Dans un Job Talend, les composants Kafka (les composants Kafka réguliers) et les composants Kafka pour AVRO gèrent différemment les données AVRO, comme le montrent les approches qu'AVRO fournit pour (dé)sérialiser les données du format AVRO.

Pour plus d'informations concernant les technologies supportées par Talend, consultez Composants Talend.

  • Les composants Kafka réguliers lisent et écrivent uniquement le format JSON. Ainsi, si votre Kafka produit et consomme des données AVRO et que, pour une raison quelconque, les composants Kafka pour AVRO ne sont pas disponibles, vous devez utiliser une bibliothèque avro-tools pour convertir vos données AVRO et JSON en dehors de votre Job.
    Par exemple,
    java -jar C:\2_Prod\Avro\avro-tools-1.8.2.jar tojson out.avro
    Vous pouvez télécharger la bibliothèque avro-tools-1.8.2.jar utilisée dans cet exemple depuis le Référentiel MVN. Cette commande convertit le fichier out.avro en un fichier json.
    Or
    java -jar avro-tools-1.8.2.jar fromjson --schema-file twitter.avsc twitter.json > twitter.avro
    Cette commande convertit le fichier twitter.json en twitter.avro en utilisant le schéma depuis twitter.avsc.
  • Les composants Kafka pour AVRO sont disponibles uniquement dans le framework Spark ; ils gèrent directement les données dans le format AVRO. Si votre cluster Kafka produit et consomme des données AVRO, utilisez tKafkaInputAvro pour lire directement les données depuis Kafka et tWriteAvroFields pour envoyer les données AVRO vers tKafkaOutput.

    Cependant, ces composants ne gèrent pas les données AVRO créées par une librairie avro-tools, car les bibliothèques avro-tools et les composants pour AVRO n'utilisent pas la même approche fournie par AVRO.

Les deux approches qu'AVRO fournit pour (dé)sérialiser les données du format AVRO sont les suivantes :
  1. Les fichiers AVRO sont générés avec le schéma embarqué AVRO dans chaque fichier (via org.apache.avro.file.{DataFileWriter/DataFileReader}). Les bibliothèques avro-tools utilisent cette approche.
  2. Les enregistrements AVRO sont générés sans embarquer le schéma dans chaque enregistrement (via org.apache.avro.io.{BinaryEncoder/BinaryDecoder}). Les composants Kafka pour AVRO utilisent cette approche.

    Cette approche est hautement recommandée et favorisée lorsque les messages encodés d'AVRO sont systématiquement écrits dans un topic Kafka car, dans cette approche, aucun frais généraux ne sont encourus pour ré-embarquer le schéma AVRO dans chaque message. Lors de l'utilisation de Spark Streaming pour lire des données depuis Kafka ou pour écrire des données dans Kafka, cela représente un avantage non négligeable par rapport à l'autre approche, puisque les enregistrements (messages) sont généralement peu lourds, tandis que la taille du schéma AVRO est relativement importante. Embarquer le schéma dans chaque message n'est donc pas rentable.

Les sorties de ces deux approches ne peuvent pas être mélangés dans un même processus de lecture/écriture.