Welcome to Apache Kafka -PARTE III (Jugando con topics).

Fede Sardo
5 min readJun 2, 2020

--

En pleno proceso de aprendizaje, nada mejor que compartir conocimiento.

https://cdn.confluent.io/wp-content/uploads/2016/09/103_kafka_logo.png

Si me estás acompañando en este camino asumo que ya leíste (si no te recomiendo que lo hagas):

Seguramente te estás preguntando ¿Y cuándo vamos a hacer algo?.
Llegó la hora de tirar magia y para esto vamos a usar el CLI (Command Line Interface) de kafka. Asumo que ya te has dado cuenta que para esto es necesario tener kafka levantado (y zookeeper, obvio).

Kafka Topics !

Nota: Vas a ver que ejecuto los comandos desde /bin/, para que sepas, cuando hago esto estoy posicionado en el directorio donde descomprimí/instalé Apache Kafka. Te muestro:

Primero lo primero, así que antes de seguir lo que vamos a hacer es crear un topic:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic cities --create

Listo, acabamos de crear nuestro primer topic en kafka. Así de simple, pero…

Qué sucedió detrás de escena?
Podemos ir a mirar los logs de kafka, pero no los logs de kafka como herramienta” o “servicio” como los que también tiene zookeeper, sino los logs de los mensajes de kafka. Espero que me entiendas y sino pasame un mail avisándome que me expliqué re mal y vemos de mejorar este párrafo.
Dónde podemos encontrar esos logs?
Esta ruta está definido en el archivo server.properties que se encuentra dentro de la carpeta config de tu “instalación de kafka”. En mi caso sería: /home/fsardo/kafka/config/server.properties

Si inspeccionamos el archivo, tal vez con el comando cat o de la forma que sea mas fácil para vos, vas a encontrar:

Si nos movemos entonces hacia esa ruta y listamos el contenido vas a observar entre otras cosas que hay una carpeta llamada cities-0 (también te muestro donde estoy posicionado, por las dudas).

Si nos movemos a esta carpeta vamos a ver una serie de archivos de los cuales charlaremos mas adelante. Te los muestro.

Pero por que te molesto tanto con esto de “cities-0”? Es para contarte que ese número cero hace referencia a la partición del topic que en este caso el valor por defecto es 1 (y comienzan en cero). Por qué y donde está esto indicado? De nuevo, en una propiedad del archivo server.properties.

server.properties file indicando la cantidad de particiones por defecto.

Igual te digo que no está bueno esto que acabamos de hacer por que el tópico se va a crear con varios parámetros por defecto y no nos va a gustar que esto sea siempre así, mínimamente vamos a querer definir propiedades como el replication-factor y también las particiones. Tranquilos, no os desesperéis! Ya llegaremos a eso.

Mientras tanto vamos a ver algunos detalles del topic que acabamos de crear. Si no te acordás el nombre exacto no te hagas drama, listamos los topicos existentes ejecutando:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --list
listando tópicos existentes.

Poca info no? Estamos hablando de 💪 **KAFKA** 💪 y lo único que vemos es “cities” ? Wait, wait ! para eso existe el **describe**:

bin/kafka-topics.sh --bootstrap-server localhost:9092 --topic cities --describe

Ahora tenemos mucho mas detalle, no?

Podemos ver el nombre del topic, luego observamos el PartitionCount que como vimos mas arriba por defecto es 1, este valor indica la cantidad de carpetas en que se van a almacenar los mensajes de este tópico. Luego observamos ReplicationFactor también por defecto en 1 indica la cantidad de “copias” de nuestro tópico en otros brokers de kafka.

Acá es importante que te cuente que no vas a poner tener un replication factor que sea mayor al número de brokers que tengas. Para que veas que no te mentí vamos a intentar crear un segundo topic con un replication-factor=2.

bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic countries --replication-factor 2 --partitions 2

Seguramente te vas a encontrar con un error como este:

Error. replication-factor es mayor a nuestro número de brokers.

No está bueno que sea 1 ya que si se produce falla en dicho server, nuestro tópico quedará inaccesible y por supuesto no queremos eso.

Ahora hagamos esto, creamos un topic nuevo con replicas de 1(por defecto) pero con 2 particiones así vemos que sucede.

bin/kafka-topics.sh --bootstrap-server localhost:9092 --create --topic countries --partitions 2

Si vamos a inspeccionar la carpeta de logs como hicimos anteriormente, fijate que nos encontramos con las carpetas countries-0 y countries-1

topic countries creado con dos particiones.

Listamos los tópicos para que veas que no te estoy mintiendo, ya sabes como hacerlo. Vas a llegar a este resultado:

Para terminar con esta introducción a la manipulación de tópicos vamos a borrar el último tópico creado (countries). El comando como te imaginarás es super intuitivo.

bin/kafka-topics.sh --bootstrap-server localhost:9092 --delete --topic countries

No hay info que te indique que fue borrado por eso es que en la siguiente imagen te muestro como se borró y te listo nuevamente los tópicos existentes.

borrando un topic y listando existentes.

👏 👏 Felicitaciones! ¡Ya sabes cómo realizar una manipulación básica de topics en Apache Kafka!

Que sigue:

En las próximas ediciones vamos a empezar a jugar con los producers y consumers utilizando el CLI de kafka y manipulando un poco mas los tópicos.

Gracias por leer! 👍

--

--

Fede Sardo

Mail: fedesardo@gmail.com || Twitter: @fedesardo || Instagram: fede.sardo ||💻 data engineer ||🎓 Studying software engineering || Argentina.