Apache Kafka és una plataforma de streaming distribuïda que permet la publicació, subscripció, emmagatzematge i processament de fluxos de dades en temps real. Per entendre com funciona Kafka, és essencial conèixer la seva arquitectura. En aquesta secció, explorarem els components clau de l'arquitectura de Kafka i com interactuen entre ells.
Components Principals de l'Arquitectura de Kafka
- Productors (Producers)
Els productors són aplicacions que publiquen missatges en un o més temes de Kafka. Els productors poden enviar dades a Kafka de manera síncrona o asíncrona.
Exemple de codi:
import org.apache.kafka.clients.producer.KafkaProducer; import org.apache.kafka.clients.producer.ProducerRecord; import java.util.Properties; public class SimpleProducer { 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", "org.apache.kafka.common.serialization.StringSerializer"); KafkaProducer<String, String> producer = new KafkaProducer<>(props); producer.send(new ProducerRecord<>("my-topic", "key", "value")); producer.close(); } }
- Consumidors (Consumers)
Els consumidors són aplicacions que llegeixen missatges de temes de Kafka. Els consumidors poden formar part de grups de consumidors, on cada missatge és processat per un sol membre del grup.
Exemple de codi:
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 SimpleConsumer { 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", "org.apache.kafka.common.serialization.StringDeserializer"); KafkaConsumer<String, String> consumer = new KafkaConsumer<>(props); consumer.subscribe(Collections.singletonList("my-topic")); while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.printf("offset = %d, key = %s, value = %s%n", record.offset(), record.key(), record.value()); } } } }
- Temes (Topics)
Els temes són canals lògics on es publiquen els missatges. Cada tema es divideix en particions, que permeten la distribució i paral·lelització de les dades.
- Particions (Partitions)
Cada tema es divideix en una o més particions. Les particions permeten que els missatges es distribueixin entre múltiples servidors, millorant l'escalabilitat i la tolerància a fallades.
- Brokers
Els brokers són servidors que emmagatzemen les dades i serveixen les sol·licituds dels productors i consumidors. Un clúster de Kafka està format per múltiples brokers.
- Clúster
Un clúster de Kafka és un conjunt de brokers que treballen junts per proporcionar alta disponibilitat i escalabilitat. Els clústers poden ser configurats per replicar dades entre brokers per garantir la tolerància a fallades.
- ZooKeeper
ZooKeeper és un servei de coordinació que Kafka utilitza per gestionar la configuració del clúster, la informació dels nodes i la sincronització entre brokers. A partir de Kafka 2.8, s'està treballant per eliminar la dependència de ZooKeeper.
Diagrama de l'Arquitectura de Kafka
A continuació es mostra un diagrama simplificat de l'arquitectura de Kafka:
+-------------------+ +-------------------+ | Productor 1 | | Productor 2 | +--------+----------+ +--------+----------+ | | v v +-------------------+ +-------------------+ | Broker 1 | | Broker 2 | | (Partició 0, 1) | | (Partició 2, 3) | +--------+----------+ +--------+----------+ | | v v +-------------------+ +-------------------+ | Consumidor 1 | | Consumidor 2 | +-------------------+ +-------------------+
Resum
En aquesta secció, hem explorat els components clau de l'arquitectura de Kafka, incloent productors, consumidors, temes, particions, brokers, clústers i ZooKeeper. Entendre aquests components és fonamental per treballar amb Kafka de manera efectiva. En la següent secció, veurem com configurar un entorn de Kafka per començar a treballar amb aquests components.
Exercici Pràctic:
- Configura un clúster de Kafka localment:
- Descarrega i instal·la Apache Kafka.
- Configura un broker de Kafka i un ZooKeeper.
- Crea un tema amb diverses particions.
- Escriu un productor i un consumidor simples per enviar i rebre missatges.
Solució:
-
Descarrega i instal·la Apache Kafka:
- Descarrega Kafka des del lloc oficial.
- Descomprimeix l'arxiu descarregat.
-
Configura un broker de Kafka i un ZooKeeper:
- Inicia ZooKeeper:
bin/zookeeper-server-start.sh config/zookeeper.properties
- Inicia Kafka:
bin/kafka-server-start.sh config/server.properties
- Inicia ZooKeeper:
-
Crea un tema amb diverses particions:
bin/kafka-topics.sh --create --topic my-topic --bootstrap-server localhost:9092 --partitions 3 --replication-factor 1
-
Escriu un productor i un consumidor simples:
- Utilitza els exemples de codi proporcionats anteriorment per crear un productor i un consumidor.
Aquest exercici pràctic t'ajudarà a familiaritzar-te amb la configuració i l'ús bàsic de 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