Skip to content

Canalización de datos en tiempo real con Apache Kafka, procesamiento con Spark Streaming y storage en un bucket de Amazon S3.

Notifications You must be signed in to change notification settings

Cris-Neumann/Streaming-data-with-Kafka-Spark-and-S3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

28 Commits
 
 
 
 
 
 
 
 

Repository files navigation

Streaming de datos en tiempo real con Apache Kafka, Spark Streaming y Amazon S3

Índice

Resumen del proyecto

Este proyecto de streaming de datos en tiempo real consume información desde la API pública "Open Notify" (http://open-notify.org/), que envía la posición de la estación espacial internacional cada 5 segundos, y dichos datos son transmitidos usando la tecnología de mensajería Apache Kafka (productor de mensajes), cuyos mensajes se pueden monitorear en tiempo real en la WEB UI Kafdrop (http://localhost:9000/), para posteriormente canalizarlos hacia Spark Streaming (consumidor de mensajes) para ser procesados, cambiando la estructura de los archivos json anidados de origen, y posteriormente almacenados en la nube de AWS, utilizando el servicio Amazon Simple Storage Service (Amazon S3). La implementación de Apache Kafka y Spark Streaming se realizó con la tecnología de contenedores Docker y Docker Compose.

¿Qué es Apache Kafka?

Apache Kafka es una plataforma de procesamiento de flujos de datos distribuida y de código abierto, y se utiliza principalmente para construir pipelines de datos en tiempo real y aplicaciones de streaming de datos, como por ejemplo: monitoreo en tiempo real, análisis de logs, procesamiento de eventos, etc. Documentación oficial: https://kafka.apache.org/documentation/

¿Qué es Spark Streaming?

Apache Spark es una plataforma de computación distribuida de código abierto diseñada para procesar grandes volúmenes de datos de manera rápida y eficiente. Spark Streaming es una extensión de Apache Spark que permite el procesamiento de flujos de datos en tiempo real. Está diseñado para procesar datos que llegan de manera continua, como logs de servidores, transacciones financieras, datos de sensores, etc. Documentación oficial: https://spark.apache.org/docs/latest/streaming-programming-guide.html

Arquitectura empleada

El esquema general del modo en que se relacionan las partes del sistema es el siguiente:

streaming_data_kafka_spark_S3

Instalaciones adicionales

Se necesitan básicamente 4 instalaciones previas para ejecutar este streaming de datos:

  1. Instalación de Docker y Docker Compose en servidor a utilizar.
  2. Crear un tópico en la WEB UI Kafdrop (o en la terminal) llamado 'project_topic', el cual funciona como intermediario de mensajes entre la API y Spark.
  3. En Amazon S3 se debe crear un bucket llamado 'streaming-bucket-1', que cuente con una carpeta en su interior llamada 'parquet_files' y otra 'checkpoints', para los archivos parquet generados en el streaming y los checkpoints de respaldo en S3, respectivamente. Además, se debe poseer una access key id de AWS y una secret access key de AWS, para poder ingresar a la nube de Amazon Web Services. Puede instalar una versión de prueba de AWS: https://aws.amazon.com/es/free/start-your-free-trial/
  4. Al activar el productor de datos (Kafka), el consumidor (Spark) debe ejecutarse con el siguiente script:
     spark-submit\
      --master spark://spark-master:7077\
      --packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.5.0,org.apache.hadoop:hadoop-aws:3.3.1\
      --conf spark.hadoop.fs.s3a.impl=org.apache.hadoop.fs.s3a.S3AFileSystem\
      --conf spark.hadoop.fs.s3a.access.key=YOUR_ACCESS_KEY_ID\
      --conf spark.hadoop.fs.s3a.secret.key=YOUR_SECRET_ACCESS_KEY\
      /opt/spark_scripts/spark_consumer.py

About

Canalización de datos en tiempo real con Apache Kafka, procesamiento con Spark Streaming y storage en un bucket de Amazon S3.

Topics

Resources

Stars

Watchers

Forks

Languages