Como cualquier otra herramienta, framework o lenguaje de programación se requiere de una serie de conocimientos mínimos para entender y hacer un uso efectivo de aquello en lo cual decidimos emprender, Kafka es una plataforma y como tal ya está construida, pero debemos entender primero su función, la cual es principalmente la transmisión de datos, esto quiere decir que debemos estar familiarizados con los paradigmas y arquitecturas principales de este proceso, se puede decir que este debe ser nuestro conocimiento conceptual más dominante. Kafka a su vez se divide en dos mundos, el primero el ambiente donde se relacionan todos los temas de configuración y segundo el desarrollo.

Nos podemos enfocar en configuración de ambiente o en desarrollo, pero para desarrollar debemos tener un conocimiento superficial del ambiente y su plataforma, es decir debemos estar familiarizados con los entornos del sistema operativo y sus servicios, debemos de tener muy presente los recursos, las configuraciones mismas desde el desarrollo y como queremos realizar los despliegues de nuestros desarrollos en Kafka. Para el desarrollo en específico si hablamos de lenguaje se requiere conocimientos en Java, ya que es el lenguaje en que está escrito Kafka y la mayoría de documentación la vamos a encontrar en este lenguaje, será muy frecuente el uso de datos en formato JSON o estructuras ligeras, así como la creación o uso de servicios y la interacción con bases de datos no relacionales.

Todo lo demás serán conocimientos específicos que deberemos aprender sobre Kafka, su plataforma, sus arquitecturas y paradigmas, herramientas complementarias, framework, etc.

Cuando implementar Kafka.

Kafka y su plataforma ofrece una amplia gama de alternativas que la pueden ubicar como una solución que se adapta a muchas necesidades orientadas a la transmisión de datos, pero no debemos concluir que es la herramienta maestra que solucionará todos nuestros retos empresariales, suponerlo ya es un error porque siempre existirá la definición misma del proceso, el objetivo final que deseo conseguir con todas sus características que deben ser evaluadas para determinar lo que debo usar, como lo debo usar y cuando se debe usar. Las soluciones diseñadas para cubrir una alta gama de posibilidades por lo general son muy rígidas y poco personalizables, en este caso se puede utilizar como ejemplo Kafka y sus componentes nativos, realizar una integración de dos sistemas será sencillo, sin mucho esfuerzo y con pocas configuraciones puedo obtener los resultados deseados, pero si en ese proceso de transmisión de datos necesito algo adicional como convertir los tipos de datos a otros diferentes, los componentes nativos de Kafka no lo permitirían y se deberá realizar un desarrollo que nos tomará más tiempo. A veces será más práctico y mejor, realizar un proceso en Kafka y complementarlo con micro servicios o buses de integración. No obstante, con certeza se puede decir que el fuerte de Kafka es la transmisión de datos en tiempo real, no importa si hablamos de volumetrías muy grandes, Kafka nos dará muy buen desempeño y al estar diseñada para este fin, el sistema se simplificará con una arquitectura muy limpia reduciendo la cantidad de objetos y convirtiéndose en su nucleo principal, reemplazando procesos en batch y ejecuciones programadas por un streaming de datos que mantendrá todos los sistemas relacionados actualizados.

Empecemos

Tener un conocimiento básico de Apache Kafka puede potencializar nuestras carreras, puesto que, es una habilidad que está empezando a ser muy buscada en el mundo laboral. Esto gracias al creciente número de compañías que están adaptando esta tecnología para el procesamiento de su información.

Desafortunadamente, aprender Apache Kafka no es una tarea fácil. Cuando nos enfrentamos por primera vez a Kafka, puede ser difícil comprender los conceptos de brokers, clusters, particiones, tópicos y logs. También deberemos comprender como los productores y consumidores almacenan y recuperan los datos de un cluster. ¡Un verdadero dolor de cabeza! Con el conocimiento teórico resuelto, es importante comprender nuestro rol; en este blog y dada nuestra experiencia nos centramos en el rol de desarrollador de software.

Lo primero que debemos hacer es escoger un cliente. Kafka cuenta con un amplio ecosistema de clientes para diferentes lenguajes. Sin embargo, la calidad del cliente determinará el rendimiento de nuestras aplicaciones. Desde SETI hemos trabajado con el cliente de Java por ser directamente desarrollado con el proyecto de Apache Kafka y con el cliente de Python por ser el lenguaje principal de nuestro grupo.

Con el cliente seleccionado es hora de poner manos a la obra y desarrollar un pequeño proyecto, si, ¡pequeño! Esto le permitirá tener un mayor control y detectar lo que funciona y lo que no. Con este proyecto vas a aprender la mayoría de las APIs expuestas por el cliente y las diferentes formas de usarlas.

El siguiente paso importante es aprender a configurar el cliente para la confiabilidad de los datos y el rendimiento. Revisa la documentación de Kafka para entender las diferentes configuraciones que pueden afectar estos aspectos desde la aplicación prestando atención a aquellas que están marcadas con una importancia alta y empieza a jugar con ellas.

¡Una vez realizado lo anterior está listo para trabajar en una aplicación real!

Si quiere continuar aprendiendo temas más avanzados de Kafka, seguramente quiera explorar las APIs de Streams y de Connect. Estas le permitirán no solo producir o consumir mensajes, sino que también, realizar operaciones más avanzadas, como transformar la información, unir múltiples streams e integrar Kafka con otros sistemas de datos.

Para finalizar, nos gustaría concluir este blog mostrando algunos de los resultados que obtuvimos en un ambiente de desarrollo:

  • En el lado del servidor de Kafka, el consumo de recursos es mínimo puesto que Kafka ha sido diseñada para utilizarlos cuidadosamente y de este modo optimizar el procesamiento de datos.
  • Kafka está en la capacidad de procesar millones de datos en poco tiempo gracias a la baja latencia que nos asegura que los nodos se comuniquen fácilmente.

En las siguientes imágenes se puede observar el consumo de recursos antes y durante el procesamiento de datos en el lado del servidor, lo que le ayudará a hacerse a una idea general de lo mencionado previamente.

 

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *