Topics, partitions y brokers
Kafka organiza los eventos en topics. Cada topic se divide en partitions y esas partitions viven repartidas entre brokers.
Topic
Un topic es una categoria logica de eventos.
Ejemplos:
orders.created
orders.cancelled
payments.authorized
users.registeredUn topic debe representar un flujo de eventos con significado de negocio o tecnico claro.
Partition
Una partition es un log ordenado e inmutable.
flowchart LR
T["Topic orders.created"] --> P0["Partition 0"]
T --> P1["Partition 1"]
T --> P2["Partition 2"]
P0 --> E0["offset 0,1,2..."]
P1 --> E1["offset 0,1,2..."]
P2 --> E2["offset 0,1,2..."]Kafka garantiza orden dentro de una partition, no entre partitions distintas.
Offset
El offset es la posicion de un evento dentro de una partition.
topic: orders.created
partition: 2
offset: 1538El offset no es global. Solo tiene sentido dentro de topic + partition.
Broker
Un broker es un servidor Kafka. Un cluster tiene varios brokers para repartir carga y replicas.
flowchart LR
B1["Broker 1"] --> P0["orders-0 leader"]
B2["Broker 2"] --> P1["orders-1 leader"]
B3["Broker 3"] --> P2["orders-2 leader"]Leader y replicas
Cada partition tiene un leader. Productores y consumidores hablan con el leader. Las replicas copian los datos.
flowchart TB
L["Broker 1\npartition leader"] --> R1["Broker 2\nreplica"]
L --> R2["Broker 3\nreplica"]Si el leader falla, Kafka puede elegir una replica sincronizada como nuevo leader.
Replication factor
replication.factor=3 significa que cada partition tiene tres copias.
Ventajas:
- Tolerancia a fallos.
- Mantenimiento sin perder disponibilidad.
- Menor riesgo de perdida de datos.
Costes:
- Mas disco.
- Mas red.
- Mas coordinacion.
Partitions y paralelismo
El numero de partitions limita el paralelismo de consumo dentro de un consumer group.
Si un topic tiene 6 partitions, un consumer group puede tener hasta 6 consumidores trabajando en paralelo de forma efectiva.
Elegir numero de partitions
Considera:
- Throughput esperado.
- Numero de consumidores paralelos.
- Retencion y tamano de eventos.
- Necesidad de orden por clave.
- Coste operativo.
No crees cientos de partitions sin motivo. Las partitions tambien tienen coste.
Clave de particion
El producer puede enviar una key. Kafka usa esa key para decidir partition.
Ejemplo:
key = order_idTodos los eventos del mismo pedido iran a la misma partition, manteniendo orden para ese pedido.
Buenas practicas
- Usa nombres de topics claros y estables.
- Define keys pensando en orden y distribucion.
- Usa replication factor 3 en produccion cuando sea posible.
- Evita topics con partitions insuficientes para crecer.
- No dependas de orden global.
