Brokers Y Bootstrap Servers

Kafka: brokers y bootstrap servers

Este apunte aclara una confusion comun cuando se empieza con Kafka: que es un broker, que es un bootstrap server y que significan valores como KAFKA_URIS, brokers o bootstrap.servers.

Idea corta

Un Kafka broker es un servidor/proceso Kafka real dentro de un cluster.

Un bootstrap server no es otro tipo de servidor. Es un broker usado como punto de entrada inicial para que un cliente descubra el cluster.

Kafka cluster
  broker-1:9092
  broker-2:9092
  broker-3:9092

bootstrap.servers=broker-1:9092,broker-2:9092

En ese ejemplo, broker-1 y broker-2 son brokers normales. Se les llama bootstrap servers porque el cliente los usa para arrancar la conexion y obtener metadata del cluster.

Vocabulario

Termino Que significa
Cluster Kafka Conjunto completo de brokers que trabajan juntos.
Broker Kafka Proceso/servidor Kafka que almacena particiones, atiende clientes y participa en el cluster.
Node Maquina, VM, contenedor o pod donde corre un broker. A veces se usa como sinonimo informal de broker, aunque no siempre es exacto.
Bootstrap server Broker accesible usado por un cliente para descubrir el cluster.
bootstrap.servers Configuracion del cliente con una lista de host:puerto iniciales.
KAFKA_URIS / brokers Nombres habituales de configuracion para guardar una lista de endpoints Kafka. Conceptualmente cumplen el papel de bootstrap servers.

Que pasa cuando un cliente se conecta

Un productor, consumidor, Kafka Connect o ClickHouse no necesita conocer manualmente cada broker del cluster.

El flujo normal es:

  1. El cliente recibe una lista inicial de brokers:

    bootstrap.servers=broker-1:9092,broker-2:9092
  2. El cliente intenta conectarse a alguno de esos brokers.

  3. Ese broker devuelve metadata del cluster:

    • brokers disponibles
    • topics
    • particiones
    • leader de cada particion
    • coordinadores de consumer groups cuando aplica
  4. Con esa metadata, el cliente puede hablar directamente con los brokers que correspondan.

Por eso se dice que el bootstrap server es solo la puerta de entrada. Despues de descubrir el cluster, el cliente no queda limitado a hablar solo con ese broker.

Cualquier broker puede ser bootstrap server?

Si, cualquier broker puede actuar como bootstrap server si cumple estas condiciones:

  • esta levantado
  • el cliente puede llegar a su host:puerto
  • expone un listener Kafka valido para ese cliente
  • sus advertised.listeners anuncian direcciones alcanzables desde donde corre el cliente
  • si hay TLS/SASL, el cliente usa las credenciales y protocolo correctos

La parte de advertised.listeners suele ser la trampa mas habitual. Un cliente puede conectarse al bootstrap server, recibir metadata y luego fallar si Kafka le anuncia direcciones internas que el cliente no puede resolver.

Ejemplo tipico de error conceptual:

Cliente externo -> bootstrap broker publico
Broker responde metadata con: kafka-1:9092
Cliente externo no puede resolver kafka-1
Resultado: falla despues del bootstrap

El bootstrap inicial funciono, pero la metadata anunciada no era valida para ese entorno.

Tengo que listar todos los brokers?

No. La lista de bootstrap servers no tiene que incluir todos los brokers del cluster.

Pero conviene incluir mas de uno:

bootstrap.servers=broker-1:9092,broker-2:9092,broker-3:9092

Motivo:

  • si solo configuras broker-1 y esta caido, el cliente no puede iniciar el descubrimiento
  • si configuras varios, el cliente puede probar otro broker inicial
  • una vez conectado, Kafka entrega metadata del cluster completo

Regla practica:

Desarrollo local: 1 broker suele bastar.
Produccion: usar 2 o 3 brokers como bootstrap servers es mas robusto.

Si la configuracion se llama KAFKA_URIS o brokers

Algunas aplicaciones no usan literalmente el nombre bootstrap.servers. Pueden llamarlo KAFKA_URIS, brokers, kafkaBrokers, kafkaServers o algo parecido.

El nombre cambia segun la aplicacion, libreria o chart, pero el concepto suele ser el mismo:

lista de host:puerto de brokers Kafka usados como entrada inicial al cluster

Ejemplos:

bootstrap.servers=broker-1:9092,broker-2:9092
KAFKA_URIS=broker-1:9092,broker-2:9092
brokers:
  - broker-1:9092
  - broker-2:9092

La parte importante es no confundir esa lista con topics, con ZooKeeper, con ClickHouse ni con un objeto “cluster” abstracto. Son direcciones de brokers Kafka.

Ejemplo en Docker Compose

En un compose donde el servicio se llama kafka, otros contenedores de la misma red suelen usar:

bootstrap.servers=kafka:9092

Eso funciona porque kafka resuelve al broker desde dentro de la red Docker.

Pero desde tu maquina host puede que necesites otro listener:

bootstrap.servers=localhost:9092

La configuracion correcta depende de desde donde corre el cliente.

Ejemplo en Kubernetes

Con un StatefulSet de tres brokers puedes ver nombres parecidos a:

kafka-0.kafka-headless.default.svc.cluster.local:9092
kafka-1.kafka-headless.default.svc.cluster.local:9092
kafka-2.kafka-headless.default.svc.cluster.local:9092

Un productor o proceso batch dentro del cluster podria usar esos endpoints o un servicio bootstrap preparado por el chart/operador.

Lo importante no es el nombre exacto, sino que el cliente pueda:

  1. llegar al bootstrap broker
  2. recibir metadata con direcciones alcanzables
  3. autenticarse si Kafka usa seguridad

Frase para recordar

Un broker es una pieza real del cluster.
Un bootstrap server es un broker usado como punto inicial de descubrimiento.

Y si una configuracion lo llama KAFKA_URIS o brokers:

KAFKA_URIS / brokers = lista de brokers iniciales para descubrir Kafka.

Fuentes