BLOG  /  DISTRIBUTED DATA PROCESSING
the complete path · plan v2.0 · 2026-10-13

Distributed Data Processing

Enable Data Engineers to understand, build, debug, and design distributed processing systems—not merely reproduce Spark, Kafka, or Flink API examples. Prioritize transferable understanding and correctness under failure over preserving older article structure.

12 pages live · 0 authored · 24 modules · 19 core + 5 advanced · 6 tracks · 7 gates
Status shows the state of the project today; everything else on this page is the curriculum plan v2.0.
·
How a module works
1. Conceptual FoundationsMechanisms, visual models, worked examples, prediction questionsLearner predicts system behavior and explains whyAuto-graded prediction set; recorded for routing, not gating on its own
2. Guided ImplementationRunnable code, deterministic fixtures, execution evidenceLearner constructs correct behavior and checks invariantsAuto-graded against the lab's result oracle
3. Engineering ProblemsUnfamiliar failures, observations, logs, metrics, broken codeLearner diagnoses, repairs, and adds a regression testHidden tests on the repaired code, plus a learner-written regression test that must fail on the original defect — gating
4. Architectural JudgmentMore than one defensible solution; explicit constraintsLearner compares guarantees, network/memory/cost, operational complexity, and tradeoffsFixed decision-record format, automated structural pre-check, then assessor scoring against the published rubric — gating (§8)

A module is passed on evidence, not attendance: Stage 3 hidden tests and the Stage 4 rubric define a module pass (§8); track gates certify tracks. Required edges are satisfied at module granularity.

liveon this siteauthoredwritten and verified; gatedplannednot written yet
·
Before you start

Basic Python (functions, lists/dictionaries, tests), SQL joins/grouping, structured file I/O, command-line execution, and basic reasoning about latency vs throughput. Do not require Spark, Kafka, Flink, cloud accounts, Kubernetes, or containers to begin. The first container dependency is S04 on the Spark route and K02 on the Kafka route; F01–F04, S01–S03, K01, and ST01–ST02 run without containers.

F
Distributed Computing Foundations4 core

Build engine-independent mental models using small deterministic Python experiments before introducing Spark.

Foundations (F01–F04) · Python standard library, optional SQLite for sink simulation · No containers/cloud requirement
GATE · G-Fcore · F01–F04Correct partitioned aggregate, explained movement/skew, safe failure recovery with a retry-safety regression test, architecture reasoning
F01 · Parallelism & the Economics of Distributioncorelive
Owns
Latency/throughput, serial fraction, CPU/I/O/network costs, parallel overhead, coordination
Requires
Entry baseline
You can
Predict when additional workers help or hurt and justify using a cost model
Workbench
Tickets
5 tickets · f01-s01 … f01-s05 →authoredf01-s05 observe-only, optional
Decision record
F04 · Execution Graphs, Failures & Recomputationcorelive
Owns
DAG dependencies, deterministic work, retries, lost intermediate results, pure vs side-effecting tasks; idempotent/deduplicating sinks under at-least-once retry and the scope-naming rule (primary owner); testing retry-safe computation with fixtures, oracles, and failure injection (primary owner)
Requires
You can
Recover interrupted computation without missing/double-counted published results, and prove it with a regression test that fails on the unsafe version
Workbench
Decision record
S
Apache Spark: Distributed Batch Processing6 core

Use real Spark plans, task metrics, and controlled datasets to convert foundations into production troubleshooting expertise.

