El procesamiento de big data es uno de los procedimientos más complejos a los que se enfrentan las organizaciones. El proceso se complica cuando se dispone de un gran volumen de datos en tiempo real.

En este post, descubriremos qué es el procesamiento de big data, cómo se realiza y exploraremos Apache Kafka y Spark, ¡las dos herramientas de procesamiento de datos más famosas!

¿Qué es el procesamiento de datos? ¿Cómo se realiza?

El procesamiento de datos se define como cualquier operación o conjunto de operaciones, realizadas o no mediante un proceso automatizado. Puede considerarse como la recopilación, ordenación y organización de la información de acuerdo con una disposición lógica y adecuada para su interpretación.

data-processing

Cuando un usuario accede a una base de datos y obtiene resultados para su búsqueda, es el procesamiento de datos el que le está proporcionando los resultados que necesita. La información extraída como resultado de una búsqueda es el resultado del procesamiento de datos. Por eso la tecnología de la información tiene el foco de su existencia centrado en el procesamiento de datos.

El procesamiento de datos tradicional se llevaba a cabo mediante programas informáticos sencillos. Sin embargo, con la aparición de los Big Data, las cosas han cambiado. Big Data se refiere a la información cuyo volumen puede superar los cien terabytes y petabytes.

Además, esta información se actualiza con regularidad. Algunos ejemplos son los datos procedentes de centros de contacto, medios sociales, datos de operaciones bursátiles, etc. A veces, estos datos también se denominan flujo de datos, es decir, un flujo constante e incontrolado de datos. Su principal característica es que los datos no tienen límites definidos, por lo que es imposible decir cuándo empieza o termina el flujo.

Los datos se procesan a medida que llegan a su destino. Algunos autores lo denominan procesamiento en tiempo real o en línea. Un enfoque diferente es el procesamiento en bloque, por lotes o fuera de línea, en el que los bloques de datos se procesan en ventanas temporales de horas o días. A menudo, el lote es un proceso que se ejecuta por la noche, consolidando los datos de ese día. Se dan casos de ventanas temporales de una semana o incluso un mes que generan informes obsoletos.

Dado que las mejores plataformas de procesamiento de Big Data vía streaming son de código abierto, como Kafka y Spark, estas plataformas permiten el uso de otras diferentes y complementarias. Esto significa que, al ser de código abierto, evolucionan más rápido y utilizan más herramientas. De este modo, se reciben flujos de datos de otros lugares a un ritmo variable y sin interrupciones.

A continuación, examinaremos dos de las herramientas de procesamiento de datos más conocidas y las compararemos:

Apache Kafka

ApacheKafka es un sistema de mensajería que crea aplicaciones de flujo continuo de datos. Creado originalmente por LinkedIn, Kafka se basa en registros; un registro es una forma básica de almacenamiento porque cada nueva información se añade al final del archivo.

Kafka es una de las mejores soluciones para big data porque su principal característica es su alto rendimiento. Con Apache Kafka, es posible incluso transformar el procesamiento por lotes en tiempo real,

Apache Kafka es un sistema de mensajería publicar-suscribir en el que una aplicación publica y una aplicación que se suscribe recibe mensajes. El tiempo entre la publicación y la recepción del mensaje puede ser de milisegundos, por lo que una solución Kafka tiene una baja latencia.

Funcionamiento de Kafka

La arquitectura de Apache Kafka comprende productores, consumidores y el propio clúster. El productor es cualquier aplicación que publica mensajes en el clúster. El consumidor es cualquier aplicación que recibe mensajes de Kafka. El clúster de Kafka es un conjunto de nodos que funcionan como una única instancia del servicio de mensajería.

kafka-apis
Funcionamiento de Kafka

Un clúster Kafka está formado por varios brokers. Un broker es un servidor Kafka que recibe mensajes de los productores y los escribe en el disco. Cada corredor gestiona una lista de temas, y cada tema se divide en varias particiones.

Tras recibir los mensajes, el corredor los envía a los consumidores registrados para cada tema.

La configuración de Apache Kafka es gestionada por Apache Zookeeper, que almacena metadatos del cluster como la ubicación de las particiones, la lista de nombres, la lista de temas y los nodos disponibles. Así, Zookeeper mantiene la sincronización entre los distintos elementos del cluster.

Zookeeper es importante porque Kafka es un sistema distribuido; es decir, la escritura y la lectura las realizan varios clientes simultáneamente. Cuando se produce un fallo, el Zookeeper elige un sustituto y recupera la operación.

Casos de uso

Kafka se hizo popular sobre todo por su uso como herramienta de mensajería, pero su versatilidad va más allá y puede utilizarse en una gran variedad de escenarios, como en los ejemplos siguientes.

Mensajería

Forma asíncrona de comunicación que desacopla las partes que se comunican. En este modelo, una parte envía los datos como un mensaje a Kafka, para que otra aplicación los consuma posteriormente.

