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:

  1. 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
    
  2. 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.

  3. 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:

// Codi del productor amb l'esquema Avro definit anteriorment

Consumidor

Deserialitzem els missatges utilitzant l'esquema:

// Codi del consumidor amb l'esquema Avro definit anteriorment

Exercicis Pràctics

  1. Crear un Esquema Avro: Defineix un esquema Avro per a un missatge que contingui informació d'un producte (nom, preu, categoria).
  2. Enviar Missatges: Escriu un productor que enviï missatges utilitzant l'esquema definit.
  3. Consumir Missatges: Escriu un consumidor que deserialitzi i imprimeixi els missatges utilitzant l'esquema.

Solucions

  1. Esquema Avro:

    {
      "type": "record",
      "name": "Product",
      "fields": [
        {"name": "name", "type": "string"},
        {"name": "price", "type": "float"},
        {"name": "category", "type": "string"}
      ]
    }
    
  2. Productor:

    // Codi del productor amb l'esquema de Producte
    
  3. 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.

© Copyright 2024. Tots els drets reservats