Spark Batch (S01–S03) · PySpark local mode + Spark UI · Pin runtime/dependencies; minimal deterministic fixtures
Spark Batch (S04–S06) · Containerized Spark standalone cluster (below) · First container dependency on the Spark route; scripted, named failure controls
S01–S03 run in PySpark local mode with the Spark UI. S04–S06 run on the containerized Spark standalone cluster (§7), because locality, executor sizing, dynamic allocation, executor loss, lost shuffle data, speculative attempts, and output-commit behavior cannot be demonstrated with a single in-process executor.
GATE · G-Score · S01–S06Diagnose a Spark plan/runtime failure on the standalone cluster; improve behavior without changing the result; show that a killed worker and a duplicate task attempt leave no partial or duplicated published output
S01 · Spark Architecture & Executioncoreplanned
Owns
Driver/executors; lazy evaluation; jobs, stages, tasks; DAG/task scheduling
Requires
You can
Predict and inspect execution boundaries; repair a dependency/action misunderstanding
Stages
Lessons · Workbench · Tickets · Decision recordplanned
S02 · DataFrames & Query Optimizationcoreplanned
Owns
DataFrame expressions; Spark schema/type application; logical/optimized/physical plans; Catalyst; scan pruning; Python UDF vs native expressions vs Arrow/pandas UDFs and the JVM↔Python serialization boundary
Requires
You can
Compare plan/execution evidence for equivalent queries; diagnose a type, plan, or UDF-serialization issue
Stages
Lessons · Workbench · Tickets · Decision recordplanned
S03 · Exchanges, Joins & Aggregationscoreplanned
Owns
Broadcast/shuffle joins, aggregate execution, Exchange, AQE, join cardinality
Requires
You can
Choose a join strategy, preserve result correctness, explain shuffle cost using metrics
Stages
Lessons · Workbench · Tickets · Decision recordplanned
S04 · Skew, Partition Sizing & Distributioncoreplanned
Owns
Input split/scan parallelism, shuffle partitions, skew, repartition/coalesce, locality (demonstrated on the standalone cluster)
Requires
You can
Diagnose a straggler task and verify a correct, measurable mitigation
Stages
Lessons · Workbench · Tickets · Decision recordplanned
S05 · Memory, Spill & Cluster Resourcescoreplanned
Owns
Execution/storage memory, caching, spilling, GC, executor sizing, dynamic allocation (on the cluster); Python worker memory outside the JVM heap (spark.executor.pyspark.memory, memory overhead) and OOM-killed executors
Requires
You can
Explain and repair a memory/spill or OOM-kill problem using evidence, not guessed knobs
Stages
Lessons · Workbench · Tickets · Decision recordplanned
S06 · Spark Fault Tolerance, Output Commit & Runtime Debuggingcoreplanned
Owns
Lost tasks/executors/shuffle data; recomputation; retries; speculation; output commit protocols (task vs job commit, committer algorithms), partial output after mid-write failure, non-atomic rename on object stores, duplicate task attempts reaching a sink, idempotent batch writes; testing Spark jobs (fixture jobs, plan assertions, scripted worker loss); Spark UI/logs; failure reconstruction
Requires
You can
Reconstruct a job failure including a killed worker; demonstrate recovery with preserved invariants and no partial or duplicated published output
Stages
Lessons · Workbench · Tickets · Decision recordplanned
K
Apache Kafka: Distributed Event Logs4 core

Build explicit reasoning about partition-scoped ordering, replication, producer acknowledgement ambiguity, consumer progress, and replay. K01 teaches the log on a Python simulator so the Kafka route has no container dependency before K02.

Kafka concepts (K01) · Python-simulated partitioned, append-only log · No containers; optional single-broker verification lab
Kafka (K02–K04) · Three-broker local Kafka in reproducible containers · First container dependency on the Kafka route; no cloud account as mandatory dependency
GATE · G-Kcore · K01–K04Reason about publish/replay/consumer crash and external sink boundaries
K01 · Partitions, Offsets & Orderingcoreplanned
Owns
Broker/topic/partition/log/offset, keys, per-partition order. Stages 1–3 run on a Python-simulated partitioned, append-only log (per-partition offsets, key hashing, consumer positions); an optional verification lab repeats the predictions on a single real broker
Requires
You can
Predict key routing and observed ordering, including where no global ordering exists
Stages
Lessons · Workbench · Tickets · Decision recordplanned
K02 · Producer Writes, Replication & Durabilitycoreplanned
Owns
Batching, acks, retries, idempotent producers, leader/replicas/ISR/failover. First container dependency on the Kafka route: a three-broker cluster (replication factor 3, min.insync.replicas=2) so ISR shrink and leader failover are observable
Requires
You can
Investigate a lost acknowledgement and distinguish unknown outcome from lost data
Stages
Lessons · Workbench · Tickets · Decision recordplanned
K03 · Consumer Groups & Rebalancingcoreplanned
Owns
Polling, assignment, group membership, lag, reassignment, cooperative concepts
Requires
You can
Scale consumers and diagnose a rebalance-related pause or duplicate processing
Stages
Lessons · Workbench · Tickets · Decision recordplanned
K04 · Offset Commits, Replay & Delivery Guaranteescoreplanned
Owns
Consumer progress, replay, retention/compaction, transactions, external sink boundary
Requires
You can
Repair the write-succeeded/offset-not-committed crash window
Stages
Lessons · Workbench · Tickets · Decision recordplanned
ST
Streaming Fundamentals & Spark Structured Streaming3 core

