A partir de la increíble demanda que parece que tiene Kafka, en el vídeo de hoy hemos hablado sobre Kafka Connect, que básicamente es la posibilidad de usar componentes estadard(O programar los tuyos propios, pero eso para otro vídeo). De esta manera, hay procesos estándar que no tienes porque programar un publicador o subscriptor especifico. Por cierto, que empezamos serie de vídeos dedicados a Kafka.
Tenemos dos tipos de conectores, los que publican a partir de una fuente(source) y los que procesan a partir de una entrada en una lísta(sink). Hoy usaremos dos conectores, uno que leerá los datos de un fichero y los publicará en una lista(source) y otro que leerá los datos de una lista y los escribirá en un fichero(sink).
Instalar y arrancar Kafka
Lo primero que hemos hecho en el vídeo ha sido descargar y descomprimir Kafka de la URL https://kafka.apache.org/. Este es todo el proceso de instalación.
A partir de aquí hemos arrancado primero Zookeeper y después Kafka en modo ‘standalone'(Es decir, que trabajaremos con un cluster de un solo nodo):
<KAFKA_HOME>/bin/zookeeper-server-start.sh config/zookeeper.properties <KAFKA_HOME>/bin/kafka-server-start.sh config/server.properties
Después hemos arrancado un subscriptor por consola para poder ver como se van publicando los mensajes, esto no es obligatorio pero nos viene bien para ver mejor lo que pasa allí dentro:
<KAFKA_HOME>/bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic connect-test –from-beginning
Creamos nuestro primer conector(source) y arrancamos Kafka Connector
Primero creamos un fichero de configuración(source.properties) para nuestro primer conector que se va a encargar de leer los datos de un fichero(test.txt) y lo va a insertar en la lista(topic) llamada ‘connect-test’.
name=local-file-source connector.class=FileStreamSource tasks.max=1 file=test.txt topic=connect-test
El fichero de configuración de un conector es muy sencillo: tenemos la propiedad ‘name’ que tiene el nombre del conector que debe ser diferente en todos los conectores, el campo ‘connector.class’ con el nombre de la classe Java que tiene que ejecutar, el campo ‘tasks.max’ con el número máximo de tareas en paralelo que puede procesar, el campo ‘file’ con el fichero a leer y el campo ‘topic’ con el nombre de la lista a insertar mensajes.
Ahora ya solo queda arrancar Kafka Connect:
<KAFKA_HOME>/bin/connect-standalone.sh config/connect-standalone.properties ./source.properties
Lo arrancamos con el script ‘connect-standalone.sh’ que tiene como primer parámetro la configuración del ‘worker’ que en esta caso hemos usado el que viene por defecto y después tantos ficheros de configuración como conectores que tengamos, en este caso uno(source.properties).
Creamos nuestro segundo conector(sink) y reiniciamos Kafka Connector
Configuramos nuestro segundo conector, en este caso del tipo ‘sink’ que va a escribir en un fichero lo que va a leer del topic ‘connect-test’. El fichero de configuración(sink.properties) queda de la siguiente manera:
name=local-file-sink connector.class=FileStreamSink tasks.max=1 file=test.sink.txt topics=connect-test
Y paramos y volvemos ha arrancar Kafka Connector, esta vez con los dos conectores:
<KAFKA_HOME>/bin/connect-standalone.sh config/connect-standalone.properties ./source.properties ./sink.properties