Trabajo con Kafka en Java: bibliotecas, configuración y ejemplos de código

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 Kafka en Java: bibliotecas, configuración y ejemplos de código

\n\n

Apache Kafka es una plataforma distribuida para transmisión de datos en flujo, ampliamente utilizada para construir sistemas de mensajería de alta carga, recolección de registros, procesamiento de eventos en tiempo real e integración de microservicios. En el ecosistema Java, Kafka ocupa un lugar especial gracias a la biblioteca oficial Kafka Clients y a múltiples herramientas adicionales. En este artículo, analizaremos en detalle cómo trabajar con Kafka en Java, qué bibliotecas usar y proporcionaremos ejemplos prácticos de código.

\n\n

Bibliotecas principales para trabajar con Kafka en Java

\n\n

Para integrar aplicaciones Java con Apache Kafka, existen varias bibliotecas clave:

\n\n
    \n
  • Kafka Clients — biblioteca oficial de Apache que proporciona API para productores (Producer) y consumidores (Consumer). Es la forma mínima y más confiable de interactuar con los brokers.
  • \n
  • Spring Kafka — extensión para Spring Framework que simplifica la configuración y el uso de Kafka mediante anotaciones y plantillas (KafkaTemplate, @KafkaListener).
  • \n
  • Kafka Streams — biblioteca para construir aplicaciones de procesamiento de flujos (stream processing) en Java, sin necesidad de Spark o Flink. Permite realizar filtrado, agregación y unión de flujos.
  • \n
  • Akka Streams Kafka (Alpakka) — biblioteca reactiva para trabajar con Kafka basada en Akka Streams, adecuada para aplicaciones asíncronas y no bloqueantes.
  • \n
\n\n

En esta guía, nos centraremos en la biblioteca oficial Kafka Clients, ya que es la base de todas las demás herramientas.

\n\n

Adición de dependencias (Maven)

\n\n

Para comenzar, agregue la siguiente dependencia en su pom.xml:

\n\n
<dependency>\n    <groupId>org.apache.kafka</groupId>\n    <artifactId>kafka-clients</artifactId>\n    <version>3.7.0</version>\n</dependency>
\n\n

Si usa Gradle, agregue:

\n\n
implementation 'org.apache.kafka:kafka-clients:3.7.0'
\n\n

Configuración del productor (Producer)

\n\n

El productor envía mensajes a los tópicos de Kafka. Veamos un ejemplo simple de creación y envío de un mensaje.

\n\n
import org.apache.kafka.clients.producer.*;\nimport java.util.Properties;\n\npublic class SimpleProducer {\n    public static void main(String[] args) {\n        // Configuración de propiedades del productor\n        Properties props = new Properties();\n        props.put("bootstrap.servers", "localhost:9092");\n        props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n        props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");\n        props.put("acks", "all"); // Esperar confirmación de todas las réplicas\n        props.put("retries", 3);  // Número de reintentos en caso de error\n\n        // Creación del productor\n        Producer<String, String> producer = new KafkaProducer<>(props);\n\n        // Envío del mensaje\n        ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key1", "¡Hola, Kafka desde Java!");\n        producer.send(record, (metadata, exception) -> {\n            if (exception == null) {\n                System.out.println("Mensaje enviado al tópico: " + metadata.topic() +\n                                   ", partición: " + metadata.partition() +\n                                   ", offset: " + metadata.offset());\n            } else {\n                System.err.println("Error de envío: " + exception.getMessage());\n            }\n        });\n\n        // Cierre del productor\n        producer.close();\n    }\n}
\n\n

En este ejemplo, configuramos la dirección del broker (localhost:9092), los serializadores para la clave y el valor (en este

Recommendations