Teach temporal and stateful ideas independent of engines, then apply them in an already-familiar Spark model.

Spark streaming (ST03) · Local sources in local mode first; Kafka-backed variants later; the standalone cluster for the worker-loss-during-query variant · Isolate checkpoint directories per scenario
GATE · G-STcore · ST01–ST03Correct event-time state, watermark/late behavior, restart verification
ST01 · Unbounded Processing & Timecoreplanned
Owns
Bounded/unbounded, event vs processing time, arrival order, latency/freshness; flow control and backpressure (primary concept owner)
Requires
You can
Explain differing results for arrival-time and event-time windows; explain what happens to latency and buffers when a consumer is slower than its producer
Stages
Lessons · Workbench · Tickets · Decision recordplanned
ST02 · Stateful Computation, Windows & Watermarkscoreplanned
Owns
Window types; keyed state (engine-independent primary owner); event-time progress, late events, state expiry, stream joins
Requires
You can
Compute correct window results for out-of-order events and explain late-data policy
Stages
Lessons · Workbench · Tickets · Decision recordplanned
ST03 · Structured Streaming: Progress & Recoverycoreplanned
Owns
readStream, micro-batches, progress tracking, checkpoints, state stores, sink behavior; state-store partition count fixed by spark.sql.shuffle.partitions at first run and unchangeable without a new checkpoint; testing event-time logic with controlled sources and test oracles
Requires
You can
Restart a stateful query and verify progress and observed sink results; diagnose a restart that fails because the shuffle-partition count changed
Stages
Lessons · Workbench · Tickets · Decision recordplanned
FL
Apache Flink: Stateful Stream Processing4 advanced

Deepen stateful streaming understanding through an explicit dataflow architecture and operational checkpoints.

Flink · Reproducible local/containers · Pin API/runtime and define restore conditions
GATE · G-FLadvanced · FL01–FL04Stateful Flink recovery under checkpoint/backpressure/rescaling stress
FL01 · Flink Dataflow & Runtime Architectureadvancedplanned
Owns
JobManager/TaskManagers, tasks, slots, chaining, parallelism, keyed streams
Requires
You can
Explain job/operator/task placement and implement a small dataflow
Stages
Lessons · Workbench · Tickets · Decision recordplanned
FL02 · Keyed State, Timers & Stateful Operatorsadvancedplanned
Owns
Flink keyed/operator state (applies ST02), TTL, timers, enrichment, windows
Requires
You can
Implement stateful fulfillment tracking and test out-of-order transitions
Stages
Lessons · Workbench · Tickets · Decision recordplanned
FL03 · Checkpoints, Savepoints & Recoveryadvancedplanned
Owns
Barriers, state snapshots, backends, savepoints, restored positions, sink scope; test harness / mini-cluster and savepoint-restore tests
Requires
You can
Recover state after failure and distinguish internal state from external sink consistency
Stages
Lessons · Workbench · Tickets · Decision recordplanned
FL04 · Backpressure, Rescaling & Operationsadvancedplanned
Owns
Backpressure diagnostics (applies ST01), growing state, checkpoint costs, rescaling, recovery duration
Requires
You can
Diagnose lag/long checkpoints and justify a safe rescaling procedure
Stages
Lessons · Workbench · Tickets · Decision recordplanned
I
Integration & Distributed Architecture2 core + 1 advanced

Make learners reason about system-wide guarantees, design options, and failure windows across independent technologies.

