Este proyecto es un sistema de notificaciones de pedidos en tiempo real usando Apache Kafka con Spring Boot.
📌 ¿Qué hace esta aplicación?
- Un Productor envía pedidos a Kafka.
- Kafka almacena los mensajes en un topic.
- Un Consumidor lee los pedidos desde Kafka y los procesa en tiempo real.
⚡ Caso de uso:
👉 Imagina una tienda online donde cada vez que un usuario compra un producto, el sistema envía una notificación a un servicio de logística.
👉 Kafka nos permite procesar esas notificaciones de manera eficiente y escalable.
🚀 Kafka es un sistema de mensajería distribuido que permite procesar datos en tiempo real.
Kafka funciona como un "📬 buzón de mensajes".
- Un productor 📝 coloca un mensaje en el buzón (Kafka).
- Un consumidor 📩 recoge el mensaje y lo procesa.
- Kafka garantiza que los mensajes lleguen y se puedan leer en orden.
📌 Kafka es ideal para:
✅ Sistemas de monitoreo en tiempo real.
✅ Comunicación entre microservicios.
✅ Procesamiento de grandes volúmenes de datos.
📌 Zookeeper es el "gerente" de Kafka.
- Se encarga de coordinar qué servidores Kafka están activos.
- Ayuda a Kafka a mantener alta disponibilidad.
👉 Kafka NO puede funcionar sin Zookeeper, porque lo necesita para gestionar los "brokers" (servidores Kafka).
[ Cliente - API REST ]
│
▼
┌──────────────────────┐
│ PedidoController │ (Recibe pedidos y los envía a Kafka)
└──────────────────────┘
│
▼
┌──────────────────────┐
│ PedidoProducer │ (Publica mensajes en Kafka)
└──────────────────────┘
│
▼
┌──────────────────────┐
│ KAFKA │ (Almacena los pedidos en un "topic")
└──────────────────────┘
│
▼
┌──────────────────────┐
│ PedidoConsumer │ (Recibe y procesa pedidos)
└──────────────────────┘
│
▼
[ Notificación generada ]
📌 Explicación:
1️⃣ Un cliente envía un pedido mediante un POST /pedidos
.
2️⃣ El Productor (Producer) lo envía a Kafka.
3️⃣ Kafka almacena el mensaje en un topic "pedidos".
4️⃣ El Consumidor (Consumer) recibe el mensaje y lo procesa.
Tecnología | Descripción |
---|---|
Spring Boot | Framework para crear aplicaciones Java rápidamente |
Apache Kafka | Plataforma de mensajería en tiempo real |
Zookeeper | Coordina los servidores Kafka |
Docker | Contenedores para Kafka y Zookeeper |
Maven | Manejo de dependencias Java |
docker-compose up -d
mvn spring-boot:run
Usa Postman o cURL:
curl -X POST "http://localhost:8080/pedidos" -H "Content-Type: application/json" -d '{"producto": "Laptop", "cantidad": 2}'
📌 El consumidor recibirá el mensaje y lo imprimirá en consola.
📄 Pedido.java (📌 Modelo de datos)
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Pedido {
private String id;
private String producto;
private int cantidad;
}
📌 Representa un pedido con un id
, producto
y cantidad
.
📄 PedidoProducer.java (📡 Productor Kafka)
@Service
@RequiredArgsConstructor
public class PedidoProducer {
private final KafkaTemplate<String, Pedido> kafkaTemplate;
private static final String TOPIC = "pedidos";
public void enviarPedido(Pedido pedido) {
kafkaTemplate.send(TOPIC, pedido);
}
}
📌 Publica mensajes en Kafka en el topic pedidos
.
📄 PedidoConsumer.java (📥 Consumidor Kafka)
@Service
public class PedidoConsumer {
@KafkaListener(topics = "pedidos", groupId = "pedidos-group", containerFactory = "pedidoKafkaListenerContainerFactory")
public void recibirPedido(Pedido pedido) {
System.out.println("📦 Pedido recibido: " + pedido);
}
}
📌 Escucha el topic pedidos
y procesa los mensajes.
Característica | Kafka | RabbitMQ | ActiveMQ |
---|---|---|---|
Modelo | Basado en logs distribuidos | Mensajería clásica (cola) | Mensajería clásica (cola) |
Velocidad | Muy rápido (millones de mensajes/seg) | Medio | Medio |
Persistencia | Sí, almacena eventos en logs | Opcional | Opcional |
Escalabilidad | Altísima, diseñado para Big Data | Media | Media |
Casos de uso | Streaming de datos en tiempo real | Comunicación entre microservicios | Aplicaciones empresariales |
📌 Kafka es ideal para streaming de datos y Big Data.
📌 RabbitMQ y ActiveMQ son mejores para colas de mensajes tradicionales.
📌 Creador: Carlos Exposito (Frody)
📌 GitHub: FirstOnDie
📌 Contacto: LinkedIn