Skip to content

Latest commit

Β 

History

6 Commits

Folders and files

NameName
Last commit message
Last commit date
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

⚑ StreamForge

Real-Time Distributed Data Processing Platform

StreamForge Banner

Scala Java Kotlin Flutter Docker

Mini Spark + Flink + Firebase β€” Built for Production Scale

Features β€’ Architecture β€’ Quick Start β€’ Dashboard β€’ API β€’ Documentation


divider

🎯 What is StreamForge?

StreamForge is a production-ready, fault-tolerant distributed data processing platform that handles high-volume event streams with:

πŸš€ Real-Time Processing

  • 10K+ events/second throughput
  • Sub-20ms processing latency
  • Windowed aggregations
  • Stateful computations

πŸ›‘οΈ Fault Tolerance

  • Exactly-once semantics
  • Automatic checkpointing
  • Instant recovery (<2s)
  • Zero data loss guarantee

✨ Features

πŸ“Š Custom DSL

stream("events")
  .filter(_.type == "click")
  .window(sliding(5.min))
  .aggregate(sum("value"))
  .sink("dashboard")

⏱️ Windowing

  • Sliding Windows
  • Tumbling Windows
  • Session Windows
  • Count Windows

πŸ”„ Operators

  • Map / Filter
  • Aggregate
  • Join
  • Stateful

πŸ“ˆ Dashboard

  • Real-time charts
  • Cluster health
  • Job management
  • Live metrics

πŸ— Architecture

                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                    β”‚                   DATA SOURCES                          β”‚
                                    β”‚            IoT β€’ Logs β€’ Web Events β€’ APIs               β”‚
                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                              β”‚
                                                              β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                                                                                                         β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚    β”‚                        πŸ”΅ KOTLIN API LAYER (Port 8080)                                        β”‚    β”‚
β”‚    β”‚                                                                                               β”‚    β”‚
β”‚    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚    β”‚
β”‚    β”‚   β”‚  REST API   β”‚    β”‚   gRPC      β”‚    β”‚  WebSocket  β”‚    β”‚  Scheduler  β”‚                    β”‚    β”‚
β”‚    β”‚   β”‚   (Ktor)    β”‚    β”‚  Service    β”‚    β”‚   Metrics   β”‚    β”‚  (Quartz)   β”‚                    β”‚    β”‚
β”‚    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚    β”‚
β”‚    β”‚                              Coroutines β€’ Backpressure β€’ Flow Control                         β”‚    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                              β”‚                                          β”‚
β”‚                                                              β–Ό                                          β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚    β”‚                        πŸ”΄ SCALA PROCESSING ENGINE                                             β”‚    β”‚
β”‚    β”‚                                                                                               β”‚    β”‚
β”‚    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚    β”‚
β”‚    β”‚   β”‚ Custom DSL  │───▢│ Stream Graph│───▢│  Operators  │───▢│  Windowing  β”‚                  β”‚    β”‚
β”‚    β”‚   β”‚   Parser    β”‚    β”‚   Builder   β”‚    β”‚ Map/Filter  β”‚    β”‚  Aggregate  β”‚                    β”‚    β”‚
β”‚    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚    β”‚
β”‚    β”‚                              Akka Streams β€’ Reactive β€’ Backpressure                           β”‚    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                              β”‚                                          β”‚
β”‚                                                              β–Ό                                          β”‚
β”‚    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”‚
β”‚    β”‚                        🟒 JAVA INFRASTRUCTURE LAYER                                           β”‚    β”‚
β”‚    β”‚                                                                                               β”‚    β”‚
β”‚    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”                    β”‚    β”‚
β”‚    β”‚   β”‚ Checkpoint  β”‚    β”‚   State     β”‚    β”‚  Cluster    β”‚    β”‚  Recovery   β”‚                    β”‚    β”‚
β”‚    β”‚   β”‚  Manager    β”‚    β”‚   Store     β”‚    β”‚ Coordinator β”‚    β”‚  Manager    β”‚                    β”‚    β”‚
β”‚    β”‚   β”‚ (RocksDB)   β”‚    β”‚ (RocksDB)   β”‚    β”‚ (ZooKeeper) β”‚    β”‚  (Health)   β”‚                    β”‚    β”‚
β”‚    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜                    β”‚    β”‚
β”‚    β”‚                          Exactly-Once β€’ Fault Tolerance β€’ High Availability                   β”‚    β”‚
β”‚    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜    β”‚
β”‚                                                                                                         β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                                                              β”‚
                                                              β–Ό
                                    β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
                                    β”‚                   🟑 FLUTTER DASHBOARD                  β”‚
                                    β”‚                      (Port 3000)                        β”‚
                                    β”‚                                                         β”‚
                                    β”‚   β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”     β”‚
                                    β”‚   β”‚   Cluster   β”‚  β”‚     Job     β”‚  β”‚     Job     β”‚     β”‚
                                    β”‚   β”‚   Health    β”‚  β”‚   Metrics   β”‚  β”‚  Management β”‚     β”‚
                                    β”‚   β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜     β”‚
                                    β”‚                                                         β”‚
                                    β”‚          Real-Time Charts β€’ WebSocket β€’ Material 3      β”‚
                                    β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

