← Portfolio

Real-time flights over the Netherlands: Spark Structured Streaming and the ClickHouse Kafka engine

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.

KafkaClickHouse Kafka engineSpark Structured StreamingDelta LakeKubernetesApache SupersetServer-Sent Events

Nederland live: vluchten en landingen

In eindnadering nu

–
< 3000 ft, dalend, < 15 NM van een vliegveld

Landingen vandaag

–
alle Nederlandse vliegvelden

Laatste landingen

landed_at_localairport_namecallsigntyperegistration

Alle vliegtuigen boven NL

flightaircraft_typealtitude_ftspeed_kt vertical_rate_fpmnearest_airport_nameairport_dist_nm

Replica of the Superset dashboard. All panels read ClickHouse live: the graph and map every second, the other charts every 2 seconds. Data: adsb.fi community ADS-B network.