Problem
Market-data prototypes need to handle bursty streams, windowed computation, stale prices, and alert paths without pretending latency is free.
What I built
I built a streaming path from exchange WebSockets into Kafka, Flink tumbling windows, an alerter, and monitoring surfaces.
Architecture / system design
The architecture separates ingestion, durable stream transport, stream processing, alerting, and observability so each failure mode has a place to surface.
Failure modes / what broke
The likely breaks are stale data, exchange disconnects, duplicate events, and windows that report opportunities too late to be meaningful.
Proof / metrics / tests
The original section is kept as a prototype case study; it does not claim production trading performance.
Lessons learned
Streaming systems are state systems. The hard part is less the formula and more the freshness, ordering, and observability around it.