Introducció
El Registre d'Esquemes de Kafka és una eina essencial per gestionar esquemes de dades en un entorn de missatgeria distribuïda. Permet definir, versionar i validar esquemes de dades, assegurant la compatibilitat entre productors i consumidors. En aquest mòdul, explorarem com utilitzar el Registre d'Esquemes amb Kafka, els seus beneficis i com implementar-lo en les nostres aplicacions.
Continguts
Què és el Registre d'Esquemes?
El Registre d'Esquemes és un servei que emmagatzema esquemes de dades per a Kafka. Els esquemes defineixen l'estructura dels missatges que es publiquen i es consumeixen en Kafka. El Registre d'Esquemes permet:
- Definir Esquemes: Crear i emmagatzemar esquemes de dades.
- Versionar Esquemes: Mantenir versions dels esquemes per gestionar canvis en l'estructura de les dades.
- Validar Esquemes: Assegurar que els missatges compleixen amb l'esquema definit.
Beneficis del Registre d'Esquemes
- Compatibilitat: Assegura que els productors i consumidors utilitzen esquemes compatibles.
- Evolució de Dades: Permet actualitzar esquemes sense trencar la compatibilitat amb versions anteriors.
- Validació: Garanteix que els missatges compleixen amb l'esquema definit, reduint errors de dades.
Configuració del Registre d'Esquemes
Instal·lació
Per instal·lar el Registre d'Esquemes, necessitem tenir un clúster de Kafka en funcionament. Després, podem seguir aquests passos:
-
Descarregar el Registre d'Esquemes:
wget http://packages.confluent.io/archive/5.5/confluent-5.5.0-2.12.tar.gz tar -xvf confluent-5.5.0-2.12.tar.gz cd confluent-5.5.0
-
Configurar el Registre d'Esquemes: Edita el fitxer
etc/schema-registry/schema-registry.properties
per configurar el Registre d'Esquemes. Assegura't de configurar la connexió al clúster de Kafka. -
Iniciar el Registre d'Esquemes:
./bin/schema-registry-start etc/schema-registry/schema-registry.properties
Configuració del Client
Per utilitzar el Registre d'Esquemes amb els nostres productors i consumidors, necessitem configurar els clients per connectar-se al servei del Registre d'Esquemes.
Utilització del Registre d'Esquemes amb Kafka
Productor
Per enviar missatges amb esquemes, el productor ha de registrar l'esquema al Registre d'Esquemes i utilitzar-lo per serialitzar els missatges.
import io.confluent.kafka.serializers.KafkaAvroSerializer; import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties; public class AvroProducer { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer"); props.put("value.serializer", "io.confluent.kafka.serializers.KafkaAvroSerializer"); props.put("schema.registry.url", "http://localhost:8081"); KafkaProducer<String, GenericRecord> producer = new KafkaProducer<>(props); String topic = "my-topic"; String key = "key1"; GenericRecord record = new GenericData.Record(schema); record.put("field1", "value1"); record.put("field2", 123); ProducerRecord<String, GenericRecord> producerRecord = new ProducerRecord<>(topic, key, record); producer.send(producerRecord); producer.close(); } }
Consumidor
El consumidor ha de deserialitzar els missatges utilitzant l'esquema registrat.
import io.confluent.kafka.serializers.KafkaAvroDeserializer; import org.apache.kafka.clients.consumer.ConsumerRecord; import org.apache.kafka.clients.consumer.ConsumerRecords; import org.apache.kafka.clients.consumer.KafkaConsumer; import java.util.Collections; import java.util.Properties; public class AvroConsumer { public static void main(String[] args) { Properties props = new Properties(); props.put("bootstrap.servers", "localhost:9092"); props.put("group.id", "test-group"); props.put("key.deserializer", "org.apache.kafka.common.serialization.StringDeserializer"); props.put("value.deserializer", "io.confluent.kafka.serializers.KafkaAvroDeserializer"); props.put("schema.registry.url", "http://localhost:8081"); KafkaConsumer<String, GenericRecord> consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList("my-topic")); while (true) { ConsumerRecords<String, GenericRecord> records = consumer.poll(100); for (ConsumerRecord<String, GenericRecord> record : records) { System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } } } }
Exemple Pràctic
Esquema Avro
Definim un esquema Avro per als nostres missatges:
{ "type": "record", "name": "User", "fields": [ {"name": "name", "type": "string"}, {"name": "age", "type": "int"} ] }
Productor
Utilitzem l'esquema per enviar missatges:
Consumidor
Deserialitzem els missatges utilitzant l'esquema:
Exercicis Pràctics
- Crear un Esquema Avro: Defineix un esquema Avro per a un missatge que contingui informació d'un producte (nom, preu, categoria).
- Enviar Missatges: Escriu un productor que enviï missatges utilitzant l'esquema definit.
- Consumir Missatges: Escriu un consumidor que deserialitzi i imprimeixi els missatges utilitzant l'esquema.
Solucions
-
Esquema Avro:
{ "type": "record", "name": "Product", "fields": [ {"name": "name", "type": "string"}, {"name": "price", "type": "float"}, {"name": "category", "type": "string"} ] }
-
Productor:
// Codi del productor amb l'esquema de Producte
-
Consumidor:
// Codi del consumidor amb l'esquema de Producte
Conclusió
El Registre d'Esquemes de Kafka és una eina poderosa per gestionar esquemes de dades en un entorn de missatgeria distribuïda. Permet definir, versionar i validar esquemes, assegurant la compatibilitat entre productors i consumidors. En aquest mòdul, hem après a configurar i utilitzar el Registre d'Esquemes amb Kafka, i hem vist exemples pràctics per il·lustrar el seu ús. Amb aquesta base, estem preparats per gestionar esquemes de dades de manera eficient en les nostres aplicacions Kafka.
Curs de Kafka
Mòdul 1: Introducció a Kafka
Mòdul 2: Conceptes bàsics de Kafka
Mòdul 3: Operacions de Kafka
Mòdul 4: Configuració i Gestió de Kafka
Mòdul 5: Temes Avançats de Kafka
- Optimització del Rendiment de Kafka
- Kafka en una Configuració Multi-Centre de Dades
- Kafka amb Registre d'Esquemes
- Kafka Streams Avançat