Repository navigation
Ejercicios
##1. Operaciones Básicas
###1.1. Puesta en marcha del sistema
- Inicio de Zookeeper (editar configuración en
config/zookeeper.propertiesy luego iniciar conbin/zookeeper-server-start.sh config/zookeeper.properties) - Inicio de Broker Kafka (editar configuración en
config/server.propertiesy luego iniciar conbin/kafka-server-start.sh config/server.properties)
###1.2. Producir y consumir mensajes
- Crear tópico X (usar
kafka-topics.shcon la opción--create --topic <nombre-topico> --zookeeper <zookeeper-url:zkport> --replication-factor 1 --partitions 1) - Producir mensajes a X (usar
kafka-console-producer.sh --broker-list <broker1:port, broker2:port ... > --topic <topic-name>) - Consumir mensajes desde X (usar
kafka-console-consumer.sh --zookeeper <zookeeper-url:zkport> --topic <topic-name>) - Consumir desde el comienzo de X (
--from-beginning) - Producir mensajes a tópico Y (sin crearlo anteriormente) ¿Qué ocurre?
- Inspeccionar tópicos (usar
kafka-topics.shcon la opción--describeo--list) - Configurar
auto.create.topics.enable=falseen las propiedades del broker - Producir mensajes a tópico Z (sin crearlo anteriormente). ¿Qué ocurre?
###1.3. Replicación de tópicos
- Crear topico replicado y con dos particiones (
--replication-factor 2 --partitions 2) - Inspeccionar liderazgo (
kafka-topics.sh --zookeeper <zkurl:port> --describe --topic <topic-name>) - Bajar al lider (
kill -9 <process number>) - Re-inspeccionar liderazgo
- Reiniciar broker bajado en paso anterior
- Rebalancear liderazgo (
./kafka-preferred-replica-election.sh --zookeeper <zkurl:port>)
##2. Administración
###2.1 Eliminación de tópicos
- Borrar tópicos (usar
kafka-topics.shcon la opción--delete) - Inspeccionar tópicos
- Borrado manual (borrar en zookeeper usando
zookeeper-shell.sh, y luego borrar los directorios donde se guardaban los logs de Kafka para dicho topico) - Configuración para permitir borrado automático (
delete.topic.enable=true) - Crear y borrar tópico, y ver qué pasa.
###2.2 Modificación de tópicos (override al servidor)
-
modificar particiones:
bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic <topic_name> --partitions 10 -
consultar propiedades
bin/kafka-configs.sh --zookeeper localhost:2181 --describe --entity-name <topic-name> --entity-type topics -
modificar propiedades
bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic <topic_name> --config x=yobin/kafka-configs.sh --zookeeper localhost:2181 --alter --entity-name <topic-name> --entity-type topics --add-config retention.ms=120000 -
eliminar propiedades
bin/kafka-topics.sh --zookeeper zk_host:port/chroot --alter --topic <topic_name> --delete-config x
###2.3 Políticas de retención
- Crear y configurar tópico A con
retention.bytes=150 - Crear y configurar tópico B con
retention.ms=120000 - Crear y configurar tópico C con ambas opciones
- Configurar además
log.retention.check.interval.ms=30000(para todos los tópicos, puede ser a nivel del broker) - Reiniciar broker con nueva configuración
- Producir y consumir mensajes a los tres tópicos. En paralelo, inspeccionar log de cada tópico (en
/tmp/kafka-logs/y ver qué ocurre)
###2.4 Balanceo del liderazgo
- Crear 5 brokers (tmux)
- Crear 2 tópicos, con 10 particiones c/u, factor de replicación 4.
- Inspeccionar el liderazgo
- Bajar un broker e Inspeccionar el liderazgo
- Levantar el broker bajado e inspeccionar el liderazgo
- Ejecutar
kafka-preferred-replica-election.she inspeccionar el liderazgo ¿Qué conclusiones pueden sacar? - Repetir el ejercicio configurando 'auto.leader.rebalance.enable' en la configuración del broker.
###2.5 Modificar cluster
- Aumento de particiones
###2.6 Monitoreo
-
alt A. Scripts incluidos en kafka.
Consultar grupos activos:
bin/kafka-consumer-groups.sh --list --zookeeper localhost:2181Consultar posición del consumidor:
bin/kafka-consumer-groups.sh --describe --group <group_id> --zookeeper localhost:2181 -
alt B. [Kafka Manager] (https://github.com/yahoo/kafka-manager).
git clone https://github.com/yahoo/kafka-manager.gitcd kafka-managergit fetch origin pull/282/head:0.10.0git checkout 0.10.0modificar archivo kafka-manager/conf/application.conf de modo que diga:
kafka-manager.zkhosts="localhost:2181"compilar:
sbt clean distcd /home/ubuntu/kafka-manager/target/universal/sudo mv kafka-manager-1.3.1.8.zip /usr/local/(instalar zip si el sistema no lo tiene:)
sudo apt-get install zipunzip /usr/local/kafka-manager-1.3.1.8.zip -d .sudo mv ./kafka-manager-* /usr/local/kafka-managernano ~/.profileAgregar la siguiente linea abajo:
…
…
export KAFKA_MANAGER_HOME=/usr/local/kafka-managerfinalmente, ejecutar los siguientes comandos:
source ~/.profile$KAFKA_MANAGER_HOME/bin/kafka-manager -Dhttp.port=9001 -
alt C. Kafka Offset Monitor.
##3. API de Productor ###3.1. Productor Basico
- Ejecutar productor fire-and-forget y
kakfa-console-consumer.sh - Ejecutar con broker abajo
- Repetir prueba con productor síncrono.
- Repetir prueba con configración de
acks=0yacks=all
###3.2. Productores Avanzados
- Ejecutar productor con multiples particiones (tmux)
- Prueba con skew de datos
- Prueba con serialización
##4. API de Consumidor ###4.1. Consumidor Básico
- Ejecutar consumidor automatico
- Configurar
enable.auto.commit=falsey ejecutar consumidor concommitSync() - Repetir prueba con
commitAsync( callback() )
###4.1. Consumidores Avanzados
- Crear grupos de consumidores en threads
- Prueba con deserialización