A small poller fetches the ADS-B positions of every aircraft within 150 NM of Utrecht from adsb.fi every 2 seconds and publishes them to Kafka, about 100 messages per second. ClickHouse consumes that topic directly with its Kafka table engine and a materialized view, so new positions can be queried within about 2 seconds. In parallel, a Spark Structured Streaming job on Kubernetes reads the same topic into bronze and silver Delta tables and detects landings at 17 Dutch airfields with a stream-stream join, watermarks and idempotent foreachBatch writes. The landings are written back to ClickHouse, so the report below combines both streaming paths. The original report runs in Apache Superset; this public copy reads ClickHouse every 2 seconds, and the graph and map are custom Server-Sent Events visuals (smoothie.js, Leaflet) that move every second.