🎨 Dashboard Preview

πŸ“Š Cluster Health

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  🟒 Active Nodes: 3        β”‚
β”‚  πŸ“Š Running Jobs: 5        β”‚
β”‚  ⚑ Events/sec: 1,250      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  CPU Usage                 β”‚
β”‚  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘β–‘β–‘ 65%     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Memory Usage              β”‚
β”‚  β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–‘β–‘β–‘ 72%     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Throughput (events/s)     β”‚
β”‚  πŸ“ˆ β–β–‚β–„β–†β–ˆβ–‡β–…β–†β–‡β–ˆβ–†β–‡β–ˆβ–…β–†      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸ“ˆ Job Metrics

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  Click Stream Analysis     β”‚
β”‚  ● RUNNING                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Events: 125,000           β”‚
β”‚  Rate: 850/s               β”‚
β”‚  Latency: 12ms             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Throughput                β”‚
β”‚  πŸ“ˆ β–‚β–ƒβ–…β–†β–‡β–ˆβ–‡β–†β–‡β–ˆβ–‡β–…β–†β–ˆ         
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  Latency (ms)              β”‚
β”‚  πŸ“‰ ▅▄▃▂▁▂▃▂▁▂▃    β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

βš™οΈ Job Management

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚  [+ New Job]               β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  ● Click Analysis          β”‚
β”‚    STREAMING β”‚ 2h ago      β”‚
β”‚    [Pause] [Details]       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  ● User Activity           β”‚
β”‚    STREAMING β”‚ 1h ago      β”‚
β”‚    [Pause] [Details]       β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β—‹ Transaction Monitor     β”‚
β”‚    PAUSED β”‚ 30m ago        β”‚
β”‚    [Resume] [Cancel]       β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

πŸš€ Getting Started (Zero to Hero Guide)

StreamForge consists of a Kotlin/Scala/Java Backend and a Cross-Platform Flutter Dashboard. You can run the dashboard completely standalone (using its Mock Engine) or alongside the real backend.

Prerequisites

  • Flutter 3.0+ β€” Required for the Dashboard App/Website.
  • JDK 17+ β€” Required if running the Kotlin/Scala Backend.
  • Docker β€” Required for running the full cluster easily.

🎨 Running the Dashboard (Frontend Only)

The dashboard has a built-in Stateful Mock Engine. This means you can run it perfectly without ever starting the backendβ€”ideal for testing, design, or showcasing the UI. Because it's built with Flutter, you can run it on any platform from the exact same codebase!

First, navigate to the dashboard directory:

cd dashboard-flutter
flutter pub get

🌐 Option A: Run as a Website (Web App)

To run the dashboard locally in your browser:

flutter run -d web-server --web-port 3000

Then, open http://localhost:3000 in your browser. (Note: On small screens, the UI automatically transforms into a mobile-friendly layout with a bottom navigation bar!)

πŸ“± Option B: Run as a Mobile App (Android/iOS)

To run the dashboard as a native mobile application on your connected smartphone or an emulator:

# To see available devices (Emulators, physical devices)
flutter devices

# Run on Android or iOS
flutter run

πŸ’» Option C: Run as a Desktop App (Windows/macOS/Linux)

To compile it into a high-performance native desktop application:

# Enable desktop support if you haven't already
flutter config --enable-windows-desktop
flutter config --enable-macos-desktop