Seguimiento de actividades

Permite almacenar y procesar datos de seguimiento de la interacción de un usuario con un sitio web, como páginas vistas, clics, entrada de datos, etc.; este tipo de actividad suele generar un gran volumen de datos.

Métricas

Consiste en agregar datos y estadísticas de múltiples fuentes para generar un informe centralizado.

Agregación de registros

Agrega y almacena de forma centralizada archivos de registro procedentes de otros sistemas.

Procesamiento de flujos

El procesamiento de flujos de datos consta de múltiples etapas, en las que los datos en bruto se consumen a partir de temas y se agregan, enriquecen o transforman en otros temas.

Para dar soporte a estas funciones, la plataforma proporciona esencialmente tres API:

  • API de flujos: Actúa como un procesador de flujos que consume datos de un tema, los transforma y los escribe en otro.
  • API de conectores: Permite conectar temas a sistemas existentes, como bases de datos relacionales.
  • API de productor y consumidor: Permite a las aplicaciones publicar y consumir datos de Kafka.

Pros

Replicados, particionados y ordenados

Los mensajes en Kafka se replican a través de particiones en los nodos del clúster en el orden en que llegan para garantizar la seguridad y la velocidad de entrega.

Transformación de datos

Con Apache Kafka, es posible incluso transformar el procesamiento por lotes en tiempo real mediante la API de flujos ETL por lotes.

Acceso secuencial al disco

Apache Kafka persiste el mensaje en disco y no en memoria, ya que se supone que es más rápido. De hecho, el acceso en memoria es más rápido en la mayoría de las situaciones, especialmente si se considera el acceso a datos que se encuentran en ubicaciones aleatorias de la memoria. Sin embargo, Kafka realiza accesos secuenciales y, en este caso, el disco es más eficiente.

Apache Spark

Apache Spark es un motor de computación de big data y un conjunto de bibliotecas para procesar datos en paralelo a través de clusters. Spark es una evolución de Hadoop y del paradigma de programación Map-Reduce. Puede ser 100 veces más rápido gracias a su uso eficiente de la memoria que no persiste los datos en los discos mientras se procesan.

image-17

Spark está organizado en tres niveles:

  • API de bajo nivel: Este nivel contiene la funcionalidad básica para ejecutar trabajos y otras funciones requeridas por los demás componentes. Otras funciones importantes de este nivel son la gestión de la seguridad, la red, la programación y el acceso lógico a los sistemas de archivos HDFS, GlusterFS, Amazon S3 y otros.
  • API estructuradas: El nivel de API estructuradas se ocupa de la manipulación de datos a través de DataSets o DataFrames, que pueden leerse en formatos como Hive, Parquet, JSON y otros. Utilizando SparkSQL (API que nos permite escribir consultas en SQL), podemos manipular los datos como queramos.
  • Alto nivel: En el nivel más alto, tenemos el ecosistema Spark con varias librerías, incluyendo Spark Streaming, Spark MLlib y Spark GraphX. Éstas se encargan de la ingesta de streaming y de los procesos que la rodean, como la recuperación de fallos, la creación y validación de modelos clásicos de aprendizaje automático y el manejo de gráficos y algoritmos.

Funcionamiento de Spark

La arquitectura de una aplicación Spark consta de tres partes principales:

Programa controlador: Se encarga de orquestar la ejecución del procesamiento de datos.

Gestor de clústeres: Es el componente responsable de gestionar las diferentes máquinas de un cluster. Sólo es necesario si Spark se ejecuta de forma distribuida.

Nodos Workers: Son las máquinas que realizan las tareas de un programa. Si Spark se ejecuta localmente en su máquina, desempeñará un papel de Programa Controlador y de Workes. Esta forma de ejecutar Spark se denomina Standalone.

cluster-overview
Visión general del clúster

El código de Spark puede escribirse en varios lenguajes diferentes. La consola de Spark, denominada Spark Shell, es interactiva para aprender y explorar datos.

La llamada aplicación Spark consta de uno o más Jobs, lo que permite el soporte del procesamiento de datos a gran escala.

Cuando hablamos de ejecución, Spark tiene dos modos:

  • Cliente: El controlador se ejecuta directamente en el cliente, que no pasa por el gestor de recursos.
  • Cluster: El controlador se ejecuta en el Maestro de Aplicaciones a través del Gestor de Recursos (En el modo Cluster, si el cliente se desconecta, la aplicación seguirá ejecutándose).

Es necesario utilizar Spark correctamente para que los servicios vinculados, como el Gestor de Recursos, puedan identificar la necesidad de cada ejecución, proporcionando el mejor rendimiento. Por tanto, corresponde al desarrollador conocer la mejor forma de ejecutar sus trabajos Spark, estructurando la llamada realizada, y para ello, puede estructurar y configurar los ejecutores Spark de la forma que desee.

