Trabajo con Apache Kafka en Java: guía completa para desarrolladores

Entrenador de Python en Línea para Principiantes

Aprende Python fácilmente sin sobrecargarte de teoría. Resuelve tareas prácticas con verificación automática, recibe pistas y escribe código directamente en el navegador, sin instalar nada.

Start Course

Trabajo con Apache Kafka en Java: desde lo básico hasta el uso avanzado



Apache Kafka es una plataforma distribuida para el procesamiento de datos en streaming que se ha convertido en el estándar de facto para construir arquitecturas event-driven. En esta guía, analizaremos cómo trabajar eficientemente con Kafka en Java: desde la instalación de las bibliotecas necesarias hasta la escritura de un productor y un consumidor con manejo de errores.



¿Por qué Java y Kafka son la pareja ideal?

Java es uno de los lenguajes principales para trabajar con Kafka por varias razones:

  • El cliente oficial de Kafka está escrito en Java y ofrece el máximo rendimiento
  • Un rico ecosistema de bibliotecas (Spring Kafka, Kafka Streams, Akka Streams)
  • Tipado estricto y la posibilidad de ajuste fino mediante objetos de configuración


Instalación y configuración de dependencias

Para trabajar con Kafka en Java, necesitarás agregar la dependencia en pom.xml (Maven) o build.gradle (Gradle).



Maven

<dependency>    <groupId>org.apache.kafka</groupId>    <artifactId>kafka-clients</artifactId>    <version>3.6.0</version></dependency>


Gradle

implementation 'org.apache.kafka:kafka-clients:3.6.0'


Creación de un Kafka Producer (Productor)

El productor se encarga de enviar mensajes a los tópicos de Kafka. Aquí tienes un ejemplo básico de configuración:



import org.apache.kafka.clients.producer.*;import org.apache.kafka.common.serialization.StringSerializer;import java.util.Properties;

public class SimpleProducer { public static void main(String[] args) { // 1. Configuración de propiedades del productor Properties props = new Properties(); props.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); props.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName()); // 2. Creación del productor KafkaProducer<String, String> producer = new KafkaProducer<>(props); // 3. Envío de mensaje ProducerRecord<String, String> record = new ProducerRecord<>( "my-topic", "key-1", "¡Hola, Kafka desde Java!" ); // 4. Envío asíncrono con callback producer.send(record, (metadata, exception) -> { if (exception == null) { System.out.println("Mensaje enviado: " + "topic=" + metadata.topic() + ", partition=" + metadata.partition() + ", offset=" + metadata.offset()); } else { System.err.println("Error al enviar: " + exception.getMessage()); } }); // 5. Cierre del productor producer.close(); }}


Creación de un Kafka Consumer (Consumidor)

El consumidor lee mensajes de los tópicos. Es importante configurar correctamente el grupo de consumidores para el balanceo de carga.



import org.apache.kafka.clients.consumer.*;import org.apache.kafka.common.serialization.StringDeserializer;import java.time.Duration;import java.util.Collections;import java.util.Properties;

public class SimpleConsumer { public static void main(String[] args) { // 1. Configuración de propiedades del consumidor Properties props = new Properties(); props.put(ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092"); props.put(ConsumerConfig.GROUP_ID_CONFIG, "my-consumer-group"); props.put(ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, StringDeserializer.class.getName()); props.put(Consu

Recommendations