- Arquitectura de Referencia
- Alcance
- Teoria
- Trabajo en Proceso
- Stack Tecnológico
- Arquitectura
- Configuración del Proyecto
- Iniciar Infraestructura Base
- Casos de Uso de Ejemplo Implementados
En este proyecto, se implementa una arquitectura de referencia utilizando un stack de tecnologías robusto y moderno para el procesamiento y evolución de data.
- Los ejemplos para cada uno de los casos de uso pueden correrse en el host sin problemas usando Flink Standalone,
- Los ejemplos para cada uno de los casos de uso pueden correrse como contenedores sin problemas usando Flink CLuster en contenedores,
- Se proporciona una arquitectura base con los componentes mas comunes para un flujo de datos eficiente y escalable,
- Versiones usadas:
- Apache Kafka: Version 3.7.1 (release 28 Junio 2024)
- Apache Flink: Version 1.20.0 (release 02 Agosto 2024)
- Apache Iceberg: Version 1.6.0 (release 23 Julio 2024)
- Apache Iceberg con Minio.
- Apache Flink EOS Sistemas Soportan Semantica Unica por configuracion (Ejemplo: Kafka - Flink - Kafka).
- Apache Flink EOS Sistemas que NO Soportan Semantica Unica por configuracion (Ejemplo: Kafka - REST Externo - Flink - REST Externo).
- Apache Iceberg Query
- Apache Flink Table
- Apache Flink SQL
Las tecnologías usadas en este proyecto incluyen:
- Postgres CDC
- Debezium
- Apache Flink
- Apache Kafka
- Flink Tumbling Processing Time Window
- Flink Count y envío de data hacia Kafka
- Flink Sum y envío de data hacia Kafka
- Apache Iceberg
- Catalogo Iceberg HDFS
- Catalogo Icerber Hive
Estas tecnologías trabajan en conjunto para capturar, procesar, y almacenar cambios en los datos.
En este proyecto se implementa una arquitectura utilizando Apache Kafka, Apache Flink y Apache Iceberg. Estas tecnologías trabajan juntas para asegurar un flujo de datos eficiente y escalable.
$ git clone https://github.com/davisusanibar/data-evolutionary.git
$ cd data-evolutionary/data-cdc-kafka-flink-iceberg
$ mvn spotless:check
$ mvn spotless:apply
...
[INFO] Spotless.Java is keeping 24 files clean - 2 were changed to be clean, 22 were already clean, 0 were skipped because caching determined they were already clean
...
$ cd data-evolutionary/data-cdc-kafka-flink-iceberg
$ mvn clean package
$ ls -1 target/data-cdckafkaflinkiceberg-1.0-SNAPSHOT-shaded.jar
|_ target/data-cdckafkaflinkiceberg-1.0-SNAPSHOT-shaded.jar
Obtener la IP local y registrar los hostname asociados a tu IP.
$ ifconfig | grep "inet " | grep -v 127.0.0.1 ✔ at 12:33:48 AM
inet 192.168.18.5 netmask 0xffffff00 broadcast 192.168.18.255
$ cat /etc/hosts
# Topaya:
192.168.18.5 namenode
192.168.18.5 datanode
192.168.18.5 postgres
192.168.18.5 schema-registry
192.168.18.5 broker
192.168.18.5 registry
192.168.18.5 hive
192.168.18.5 rest
192.168.18.5 warehouse.minio
$ cd infra/dockercompose
$ docker compose up -d
$ docker compose ps
|_ NAME IMAGE COMMAND SERVICE CREATED STATUS PORTS
|_ cdc-postgres postgres:latest "docker-entrypoint.s…" postgres 12 hours ago Up 12 hours 0.0.0.0:5432->5432/tcp
|_ flink-jobmanager flink:1.20.0-scala_2.12-java11 "/docker-entrypoint.…" flink-jobmanager 12 hours ago Up 12 hours 6123/tcp, 0.0.0.0:18081->8081/tcp
|_ flink-taskmanager flink:1.20.0-scala_2.12-java11 "/docker-entrypoint.…" flink-taskmanager 12 hours ago Up 12 hours 6123/tcp, 8081/tcp
|_ hadoo_namenode dockercompose-namenode "/usr/local/bin/dumb…" namenode 12 hours ago Up 12 hours 0.0.0.0:8020->8020/tcp, 0.0.0.0:9870->9870/tcp
|_ hadoop_datanode dockercompose-datanode "/usr/local/bin/dumb…" datanode 12 hours ago Up 12 hours 0.0.0.0:9864->9864/tcp, 0.0.0.0:9866->9866/tcp
|_ hive-metastore apache/hive:4.0.0 "sh -c /entrypoint.sh" hive 12 hours ago Up 12 hours 10000/tcp, 0.0.0.0:9083->9083/tcp, 10002/tcp
|_ iceberg-rest tabulario/iceberg-rest "java -jar iceberg-r…" rest 17 minutes ago Up 17 minutes 0.0.0.0:8181->8181/tcp
|_ kafka apache/kafka:latest "/__cacert_entrypoin…" broker 12 hours ago Up 12 hours 0.0.0.0:9092->9092/tcp
|_ mc minio/mc "/bin/sh -c ' until …" mc 17 minutes ago Up 17 minutes
|_ minio minio/minio "/usr/bin/docker-ent…" minio 17 minutes ago Up 17 minutes 0.0.0.0:9000-9001->9000-9001/tcp
|_ mysql-hive mysql:8.0 "docker-entrypoint.s…" mysql-hive 12 hours ago Up 12 hours 33060/tcp, 0.0.0.0:3308->3306/tcp
|_ schema-registry confluentinc/cp-schema-registry:latest "/etc/confluent/dock…" schema-registry 12 hours ago Up 12 hours 0.0.0.0:8081->8081/tcp
TBD
Ejemplo completo en: JobStreamingCDCKafkaFlink.java
Ejemplo completo en: JobDataStreamToIcebergToHadoopCatalogo.java
Ejemplo completo en: JobStreamingDataStreamToIcebergToHiveCatalogo.java
Ejemplo completo en: JobStreamingDataStreamToIcebergToMinio.java