Kafka, Spark & Airflow Pipeline Design
A practical Kafka, Spark and Airflow data pipeline design guide covering Bronze/Silver/Gold, backfills, checkpoints, schema contracts, and reporting.
When should you use Kafka, Spark, and Airflow together?
Use Kafka for event transport, Spark where incremental or large transformations justify its complexity, and Airflow for scheduling dependent batch tasks. Decide on business freshness and replay requirements first; many small reporting workloads are better served by SQL and simpler scheduling.
1. Begin with a metric and the source that defines it
'Real-time dashboard' is not a sufficient data requirement. Ask who needs the number, how accurate it must be and how stale it may become. An order event stream can contain repeats, cancellations, schema drift and late events, so a reporting metric needs a clear definition of order value, refund treatment and event time.
Implementation checklist
- Name source systems and owners
- Define event-time versus ingest-time behavior
- Agree count and revenue reconciliation rules
2. Design event ingestion for replay
Kafka helps decouple producers and consumers, but a durable topic alone does not guarantee data quality. Consumers need stable keys and checkpoints. A Bronze landing layer preserves inputs so parsing changes or downstream failures can be reprocessed. I use a clearly scoped event model rather than relying on sample JSON that accidentally contains every expected field.
Implementation checklist
- Choose business and event identifiers
- Track offsets and replay windows
- Plan late, malformed and duplicate event handling
3. Transform through explicit quality layers
Silver transformations validate types, normalize fields and apply deduplication rules. Gold exposes analytical entities such as facts and dimensions with documented keys. This layering is useful only when each transition has a defined contract and a route for correcting bad data. Retaining raw events helps explain discrepancies, but retention should consider cost and privacy.
Implementation checklist
- Write schema tests and uniqueness constraints
- Keep transformation logic versioned
- Reconcile row counts at each stage
4. Distinguish continuous ingestion from reporting schedules
Kafka and Spark can ingest continuously while Airflow orchestrates downstream batch updates on a predictable cadence. These are different clocks: new data may exist in Bronze before a Gold report updates. The product should display freshness or avoid implying a live metric. For low-volume workloads, hourly SQL ingestion might be sufficient.
Implementation checklist
- Document data availability per layer
- Avoid overlapping writes to the same partition
- Make reruns idempotent
5. Build backfill as a normal operation
Schemas change and jobs fail. A backfill must load historical ranges without double-counting results or skipping source updates. Partition-aware writes, stable primary keys and clear checkpoints help. An operator should understand the difference between replaying raw ingestion and recomputing derived tables.
Implementation checklist
- Test a range reprocessing twice
- Monitor missing or stale partitions
- Document recovery and source outages
6. Evaluate architecture costs honestly
My ecommerce data project demonstrates Kafka, Spark, Airflow, Parquet and PostgreSQL in a reproducible learning architecture. It does not claim cloud-scale throughput benchmarks. The engineering choice should be evaluated against the team that will maintain it, the processing cost and the business value of freshness.
Implementation checklist
- Benchmark the real workload before scaling
- Keep orchestration alerts actionable
- Review cost against reporting value
Architecture decision
A well-defined daily pipeline can be more valuable than a sophisticated streaming stack that produces numbers nobody trusts.
Technical references
Primary documentation for the design principles in this guide. Project evidence above describes the implementation.
- Apache Kafka: design and delivery semantics
Producer, consumer, and processing guarantees when planning replayable ingestion.
- Apache Spark: Structured Streaming
Streaming sources, checkpoints, and recovery constraints.
Apply this to a real product
Explore related engineering capabilities, all technical notes, or contact me about an engineering challenge.
Let’s talk
I like working through complex problems with people who care about the details. Have a product to build, an engineering role, or an interesting challenge? Let’s start a conversation.
SaaimOpen to full-time roles, contract work, and conversations about things worth building.