Redis Pub/Sub vs Kafka
Redis vs Kafka: quando usar cada um
Comparação prática com código para sinais efêmeros e eventos duráveis.
Nesta aula você vai
- Comparar Redis Pub/Sub e Kafka na prática
- Mapear requisitos de replay, ordering e durabilidade
- Implementar exemplos mínimos para cada tecnologia no monorepo
Redis vs Kafka: quando usar cada um
Objetivos
- Entender diferença entre broadcast efêmero e stream durável.
- Relacionar cada ferramenta com casos reais do e-commerce.
- Evitar decisões baseadas apenas em latência.
Pré-requisitos
- Docker com Redis e Kafka ativos.
- Node.js para snippets utilitários.
- Conhecimento básico de publicação/consumo de eventos.
Conceito
Use Kafka quando precisar de histórico, replay, retenção e consumo por grupo. Use Redis Pub/Sub para sinais rápidos que podem ser perdidos sem impacto crítico.
- Exemplo Kafka:
order.created,payment.approved(críticos). - Exemplo Redis Pub/Sub: alerta de dashboard interno, heartbeat, refresh de cache distribuído.
Estrutura de arquivos
docs/architecture/
└── messaging-decision-record.md
services/analytics-service/src/experiments/
├── kafka-producer.js
├── kafka-consumer.js
├── redis-publisher.js
└── redis-subscriber.js
Passo a passo
- Producer Kafka (
services/analytics-service/src/experiments/kafka-producer.js):
import { Kafka } from "kafkajs";
const kafka = new Kafka({ clientId: "lab-kafka-producer", brokers: ["localhost:9092"] });
const producer = kafka.producer();
await producer.connect();
await producer.send({
topic: "order.events",
messages: [
{
key: "order-1001",
value: JSON.stringify({
eventId: "evt-k-1001",
type: "order.created",
payload: { orderId: "order-1001", amountCents: 12000 },
}),
},
],
});
await producer.disconnect();
- Publisher Redis (
services/analytics-service/src/experiments/redis-publisher.js):
import Redis from "ioredis";
const redis = new Redis("redis://localhost:6379");
await redis.publish(
"notifications.live",
JSON.stringify({
eventId: "evt-r-9001",
type: "notification.sent",
payload: { channel: "email", customerId: "c-1" },
}),
);
await redis.quit();
- Decisão documentada (
docs/architecture/messaging-decision-record.md):
## Decisão
- Eventos de domínio de pedido e pagamento: Kafka.
- Sinais efêmeros operacionais de baixa criticidade: Redis Pub/Sub.
## Motivos
- Kafka fornece retenção, replay e isolamento por consumer group.
- Redis Pub/Sub entrega latência baixa com setup simples.
Como testar
docker compose up -d kafka redis
node services/analytics-service/src/experiments/kafka-producer.js
node services/analytics-service/src/experiments/redis-publisher.js
Valide consumidores:
docker compose logs -f analytics-service
Dicas de projeto
- Defina uma tabela de decisão por requisito (durabilidade, replay, SLA).
- Não substitua Kafka por Redis em fluxos financeiros.
- Não use Kafka para tudo; simplicidade operacional importa.
Erros comuns
- Tratar Pub/Sub como fila persistente.
- Ignorar custo operacional de cluster Kafka.
- Misturar eventos críticos e efêmeros no mesmo desenho.
Resumo
Você comparou Redis Pub/Sub e Kafka com código real e definiu critérios claros para escolher a tecnologia certa em cada integração do monorepo.