2017-07-13 5 views
0

Je me demandais si je pouvais utiliser le registre Confluent Schema pour générer (et ensuite l'envoyer à kafka) le schéma moins les enregistrements avro? Si oui, quelqu'un peut-il partager certaines ressources pour cela? Je ne suis pas en mesure de trouver un exemple sur le site Web de Confluent et Google. J'ai un fichier délimité et j'ai un schéma séparé pour celui-ci, actuellement j'utilise le schéma Avro Generic Record pour sérialiser les enregistrements Avro et l'envoyer via Kafka. De cette façon, le schéma est toujours attaché à l'enregistrement, ce qui le rend plus volumineux. Ma logique est que si je supprime le schéma en envoyant l'enregistrement de kafka, je serai en mesure d'obtenir un débit plus élevé.Puis-je utiliser le registre de schéma confluent pour générer des schémas moins de msgs avro à partir d'un fichier plat?

+0

Pourquoi voudriez-vous utiliser un registre de schéma pour envoyer des enregistrements de sans schéma? Je suis confus. – Fabien

+0

Actuellement, je suis en train d'utiliser Generic record Avro schema pour générer des enregistrements Avro à partir de csv donc je crois comprendre qu'il ajoute un schéma aux enregistrements binaires Avro tout en l'envoyant à kafka ce qui rend ma charge Kafka plus encombrante. – Explorer

+0

Je ne suis pas conscient que vous pouvez dissocier nativement Avro du schéma incorporé dans les données ... Mais, il semble que Kafka implémente des sérialiseurs spécifiques pour Avro et dépouiller du schéma Avro pour le transfert: https://github.com/ confluentinc/schéma-registre/blob/maître/avro-convertisseur/src/principal/java/io/confluent/connect/avro/AvroData.java – Fabien

Répondre

1

Le registre de schéma confluent envoie des messages Avro sérialisés sans le schéma Avro entier dans le message. Je pense que c'est ce que vous voulez dire par "schema less" messages.

Le registre de schéma confluent stocke les schémas Avro et seul un petit index d'index est inclus dans le message sur le réseau.

Les documents complets, y compris un guide de démarrage rapide pour tester le Registre du schéma Confluent est ici

http://docs.confluent.io/current/schema-registry/docs/index.html

+0

Merci pour votre réponse, j'ai un fichier délimité par des plaines, comment puis-je ajouter le registre schema id et envoyer par kafka? en avez-vous un exemple? – Explorer

+0

Il existe des exemples de publication à l'aide de l'API Kafka Java Producer dans les documents. Spécifiquement ici http://docs.confluent.io/current/schema-registry/docs/serializer-formatter.html –

+0

Aussi, vous pouvez publier des messages Avro à Kafka en utilisant l'API REST. Documentation et exemples sont ici http://docs.confluent.io/current/kafka-rest/docs/intro.html –

0
You can register the your avro schema first time with the help of below command from cmd 
curl -X POST -i -H "Content-Type: application/vnd.schemaregistry.v1+json" \ 
     --data '{"schema": "{\"type\": \"string\"}"}' \ 
     http://localhost:8081/subjects/topic 

You can see all versions of your topic using 
    curl -X GET -i http://localhost:8081/subjects/topic/versions 

To see complete Acro schema for version 1 from all versions present in confluent schema registry use below command, will show schema in json format 
    curl -X GET -i http://localhost:8081/subjects/topica/versions/1 

    **Avro schema registration is task of Kafka producer** 
After having schema in confluent schema registry, you just need to publish avro generic records to specific kafka topic, in our case it is 'topic'  

    **Kafka Consumer :Use below code to take latest schema for specific Kafka topic** 
val schemaReg = new CachedSchemaRegistryClient(kafkaAvroSchemaRegistryUrl, 100) 
val schemaMeta = schemaReg.getLatestSchemaMetadata(kafkaTopic + "-value") 
val schema = schemaMeta.getSchema 
val schema =new Schema.Parser().parse(schema) 

Above will be use to get schema and then we can use confluent to decode record from kafka topic.