Real-Time Data Streaming Pipeline
A production-grade end-to-end streaming data pipeline demonstrating modern event-driven architectures and lakehouse ingestion: Pekko Streams → Kafka → Apache Flink → Apache Iceberg / MinIO.
Architecture & Pipeline Stages
The pipeline decouples ingestion, validation, stream transformation, and windowed aggregation across four dedicated processing phases:
- Simulation Producer (Scala 3 & Pekko Streams): Generates high-volume synthetic data files (CSV, JSON, LOG, TXT) with customizable arrival distributions into MinIO raw storage.
- Source Reader (Scala 3 & Pekko Streams): Continuously monitors object storage buckets, translates incoming files into structured
FileEventmessages, publishes them to Kafka (raw-events-topic), and archives processed objects. - Transformer & Validator (Scala 3 & Pekko Streams): Consumes raw events, downloads file contents, extracts cryptographic checksums and metadata, enriches event schemas, and routes valid records to
transformer-topicwhile dispatching anomalies to a Dead Letter Queue (DLQ). - Windowed Aggregator (Java 17 & Apache Flink): Consumes transformed streams and executes 5-minute sliding window aggregations grouped by event type, file type, and processing status.
Data Lake & Storage Layer
- Apache Iceberg REST Catalog: Aggregated window statistics are committed to Apache Iceberg tables in columnar Apache Parquet format, partitioned by
window_start. - MinIO Object Storage: Serves as the S3-compatible data lake backing both raw file ingestion and the Iceberg warehouse.
- Kafka Event Backbone: Multi-partitioned topics (
raw-events-topic,transformer-topic,dead-letter-queue) with consumer group scaling.
Technology Stack
- Stream Ingestion & Transformation: Scala 3, Apache Pekko Streams, Akka/Pekko HTTP
- Stream Processing & Aggregation: Java 17, Apache Flink 2.1
- Messaging & Event Streaming: Apache Kafka 4.1.1, Kafdrop UI
- Table Format & Lakehouse: Apache Iceberg REST Catalog, Apache Parquet
- Storage & Infrastructure: MinIO (S3), Docker Compose, Nix