¿Qué son Apache Kafka y Amazon MSK?
Apache Kafka es una plataforma distribuida de streaming de código abierto, que cuenta principalmente con funciones como publicar y suscribirse a flujos de registros, almacenar los flujos de registros de una manera duradera tolerante a fallos y procesar los flujos de registros a medida que se producen. Kafka es utilizado principalmente en dos tipos de aplicaciones, para construir buses de datos en tiempo real que permiten obtener datos de manera fiable entre sistemas o aplicaciones y para construir aplicaciones de streaming en tiempo real que transformen o reaccionen a los flujos de datos.
Amazon MSK es un servicio gestionado por AWS en el que se ofrece Apache Kafka. Mediante este servicio, AWS te proporciona un entorno robusto y en alta disponibilidad por lo que no te tienes que preocupar de construirlo. La arquitectura que despliega internamente es la siguiente:
¿Cuáles son las ventajas e inconvenientes de utilizar Amazon MSK?
Respecto a la principal motivación para implantar Amazon MSK destaca su resiliencia a las ingestas de datos y su integración con otras herramientas para continuar con el flujo de los datos. En el momento en el que se crea el cluster, es posible elegir el tipo y número de máquinas que van a formarlo, el tamaño del espacio de almacenamiento, definir qué VPC, subnets y security group se van a utilizar, e incluso establecer parámetros de configuración propios de Kafka, entre otras opciones. Esto otorga flexibilidad de cara al usuario para adecuar la infraestructura a sus requisitos, adicionalmente se pueden indicar medidas de seguridad como el encriptado de los datos o autenticación TLS para los clientes.
Para monitorizar el cluster, existen tres opciones mediante CloudWatch, una opción con información básica (CPU, Memoria, Espacio en disco, Número de tópicos… etc) y otras dos con sobrecoste que reportan más información a nivel de brokers y tópicos respectivamente. Existe otra posibilidad y es con Prometheus, un sistema de monitorización de código abierto para datos métricos de series temporales o bien utilizar otras herramientas compatibles con el formato de métricas de Prometheus.
Cabe destacar que es posible utilizar AWS CLI o boto3 como en la mayoría de servicios de AWS a través de los cuales podemos realizar diferentes operaciones para la gestión del cluster, lo que nos permite realizar cualquier acción fuera de la consola web.
En cuanto a posibles inconvenientes, aunque se crean instancias EC2, son transparentes de cara al usuario y no se tiene acceso sobre ellas mediante SSH, Session Manager o similares, de manera que no es posible realizar la instalación de plugins. Otro inconveniente es que no desescala, cuando se amplía el espacio en disco o el número de nodos, los va a utilizar completos de forma que luego no puedes redimensionar hacia abajo. Aunque el número de nodos sí puede ser ampliado, el tipo de máquina y la VPC definidos en la creación del cluster, no se pueden cambiar una vez creado por lo que es importante establecer un setup inicial apropiado.
Sería interesante poder gestionar los tópicos en la consola web, para poder establecer configuraciones sobre ellos, aunque podemos recurrir a herramientas de terceros e integrarlas con MSK ya que la conectividad es directa, pudiendo probar nuestro código desde Cloud9 o una instancia con el networking apropiado.
Conclusiones
Podemos finalizar diciendo que es una solución óptima, ya que aunque proporcionalmente es más cara que desplegarla en instancias EC2 de esas mismas características, el esfuerzo de dicha opción sería claramente mayor, frente al beneficio de la alta disponibilidad y un dimensionamiento acorde a los usos más exigentes.
La instalación gestionada y funcionando en 30 minutos con unas cuantas líneas de Cloudformation es muy potente, con sus ventajas ipso facto y sin tener que instalar ni preocuparse de muchas dependencias externas.
Imagen: Unplash | @sumo
Deja tu comentario