Integration · Compose only required components · Separate source/sink responsibility and document failure windows
GATE · G-Icore · I01–I02Recoverable source → engine → sink flow with guarantee scope stated per boundary, failure windows enumerated, replay without incorrect observable duplicates
GATE · G-Padvanced · I03End-to-end platform architecture with explicit guarantees, failure cases, capacity and backlog recovery, observability, cost, and tradeoffs
I01 · Selecting a Distributed Processing Architecturecoreplanned
Owns
Batch vs micro-batch vs continuous, performance/correctness/cost/operations
Requires
K04J: S03 or FL02R: ST03 or FL03
You can
Select an architecture from requirements and reject unsuitable alternatives
Stages
Lessons · Workbench · Tickets · Decision recordplanned
I02 · Source-to-Sink Correctness & Recovery Contractscoreplanned
Owns
Progress vs commit, replay, dedup, state/sink boundaries, ambiguous outcomes
Requires
You can
Design and test a recoverable Kafka → engine → sink flow
Stages
Lessons · Workbench · Tickets · Decision recordplanned
I03 · Production Architecture & Failure-Driven Designadvancedplanned
Owns
Capacity, backlog recovery, failure isolation, observability, cost, platform evolution
Requires
I02FT: S06 or FL04
You can
Design and defend a production order/fulfillment platform under failures and load
Stages
Lessons · Workbench · Tickets · Decision recordplanned
·
Routes
Foundation/Spark routeF01–F04 → S01–S06 (local mode through S03; the standalone cluster from S04). Learners can then join streaming or integration.
Kafka routeF01–F02 → K01 (simulator, no containers) → {K02, K03} → K04. Spark is not mandatory.
Streaming concepts routeF01–F03 → ST01–ST02; add S01–S02 for ST03.
Flink routeF01–F04 + ST01–ST02 → FL01–FL04. The full Spark Batch track is not required.
Integration route (core)K04 + [S03 or FL02] + [ST03 or FL03] → I01 → I02. Spark-only and Flink-only learners both qualify; the engine not used to satisfy the slots is recommended, and the case study supplies a concise conceptual comparison for it.
Platform route (advanced)I02 + [S06 or FL04] → I03.

The order is a partial ordering, not one compulsory 24-item playlist. Diagnostic gaps should drive personalized pathways.

·
Prerequisite map
FSKSTFLIF01 · Parallelism & the Economics of DistributionF01F02 · Partitions, Keys & Data OwnershipF02F03 · Data Movement & Distributed AggregationF03F04 · Execution Graphs, Failures & RecomputationF04S01 · Spark Architecture & ExecutionS01S02 · DataFrames & Query OptimizationS02S03 · Exchanges, Joins & AggregationsS03S04 · Skew, Partition Sizing & DistributionS04S05 · Memory, Spill & Cluster ResourcesS05S06 · Spark Fault Tolerance, Output Commit & Runtime DebuggingS06K01 · Partitions, Offsets & OrderingK01K02 · Producer Writes, Replication & DurabilityK02K03 · Consumer Groups & RebalancingK03K04 · Offset Commits, Replay & Delivery GuaranteesK04ST01 · Unbounded Processing & TimeST01ST02 · Stateful Computation, Windows & WatermarksST02ST03 · Structured Streaming: Progress & RecoveryST03FL01 · Flink Dataflow & Runtime ArchitectureFL01FL02 · Keyed State, Timers & Stateful OperatorsFL02FL03 · Checkpoints, Savepoints & RecoveryFL03FL04 · Backpressure, Rescaling & OperationsFL04J: join/shuffle costJR: checkpointed stateful streamingRI01 · Selecting a Distributed Processing ArchitectureI01I02 · Source-to-Sink Correctness & Recovery ContractsI02FT: engine fault tolerance and operationsFTI03 · Production Architecture & Failure-Driven DesignI03
J · join/shuffle cost: S03 or FL02R · checkpointed stateful streaming: ST03 or FL03FT · engine fault tolerance and operations: S06 or FL04liveauthoredplannedadvanced module

Solid arrows are direct required edges; dotted arrows into a hexagon form an OR-slot: any one of them satisfies the slot.