Los trabajos Spark utilizan principalmente memoria, por lo que es habitual ajustar los valores de configuración de Spark para los ejecutores de los nodos de trabajo. En función de la carga de trabajo Spark, es posible determinar que una determinada configuración Spark no estándar proporciona ejecuciones más óptimas. Para ello, se pueden realizar pruebas de comparación entre las distintas opciones de configuración disponibles y la propia configuración Spark por defecto.

Casos de uso

Apache Spark ayuda a procesar enormes cantidades de datos, ya sean en tiempo real o archivados, estructurados o no estructurados. A continuación se describen algunos de sus casos de uso más populares.

Enriquecimiento de datos

A menudo las empresas utilizan una combinación de datos históricos de clientes con datos de comportamiento en tiempo real. Spark puede ayudar a construir una canalización ETL continua para convertir los datos de eventos no estructurados en datos estructurados.

Detección de eventos

Spark Streaming permite detectar y responder rápidamente a algún comportamiento raro o sospechoso que podría indicar un problema potencial o un fraude.

Análisis de datos de sesiones complejas

Utilizando Spark Streaming, los eventos relacionados con la sesión del usuario, como sus actividades tras iniciar sesión en la aplicación, pueden agruparse y analizarse. Esta información también puede utilizarse continuamente para actualizar los modelos de aprendizaje automático.

Pros

Procesamiento iterativo

Si la tarea consiste en procesar datos repetidamente, los conjuntos de datos distribuidos resistentes (RDD) de Spark permiten realizar múltiples operaciones de mapeo en memoria sin tener que escribir los resultados intermedios en el disco.

Procesamiento gráfico

El modelo computacional de Spark con la API GraphX es excelente para los cálculos iterativos típicos del procesamiento gráfico.

Aprendizaje automático

Spark cuenta con MLlib, una biblioteca integrada de aprendizaje automático que dispone de algoritmos ya preparados que también se ejecutan en memoria.

Kafka frente a Spark

Aunque el interés de la gente tanto por Kafka como por Spark ha sido casi similar, existen algunas diferencias importantes entre ambos; echemos un vistazo.

#1. Procesamiento de datos

data-processing-1

Kafka es una herramienta de transmisión y almacenamiento de datos en tiempo real responsable de la transferencia de datos entre aplicaciones, pero no es suficiente para construir una solución completa. Por lo tanto, se necesitan otras herramientas para tareas que Kafka no realiza, como Spark. Spark, por su parte, es una plataforma de procesamiento de datos por lotes que extrae datos de los temas de Kafka y los transforma en esquemas combinados.

#2. Gestión de la memoria

memory-management

Spark utiliza Robust Distributed Datasets (RDD) para la gestión de la memoria. En lugar de tratar de procesar enormes conjuntos de datos, los distribuye entre varios nodos de un clúster. Por el contrario, Kafka utiliza un acceso secuencial similar al de HDFS y almacena los datos en una memoria intermedia.

#3. Transformación ETL

Tanto Spark como Kafka soportan el proceso de transformación ETL, que copia registros de una base de datos a otra, normalmente de una base transaccional (OLTP) a una base analítica (OLAP). Sin embargo, a diferencia de Spark, que viene con una capacidad incorporada para el proceso ETL, Kafka depende de la API Streams para soportarlo.

#4. Persistencia de datos

data-in-multiple-locations

El uso de RRD por parte de Spark le permite almacenar los datos en múltiples ubicaciones para su uso posterior, mientras que en Kafka, tiene que definir objetos de conjunto de datos en la configuración para persistir los datos.

#5. Dificultad

Spark es una solución completa y más fácil de aprender gracias a su compatibilidad con varios lenguajes de programación de alto nivel. Kafka depende de diversas API y módulos de terceros, lo que puede dificultar el trabajo con él.

#6. Recuperación

Tanto Spark como Kafka ofrecen opciones de recuperación. Spark utiliza RRD, lo que le permite guardar los datos continuamente y, si se produce un fallo en el clúster, se pueden recuperar.

data-recovery

Kafka replica continuamente los datos dentro del clúster y los replica entre brokers, lo que le permite pasar a los distintos brokers si se produce un fallo.

Similitudes entre Spark y Kafka

Apache SparkApache Kafka
Fuente abiertaOpenSource
Construir una aplicación de streaming de datosCree una aplicación de flujo de datos
Compatible con procesamiento con seguimiento de estadoAdmite el procesamiento por estados
Compatible con SQLAdmite SQL
Similitudes entre Spark y Kafka

Palabras finales

Kafka y Spark son herramientas de código abierto escritas en Scala y Java, que le permiten crear aplicaciones de flujo de datos en tiempo real. Tienen varias cosas en común, como el procesamiento con estado, la compatibilidad con SQL y ETL. Kafka y Spark también pueden utilizarse como herramientas complementarias para ayudar a resolver el problema de la complejidad de la transferencia de datos entre aplicaciones.