4. Ingesta de datos en AWS
● Real Time - Acciones inmediatas
○ Kinesis Data Streams (KDS)
○ Simple Queue Service (SQS)
○ Internet of Things (IoT)
● Near-real Time - Acciones Reactivas
○ Kinesis Data Firehose (KDF)
○ Database Migration Service (DMS)
● Batch - Análisis histórico
○ Snowball
○ Data Pipeline
5. Kinesis
● Alternativa a Apache Kafka (“Real-time” Big Data)
● Logs, métricas, IoT, clickstreams
● Integra con framework de procesamiento de
streaming de datos (Spark, NiFi, etc..)
● Data es automáticamente replicada
sincrónicamente hasta 3AZ
Amazon Kinesis
10. KDS
● Streams están divididos particiones
● La retención de datos va desde 24 horas hasta 7 días
● Habilidad de reprocesar la data
● Múltiples aplicaciones pueden consumir el mismo stream
● Inmutabilidad
14. KDF
● Near Real Time (latencia approx 60 s)
● Carga información en Redshift, S3, Elasticsearch, HTTP Endpoint o
proveedores de terceros
● DataDog, MondoDB Cloud, New Relic, Splunk
● Escalamiento automático
● Conversion de datos de JSON a Parquet / ORC (solo para S3)
● Transformaciones de formato usando lambda (csv => json)
● Compresiones GZIP, ZIP y SNAPPY (solo para S3)
○ GZIP para Redshift
● Spark y KCL no pueden leer de KDF, solo de KDS
A layer in your big data architecture designed to do one thing: ingest data via Batch or Streaming: Moving data from point A to point B from source data to the next layer in the architecture. (decoupled)
ETL
Eventos
Streams (Cola de mensajería) bus de datos
Real Time: Donde podemos ejecutar acciones inmediatas… Todas estas herramientas te permiten actuar de forma inmediata a la data que viene en tiempo real
Near: acciones reactivas en lugar de inmediatas
Batch: Esto normalmente usado cuando quieres mover grandes cantidades de datos en AWS para hacer análisis
Es una alternativa para Kafka que básicamente te permite recolectar data en tiempo real
Se utiliza para recolectar logs, metricas, IoT e información de clickstream
Se integra muy buen con herramienta de procesamiento de streaming de datos
AWS tiene el concepto de una Región, que es una ubicación física en todo el mundo donde agrupamos varios data centers. Llamamos a cada grupo de centros de datos lógicos una zona de disponibilidad(AZ) . Actualmente hay 69 AZ
Kinesis está compuesto de varios servicios
Kinesis Data Streams: Ingesta de baja latencia y gran a escala.
Kinesis Firehose: Cargar flujo de datos a S3, Redshift, ElasticSearch y Splunk
Kinesis Analytics: Realiza análisis en tiempo real sobre los streams usando SQL
Video: transmisión segura de videos desde dispositivos conectados a AWS para tareas de análisis, aprendizaje automático (ML), reproducción y otros procesos.
La data se recolecta, se ingesta en kinesis stream
realiza análisis la data para calcular métricas o disparar alertas y luego la almacenan para análisis posterior o creación de dashboards para se usa firehose,
recordemos que firehose es near- real time veremos que se trata más adelante. Finalmente firehose puede entregar la data a S3 y Redshift.
Esta es la arquitectura y ahora vamos are visar KDS y KDF
Cada stream está compuesto de varias particiones
Ejemplo: Tenemos los productores que enviaran el streaming de datos in Kinesis donde ese stream está compuesto de 3 particiones, los consumidores también van a leer de estas particiones.
Los registros no están ordenados globalmente sino por partición, es decir los registros estrán ordenados conforme van llegando
Por defecto kinesis stream no almacena tu data por tiempo ilimitado, tiene una retención de 24 horas por defecto hasta 7 días
Tiene la habilidad de reprocesamiento, esto quiere decir que, una vez que consumes la data no es que se desaparece de kinesis, se eliminirá de acuerdo a la configuración de la retención de datos.
Ademas se puede leer la data cuantas veces se requiera mientras permanezca en Kinesis es decir que múltiples aplicaciones pueden leer el mismo stream
Kinesis streams no es una BDD, es decir que una vez que la data es ingresada, esta no puede ser borrada. (Inmutabilidad)
Ahora necesitamos saber cómo podemos producir o enviar data a kinesis
Es importante mencionar que los productores pueden enviar la data a 1MB/s o 1000 regfstros/s POR PARTICIÓN
SDK
La primera forma es usar el SDK. Con el SDK ustedes pueden escribir código o usar el CLI para enviar directamente data a kinesis stream usando llamadas API (putRecords()).
Un uso que se le dan es en aplicaciones móviles en Andoid o IOS
Casos en los que se usa cuando tengas una baja tasa de transferencia de datos o no nos importa tener una alta latencia
Cuando se excede ya sea la tasa de transferencia el numero de registros por segundo (hot parttion) => cuando la mayor parte de la información se va a una sola parotición (partition key important)
Reintentos con back off (tiempo exponencial) 1se, 2min, 4 min 8
Incrementar el numero de particiones
Escoger una buena cla de partición (mayor cardinalidad) mejor id de dispositivo que un tipo de SO
KPL
La segunda es usar Kinesis Producer library, es una libreria mas avanzada para usar en tu código y enviar data a kinesis
Se usapara tener productores de alto rendimiento y que corren por cortos periodo de tiempo
El emcanismo de reintento es automatic conparado con SDK
Agent
La tercera es Kinesis Agent que es un programa de linux que corre en los servidores que monitorear logs y enviarlos a Kinesis Data Streams
Es basado en java y construido sobre KPL
Y por ultimos puedes usar librerías de terceros que están construidos sobre el SDK, Spark, Kafka Connect, Nifi , etc
Ahora vamos a ver como podemos consumir la data
Los consumidores que se les denomina clásicos pueden consumr
Consumidor Clásico
Lectura de 2 MB/s POR PARTICIÓN para todos los consumidores
5 llamadas a API por segundo POR PARTICIÓN para todos los consumidores
Enhanced
2 MB/s al momento de leer POR PARTICIÓN por consumidor
No tiene un modelo de llamadas API (push model)
SDK
Al igual que el SDK de los productores, Podemos leer la data desde kinesis usando llamandas API (getRecords())
KCL
Lo que producimos con Kinesis Producer Library tenemos que leerla con Kinesis Consumer Library
Soporta varios lenguajes (java, Python, go, dotnet, etc)
Caracteristica de checkpoint: Si alguno de los consumidores se cae y regresa después de un tiempo, tiene la capacidad de recordar donde se quedó la lectura usando una tabla en DynamoDB para coordinar
Librerias de terceros
Spark, o Firehose, Lambda
Kinesis streams es en tiempo real mientras que firehose es casi real time
Latencia minima de 60 segundos por cada batch
Carga info a ..
Ejemplo de lagunas fuentes que puede alimentar KDF
KDF puede hacer transformaciones usando una función lambda
Firehose acumula los registros en un buffer
Buffer se vacía en base a reglas de tamaño y tiempo
Ejemplo
Buffer size 32 MB (alta tasa de transferencia)
Buffer time: 2 minutos (baja tasa de transferencia)
Si se tiene una alta tase de transferencia, la regla del tamaño de buffer es la que se va a cumplir primero
MKS
Alternativa a Kinesis
Permite crear, actualizar, eliminar clusters de Kafka (control plane)
MSK crea y administra brokers y zookeeper
SQS
Colas de mensajes completamente administradas para microservicios, sistemas distribuidos y aplicaciones sin servidor
En sqs que es una cola, existen productores que envian mensajes a al cola y los consumedores extraen la data de la cola
un mensaje no puede ser procesado por multiples consumidores esa es una diferencia con kinesis
Desacoplamiento de aplicaciones
DMS
Algunas veces queremos migrar nuestra bdd que esta on premise o en la nube hacia AWS es aqui donde entra DMS
La base de datos permanece activa durante la migración
Soporta migraciones homogeneas y heterogeneas: Homogenea: de Oracle a Oracle, Heterogenea: De Microsoft SQL Server a Aurora
Para hacer la migracion usa por debajo SCT AWS Schema Conversion Tool (SCT)
Convierte el esquema de la BDD al del destino
Replicación de datos continua (CDC) Change data Capture
Necesario tener una instancia EC2 para ejecutar la tarea de replicación de DMS
Direct Connect
Provee una conexión privada dedicada desde una red remota hasta tu VPC
Tasa de transferencia 1 a 10 GB/s
Casos de uso
Transferencia grandes datasets (conexión dedicada) bajo costo
Ambientes híbridos
Seguridad mejorada
Snowball
Migrar físicamente terabytes o petabytes dentro y fuera de AWS (Caja)
Casos de uso
Migraciones a la nube
Comisión de un data center
Recuperación de desastres
Snowball Edge: Agrega capacidad de procesamiento al dispositivo
SnowMobile
Transferir exabytes de información (Camion)
Cada snowmobile tiene 100 PB de capacidad (varios en paralelo)
> 10 PB usar snowmobile en lugar de snowball
NUeva característica que apareció en Agosto 2018
Funcionará si usamos KCL 2.0 y AWS lambda despues de Nov 2018
Cada consumidor tiene 2 MB/s de tasa de transferencia por partición. Que significa esto cada consumidor se subscribe (llamada API) a una particion y este envia la data es un mecanismo de pushing (via http2) mas no de pulling
Antes teniamos un limite de 2 MB/s por partición, ahora es por partición y por consumidor
Con esto podemos scalar mas facilmente y reducimos la latencia (alrededor 70 ms) < 200ms que el anterior