ModuleRequired (all of)OR-slots (one module from each)
F02 / F03 / F04F01 / F02 / F03—
S01 … S06F04 → S01 → S02 → S03 → S04 → S05 → S06 (chain)—
K01F02—
K02, K03K01—
K04K02, K03—
ST01 / ST02F03 / ST01—
ST03S02, ST02—
FL01F04, ST01—
FL02FL01, ST02—
FL03 / FL04FL02 / FL03—
I01K04J: {S03, FL02}; R: {ST03, FL03}
I02I01—
I03I02FT: {S06, FL04}
Recommended (non-blocking) background
TargetRecommended preparationNotes
ST01K01Useful event-log context; the K01 simulator needs no runtime
ST03S03Shuffle partitions determine state-store partition count; restarts fail if it changes
ST03K04Needed for the full Kafka-integrated version, not local-source basics
FL01ST03Helps compare execution styles, not essential
FL03K04Kafka positions/replay enrich checkpoint examples
FL04S05Shared resource/diagnostics intuition
I01The engine not used for slots J and R (S03 + ST03, or FL02 + FL03)A better-informed Spark/Flink comparison; a concise comparison is supplied in the case study
I02FL03; lakehouse transaction conceptsAdvanced sink-state and cross-system correctness
I03The engine not used for slot FT; advanced orchestration/storage conceptsPlatform-wide capacity, reliability, catalog/sink tradeoffs

A required edge is satisfied by a module pass, a module diagnostic, or a passed track gate for that module's track (§8). An OR-slot is satisfied when any one listed module is satisfied by any of those means. Recommended edges create a short bridge lesson or reference, never an automatic block. Unknown level ≠ a prerequisite failure; assess first.

·
Gates
GateTierTested competenciesProof required
G-FcoreF01–F04Correct partitioned aggregate, explained movement/skew, safe failure recovery with a retry-safety regression test, architecture reasoning
G-ScoreS01–S06Diagnose a Spark plan/runtime failure on the standalone cluster; improve behavior without changing the result; show that a killed worker and a duplicate task attempt leave no partial or duplicated published output
G-KcoreK01–K04Reason about publish/replay/consumer crash and external sink boundaries
G-STcoreST01–ST03Correct event-time state, watermark/late behavior, restart verification
G-IcoreI01–I02Recoverable source → engine → sink flow with guarantee scope stated per boundary, failure windows enumerated, replay without incorrect observable duplicates
G-FLadvancedFL01–FL04Stateful Flink recovery under checkpoint/backpressure/rescaling stress
G-PadvancedI03End-to-end platform architecture with explicit guarantees, failure cases, capacity and backlog recovery, observability, cost, and tradeoffs
Cross-gate quality requirements
  1. Test functional invariants before measuring performance.
  2. Assess unseen inputs/failures, not memorization of the guided example.
  3. Require an observable repair and regression evidence for Stage 3.
  4. Require at least two plausible options and explicit constraints for Stage 4.
  5. Distinguish engine-internal recovery from external sink effects; do not award credit for unqualified "exactly once" claims. The same rule applies to batch output: a green job with partial or duplicated published files is a failure.
  6. Publish transparent rubric criteria; keep hidden test fixtures and full answers separate.
  7. A module must teach, or inherit from a prerequisite, the testing technique its Stage 3 regression test requires.
  8. Outcomes are worded by what the module's reference runtime can show: demonstrate only where demonstrable, otherwise explain.
·
Who this is for
ProficiencyTypical evidenceExample failure/problem
JuniorExplain partitions/tasks/shuffles; implement an accurate simple computation; identify straightforward defectsMissing global combine produces the wrong revenue total
Mid-levelRead Spark plans, handle retries and common skew, implement Kafka consumption and basic stateful queriesConsumer crash duplicates database updates; one Spark task becomes a straggler
SeniorDiagnose ambiguous commits, checkpoint issues, resource bottlenecks, and incorrect outputs under replay or duplicate task attemptsStateful output diverges after checkpoint recovery despite healthy tasks; a speculative attempt double-writes a batch partition
Staff+Define cross-system guarantees, failure isolation, capacity strategy, and justified long-term tradeoffsBackpressure, incomplete sink commits, and a recovery backlog conflict with latency and cost SLOs