# Run the app natively
flutter run -d windows  # or -d macos

βš™οΈ Running the Full Stack (Backend + UI)

If you want to run the real Scala processing engine and Kotlin API:

Method 1: Using Docker (Recommended)

# Start all microservices (API, Engine, ZooKeeper, Dashboard)
docker-compose up -d

# API is available at:       http://localhost:8080
# Dashboard is available at: http://localhost:3000

Method 2: Build from Source

Open two separate terminals in the project root:

Terminal 1 (Backend):

# Build all Java/Scala/Kotlin modules
./gradlew build

# Run the API server
./gradlew :api-kotlin:run

Terminal 2 (Dashboard):

cd dashboard-flutter
flutter run -d web-server --web-port 3000

πŸ“‘ API

Submit a Job

curl -X POST http://localhost:8080/api/jobs \
  -H "Content-Type: application/json" \
  -d '{
    "id": "click-analysis",
    "name": "Click Stream Analysis",
    "type": "STREAMING",
    "config": {
      "source": "events",
      "sink": "dashboard",
      "parallelism": 4,
      "checkpointInterval": 60000
    }
  }'

Ingest Events

curl -X POST http://localhost:8080/api/ingest/event \
  -H "Content-Type: application/json" \
  -d '{
    "id": "evt-001",
    "type": "click",
    "timestamp": "2025-12-22T20:00:00Z",
    "source": "web-app",
    "payload": {"page": "/products", "userId": "user-123"}
  }'

Monitor Status

curl http://localhost:8080/api/jobs/click-analysis

🧩 Language Stack


Scala
Processing Engine
DSL β€’ Windowing β€’ Operators

Java
Infrastructure
Checkpoints β€’ State β€’ Recovery

Kotlin
API Layer
REST β€’ WebSocket β€’ Scheduler

Flutter
Dashboard
Charts β€’ Monitoring β€’ Control

πŸ“Š Performance

Metric Value
Throughput 10,000+ events/second per node
Latency < 20ms average processing
Recovery < 2 seconds from checkpoint
Scalability Horizontal scaling with ZooKeeper

πŸ“ Project Structure

streamforge/
β”œβ”€β”€ πŸ“„ README.md, LICENSE, CONTRIBUTING.md, CHANGELOG.md
β”œβ”€β”€ 🐳 docker-compose.yml, Dockerfile.api, Dockerfile.engine
β”‚
β”œβ”€β”€ πŸ”΄ engine-scala/           # Scala Processing Engine
β”‚   └── dsl/, window/, operators/, StreamProcessor, BatchProcessor
β”‚
β”œβ”€β”€ 🟒 infrastructure-java/    # Java Infrastructure
β”‚   └── checkpoint/, state/, cluster/, recovery/
β”‚
β”œβ”€β”€ πŸ”΅ api-kotlin/             # Kotlin API Layer
β”‚   └── Application, JobAPI, IngestionAPI, MetricsAPI, Scheduler
β”‚
β”œβ”€β”€ 🟑 dashboard-flutter/      # Flutter Dashboard
β”‚   └── pages/, services/, Dockerfile, nginx.conf
β”‚
β”œβ”€β”€ πŸ“š docs/                   # Documentation
β”‚   └── ARCHITECTURE.md, API.md, DEPLOYMENT.md
β”‚
└── πŸ“ examples/               # Examples
    └── example_pipeline.scala, sample_job.json

πŸ“š Documentation

Document Description
Architecture System design, data flow, components
API Reference REST endpoints, WebSocket, models
Deployment Docker, Kubernetes, production setup

🌟 Why StreamForge?

βœ… Production Ready Fault-tolerant with exactly-once semantics
βœ… Modern Stack Multi-language architecture optimized for each layer
βœ… Beautiful Dashboard Real-time visualization with Flutter
βœ… Developer Friendly Declarative DSL, comprehensive APIs
βœ… Big-Tech Patterns Implements designs from Spark, Flink, Samza

πŸ“œ License

This project is licensed under the MIT License β€” see LICENSE for details.


Built with πŸ’œ by Tushar πŸ’«

GitHub stars GitHub forks

⬆ Back to Top

About

This is a full-stack, real-time distributed data processing platform designed to ingest, process, store, and visualize high-volume event streams at production scale.

Resources

Contributing

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages