Back to blog
Coding

Real-Time Data Pipelines in 2026: Kafka, Flink, Iceberg, and the End of Batch-by-Default

6 min read

For most of the last decade, "batch overnight, query in the morning" was an acceptable default for data pipelines. In 2026 it isn't, for a specific reason that has nothing to do with hype: AI agents now query data every few seconds and act on what they find, which breaks the assumption that a data warehouse only needs to be as fresh as the next scheduled job (Kai Waehner). This piece covers what's actually changed in streaming architecture, when batch is still the right call, and how to reason about the trade-off instead of defaulting to whichever pattern your team already knows.

Why "batch by default" broke

Batch ETL is schedule-driven — a cron job or orchestrator triggers extraction at a fixed interval, introducing latency that ranges from minutes to days depending on the window (Streamkap). That was fine when the consumer was a human checking a dashboard once a day. It's not fine when the consumer is a fraud model, a recommendation engine, or an autonomous agent making decisions on a loop measured in seconds.

Two concrete examples make the cost of latency legible:

  • Fraud detection. A fraudulent transaction that takes 10 minutes to reach the data warehouse is 10 minutes during which the pattern is invisible to downstream models (Estuary).
  • Personalization. Recommending based on what a user browsed three seconds ago is a fundamentally different product than recommending based on last night's batch session data (Estuary).

Neither of these is a case for streaming everything — it's a case for matching latency requirements to architecture deliberately, which most teams weren't doing.

Change Data Capture: the mechanism that made streaming practical

The biggest quiet shift underneath "real-time" is Change Data Capture (CDC). Log-based CDC reads the database's transaction log directly and turns every insert, update, and delete into a stream event — sub-45ms in modern implementations — without modifying the source application or adding query load (Estuary). This matters operationally: batch jobs are notorious for hammering source databases with large, spiky extraction queries that degrade production performance, while CDC's log-tailing approach imposes near-zero load (Popsink).

Batch ETL:                        CDC streaming ETL:
scheduler (e.g. hourly)           transaction log (always-on)
  -> full/incremental query           -> log reader (Debezium, etc.)
  -> transform                        -> event stream (Kafka topic)
  -> load to warehouse                -> stream processor (Flink)
                                       -> sink (warehouse, lakehouse, cache)

The dominant reference architecture in 2026 combines three open-source projects into what's being called the holy trinity of streaming: Apache Kafka for durable, partition-ordered ingestion; Apache Flink for stateful, low-latency stream processing with exactly-once semantics; and Apache Iceberg as the open table format that lets both streaming and batch consumers query the same underlying data (Kai Waehner).

The notable shift is consolidation: these were historically separate tools requiring significant integration glue. In 2026, vendors are packaging them into complete platforms that bundle storage, governance, analytics, and automation, reducing the operational surface area a data team has to own directly (Kai Waehner).

Note

"Diskless Kafka" is one of the more concrete 2026 developments — Kafka brokers backed directly by object storage (S3-compatible) instead of local disks, cutting storage cost and operational complexity for high-throughput topics (Kai Waehner).

Shift-left architecture: moving transformation into the stream

A second architectural trend worth naming directly: "shift-left" data architecture, where enrichment and transformation happen in the streaming layer itself rather than after data lands in a warehouse (Kai Waehner). Instead of the traditional "land raw, then dbt-transform in the warehouse" pattern, Flink jobs perform joins, aggregations, and enrichment on data in motion, so consumers read already-clean, already-joined data straight from the stream.

This has a real cost/benefit trade-off: stream-native transformation reduces warehouse compute and end-to-end latency, but debugging a stateful streaming job is meaningfully harder than debugging a SQL transformation you can re-run on demand.

Streaming vs. batch: how to actually choose

Dimension Batch ETL Streaming ETL (CDC)
Latency Minutes to days (Streamkap) Sub-second to low-seconds (Estuary)
Source load Can be heavy (spiky queries) (Popsink) Minimal (log-tailing) (Popsink)
Best for Historical analytics, reporting, non-time-sensitive aggregation Fraud detection, personalization, operational AI, inventory sync
Operational complexity Lower — mature, well-understood tooling Higher — stateful processing, exactly-once semantics, schema evolution
Cost model Predictable, scheduled compute bursts Continuous compute, but often lower total source-system load

Confluent's framing is a useful decision heuristic: batch ETL still wins for workloads where "good enough by tomorrow morning" is genuinely good enough, and streaming wins wherever the value of an insight decays quickly with time (Confluent). The mistake in 2026 isn't picking batch — it's picking it by default without checking whether the downstream consumer actually needs freshness.

AI agents are the new pressure on freshness

The most concrete driver of the streaming shift in 2026 isn't dashboards — it's autonomous AI agents that poll data sources every few seconds to make operational decisions (Kai Waehner). An agent deciding whether to reorder inventory, escalate a support ticket, or flag a transaction is only as good as the data it's reading — and a nightly batch job means the agent is reasoning over data that's up to 24 hours stale. This is pushing "streaming as the default ingestion layer" even for teams that don't consider themselves real-time-first.

Practical guidance for teams evaluating a move to streaming

  • Start with the consumer, not the tool. If nothing downstream reads data faster than once a day, streaming adds operational cost for no benefit. Match architecture to actual latency requirements.
  • Use CDC instead of polling wherever the source is a transactional database. It's lower load on the source and lower latency than any polling-based extraction, with mature tooling (Debezium and equivalents) already handling the log-parsing complexity.
  • Don't migrate everything at once. Modern platforms mix both patterns — streaming for the time-sensitive paths (fraud, personalization, agent context), batch for historical/aggregate reporting — rather than treating it as an all-or-nothing architecture decision (Streamkap).
  • Budget for state management complexity. Exactly-once semantics and stateful joins in Flink are powerful but require real operational maturity — schema evolution and backpressure handling are not solved by picking the right framework alone.

Tip

The actionable takeaway: don't ask "should we move to streaming" as a binary. Ask which specific data flows lose value if they're more than a few seconds stale, move those to CDC-based streaming, and leave everything else on batch. That's the real 2026 pattern — not wholesale replacement, but deliberate segmentation by freshness requirement.


Sources: Kai Waehner: Top Trends for Data Streaming with Kafka and Flink in 2026, Kai Waehner: The Data Streaming Landscape 2026, Estuary: The Data Engineer's Guide to CDC, Popsink: Complete Guide to Change Data Capture in 2026, Streamkap: Streaming ETL vs Batch ETL, Confluent: Real-Time AI Stream Processing vs Batch ETL

Get new posts as they publish

No spam — just the next post, straight to your inbox.

Keep reading

Discussion