Do not require every Junior to complete 19 modules or assume every Staff engineer has mastered all basics. Readineer should recommend the smallest dependency-complete path that resolves diagnosed gaps, choosing the learner's known engine for any OR-slot.

·
Reference stack
AreaPreferred implementationSetup principle
Foundations (F01–F04)Python standard library, optional SQLite for sink simulationNo containers/cloud requirement
Kafka concepts (K01)Python-simulated partitioned, append-only logNo containers; optional single-broker verification lab
Spark Batch (S01–S03)PySpark local mode + Spark UIPin runtime/dependencies; minimal deterministic fixtures
Spark Batch (S04–S06)Containerized Spark standalone cluster (below)First container dependency on the Spark route; scripted, named failure controls
Kafka (K02–K04)Three-broker local Kafka in reproducible containersFirst container dependency on the Kafka route; no cloud account as mandatory dependency
Spark streaming (ST03)Local sources in local mode first; Kafka-backed variants later; the standalone cluster for the worker-loss-during-query variantIsolate checkpoint directories per scenario
FlinkReproducible local/containersPin API/runtime and define restore conditions
IntegrationCompose only required componentsSeparate source/sink responsibility and document failure windows
Spark standalone cluster (reference definition)

Topology: one master, three workers, one history server, defined in a pinned Docker Compose file with a shared volume for fixtures, event logs, and output. Per-worker cores and memory are fixed and small enough for a laptop (for example 2 cores / 2 GB each); exact sizes are set and validated during lab development.

Failure controls (scripted, named scenarios): kill-worker <n> (executor and shuffle-file loss → fetch failures and stage re-execution), pause-worker <n> (straggler and speculation), restart-worker <n>, oom-executor (a constrained-memory scenario that produces an OOM-killed executor), and an optional network-throttle control. Each scenario is reproducible by name, not by timing.

·
What this domain owns, and does not

Distributed Data Processing owns computation distribution, partitioning, execution graphs, data movement, shuffles, joins/aggregations, compute state, event-time processing, processing-engine recovery, stream log delivery, runtime performance, batch output commit behavior at the engine layer, testing of distributed computation, and source-to-sink integration reasoning.

It does not own workflow DAG scheduling and business-level backfills (Pipeline Orchestration & Reliability), nor logical data modeling, Parquet/table layout internals, or Iceberg/Delta transaction protocols (Data Modeling & Storage Design). Integrated labs may reference these mechanisms without duplicating their primary instruction.

·
Build order · authoring order (plan §9)
  1. Approve this concept/prerequisite baseline. Maintain the decision log (§11) for any further change to ownership, direct prerequisite edges, OR-slots, or core/advanced status.
  2. Update the companion teaching specification for F04's two new owned concepts (idempotency/scope-naming; testing retry-safe computation), then pilot F01–F04 and G-F, including controlled failures and unit tests. Use the same pilot to validate the Stage 4 decision-record format, the structural pre-check, assessor calibration, and the module-diagnostic format.
  3. Validate teaching efficacy: Ask pilot learners to predict behavior before code execution, fix previously unseen failures, and transfer to an unfamiliar scenario. Observe where they get stuck and refine content.
  4. Build in parallel after the F pilot — these streams do not depend on each other:
    • S01–S06, including the standalone cluster, its failure controls, and the optional object-store sink; then G-S.
    • K01–K04, simulator first, then the three-broker cluster; G-K should not require Spark.
    • ST01–ST02 on local data sources.
  5. Build ST03 once S02 and ST02 exist; introduce Kafka only when it teaches a relevant boundary; then G-ST.
  6. Build I01–I02 and G-I once K04, S03, and ST03 exist. The Flink alternatives for slots J and R are wired in when FL ships; until then the Spark path satisfies them.
  7. FL kickoff: decide the Flink programming language first; then build FL01–FL04 and G-FL; then I03 and G-P, adding the FL alternatives to slots J, R, and FT.
  8. Integrate personalization: Route users using observed competencies, prerequisite diagnostics, and the learner's known engine for OR-slots — not job titles or completed-content counts alone.