Qué vas a hacer
Kafka guarda los mensajes en un tema (topic), que es un registro: los productores añaden mensajes al final y los consumidores los leen desde el punto que quieran. Un tema se divide en particiones, y cada mensaje recibe un offset, su número dentro de su propia partición, contando desde cero. Aquí vas a crear un tema, añadir tres mensajes y leerlos desde el principio.
Antes de empezar
Nota
Pulsa Iniciar el laboratorio en la barra de la parte superior de esta lección y espera a que diga que está en marcha. Primero arranca el broker (el servidor de Kafka) y después la página, así que el primer arranque tarda más o menos un minuto. Cada botón Ejecutar de abajo escribe su comando en el terminal de tu laboratorio, uno detrás de otro y en la misma sesión. Para verlos, o para escribir los tuyos, pulsa Abrir el terminal (pestaña nueva) en la barra.
1. Crea un tema
Este comando le pide un tema llamado orders con tres particiones a la API web que hay detrás de Kafka UI. Imprime 200, la palabra de la web para «hecho», en una línea aparte: el \n que va detrás de %{http_code} la termina con un salto de línea. Después, el segundo comando enumera las particiones: "partition":0, "partition":1 y "partition":2, cada una con "offsetMax":0. Ese número es el siguiente offset, el que recibirá el próximo mensaje, así que las tres están vacías.
curl -s -X POST -H "Content-Type: application/json" -d '{"name":"orders","partitions":3,"replicationFactor":1,"configs":{}}' http://kafka-ui:8080/api/clusters/lab/topics -o /dev/null -w "%{http_code}\n"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
2. Produce tres mensajes
Cada comando añade un mensaje e imprime 200. Los dos primeros van a la partición 0 y el tercero a la partición 1. Un comando tiene que indicar la partición; en la propia página, el botón Produce Message (producir mensaje) del tema hace lo mismo.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"coffee","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":0,"key":"alice","value":"tea","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -X POST -H "Content-Type: application/json" -d '{"partition":1,"key":"bob","value":"cake","headers":{},"keySerde":"String","valueSerde":"String"}' http://kafka-ui:8080/api/clusters/lab/topics/orders/messages -w "%{http_code}\n"Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
3. Mira los offsets y léelo de vuelta
Ejecuta otra vez el primer comando: la partición 0 dice ahora "offsetMax":2, la partición 1 dice 1 y la partición 2 sigue diciendo 0. Cada partición cuenta por su cuenta. El segundo comando lee el tema desde el principio, que es lo que hace un consumidor nuevo, e imprime la partición y el offset de cada mensaje junto a su valor: coffee es la partición 0 offset 0, tea es la partición 0 offset 1 y cake es la partición 1 offset 0. Llegan primero los más recientes, así que cake aparece antes que coffee; el orden real lo dan los offsets.
curl -s http://kafka-ui:8080/api/clusters/lab/topics/orders | grep -o '"partition":[0-9]*\|"offsetMax":[0-9]*'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
curl -s -N "http://kafka-ui:8080/api/clusters/lab/topics/orders/messages/v2?seekType=BEGINNING&limit=10" | grep -o '"partition":[0-9]*,"offset":[0-9]*\|"value":"[a-z]*"'Se muestra aquí y no se ejecuta. Crea una cuenta gratuita para pulsar Ejecutar y escribirlo en el terminal de tu propio laboratorio.
Para el profesorado
Consejo
Esta lección es un pequeño ejemplo de una lección practicada en un laboratorio: los pasos y los botones Ejecutar son la lección, y el laboratorio es la copia propia de cada alumno. El laboratorio son dos servicios, un broker y la página que lo lee, y nada de lo que hay aquí se corrige solo: el alumno entrega los offsets de antes y de después y una frase que explique por qué cada partición empieza en cero. El broker no conserva nada cuando el laboratorio se detiene. Cópiela en su propio módulo y modifíquela, o cree una desde cero con el menú Laboratorio del constructor de lecciones.