Chapter 6: Architecting the ingestion layer
Introduces the ingestion layer as the point where data enters an Iceberg lakehouse and frames its design around differing delivery and reliability needs.
After this chapter you will be able to
- Ingestion layer's role. Explain what the ingestion layer does in an Iceberg lakehouse and how its responsibility differs from the storage layer.
- Workload-driven ingestion design. Explain why designing ingestion requires more than selecting an ETL tool, using the section's contrasting workload examples.
- Requirements-driven ingestion design. Explain why ingestion requirements should be defined before selecting tools or designing pipelines, using audit findings and contrasting workloads to show why priorities differ.
- Throughput and freshness requirements. Distinguish ingestion throughput from latency, and explain why acceptable data freshness depends on the use case.
- Iceberg freshness limits and tool fit. Explain why Iceberg ingestion targets must fit an analytical workload, and describe the broad latency and throughput tradeoffs of the ingestion options discussed.
- Write frequency and table health. Explain how frequent writes affect Iceberg tables and how grouping writes and compaction help balance freshness with query performance.
- End-to-end delivery guarantees. Distinguish at-least-once delivery from exactly-once semantics and explain why the source’s replay capability limits the guarantees a pipeline can provide.
- Coordinated checkpoint and table commits. Explain how checkpoint coordination and Iceberg’s atomic commits protect table consistency across retries, and distinguish that protection from the ingestion tool’s responsibility for duplicates and conflicts.
- Resumable ingestion state. Describe how a pipeline resumes after an outage and why idempotent reprocessing makes recovery safer.
- Stable field IDs and evolution. Explain how Iceberg uses stable field IDs to let columns change without rewriting existing data files, while keeping data written under older schemas queryable.
- Incoming schema alignment. Describe what ingestion jobs must do when source schemas change, and distinguish when batch and streaming jobs perform that alignment.
- Invalid record handling tradeoffs. Distinguish fail-fast checks, controlled casting, and dead-letter queues, and explain why a pipeline might combine them.
- Maintainability as an architecture requirement. Explain why ingestion performance and reliability alone are not enough, and describe what makes an ingestion architecture manageable over time.
- Batch ingestion tradeoffs. Explain why batch ingestion suits backfills and periodic workloads, while noting that retries are not automatically idempotent when the input can change between runs.
- Micro-batch timing and recovery. Describe how micro-batch ingestion provides data at short intervals and why tracked offsets, state, and commit boundaries can simplify recovery reasoning, despite greater operational complexity than simple batch jobs.
- Streaming availability versus consumption. Distinguish continuously landing arriving data from requiring every downstream consumer to process it in real time.
- Batch workflow and fit. Describe how batch ingestion collects data over a defined period and loads it into the lakehouse in discrete, scheduled runs. Explain why it suits large historical or slowly changing datasets when throughput, reliability, and cost matter more than low latency.
- Iceberg batch write guarantees. Explain the write operations Iceberg supports for batch jobs and what a completed batch write contributes to table history and consistency.
- Bounded input for safe retries. Justify why a batch job needs a fixed input snapshot or clearly scoped chunk for safe retries. Describe what can go wrong if a retry reads a different input state.
- Stateful incremental progress. Explain how micro-batch ingestion uses offsets, checkpoints, or other pipeline state to process only new data and resume after failure.
- Iceberg mini-batch commits. Describe how short, recurring execution cycles add data to Iceberg tables and what readers see when those writes commit.
- Streaming execution and table commits. Distinguish continuous stream processing from how data becomes visible in an Iceberg table. Explain why streaming ingestion has low but non-zero latency.
- Commit cadence and table health. Explain the tradeoff in choosing streaming commit frequency and why a streaming Iceberg table needs a maintenance plan.
- Streaming state and recovery. Describe how a long-running streaming job uses persisted state and checkpointing to recover, and how this works with Iceberg commits.
- Snapshot-based transactional writes. Explain that an Iceberg write creates a new table snapshot and updates metadata without modifying existing data files, and describe the guarantees this approach enables for ingestion.
- Snapshots for consistent writes. Explain that each Iceberg write creates a new snapshot representing a consistent table view at a point in time.
- Append and overwrite effects. Distinguish append from overwrite by what happens to existing data files and when each operation is useful.
- Row-level change strategies. Contrast merge-on-read and copy-on-write in how they apply row-level updates and deletes and in their read-versus-write costs.
- Engine-dependent write choices. Explain why choosing an Iceberg write strategy also requires considering the compute engine and its supported operations and delete types.
- Atomic snapshot publication. Trace how a write becomes visible by creating snapshot metadata and atomically updating the table’s metadata pointer. Explain why readers retain a consistent table view while writers operate in parallel.
- Concurrent write conflict handling. Explain how optimistic concurrency control handles parallel writes without distributed locks, and distinguish disjoint writes from potentially conflicting overwrites. Describe the response to a commit conflict at the level given here.
- Commit interval tradeoffs. Explain why frequent commits are not inherently the performance problem, and describe the tradeoff when a pipeline batches writes before committing.
- Ingestion tool selection criteria. Explain why an Iceberg ingestion tool should be chosen after defining requirements and an architectural model, and identify the factors that shape the choice.
- Spark’s ingestion role. Explain why Spark is a practical choice for Iceberg ingestion, including the workloads it suits and how it accesses Iceberg tables.
- Spark write operations. Distinguish appends, partitioned overwrites, and merges as Iceberg write workflows supported through Spark, and describe the effects stated for overwrites and merges.
- Flink Iceberg ingestion fit. Explain why Flink suits low-latency, real-time ingestion into Iceberg and how the Iceberg Flink sink supports both streaming and batch writes.
- Checkpointed exactly-once delivery. Explain the consistency benefit of Flink checkpointing with Iceberg snapshots and the condition attached to exactly-once delivery.
- Visual processor-based ingestion flows. Explain how NiFi uses connected processors to move, transform, and route data, and how its focus differs from Spark or Flink.
- Staged NiFi-to-Iceberg flow. Trace the example flow in which NiFi prepares and delivers data before an Iceberg-compatible engine ingests it into a table.
- Direct writes and table limits. Describe when PutIceberg can write to an Iceberg table, the setup the section lists, and which table-management tasks remain outside NiFi.
- Managed Iceberg ingestion path. Trace the example path from source systems through Fivetran to Parquet files in an Iceberg table, and explain how query engines access the table through Fivetran’s Iceberg REST Catalog.
- Automated operations and adoption fit. Explain which ingestion and table-management work Fivetran handles and why that makes it useful for organizations adopting Iceberg, especially for near-real-time syncs from business systems.
- Qlik ingestion pipeline capabilities. Describe how Qlik captures data from high-throughput sources and writes it into Iceberg tables using declarative data flows, with support for schema evolution and partitioning strategies.
- Automated Iceberg table optimization. Explain how Qlik’s background optimization addresses operational work during continuous ingestion, and state the scale the subsection claims it can support.
- Connector-based Iceberg ingestion. Explain how Airbyte moves data from supported sources into Iceberg tables and why it suits periodic, connector-based ingestion.
- Write modes and deduplication limits. Describe the connector’s write strategies and the assumptions behind merge-on-read deduplication.
- Snapshots and stable reads. Explain how Airbyte syncs and truncate operations affect Iceberg snapshots and readers.
- Kafka-to-Iceberg materialization. Explain how Tableflow moves streaming data from Kafka topics into Iceberg tables and makes those tables available to analytical query engines.
- Tableflow fit and constraints. Justify when Tableflow is a good ingestion choice and identify the limitations that could rule it out.
- Streaming topics as Iceberg tables. Explain how Redpanda makes streaming topic data available for analytics through Iceberg tables in cloud object storage, without an intermediate ETL pipeline.
- Iceberg enablement and ingestion modes. Describe the settings needed to enable Iceberg support and distinguish what the three topic ingestion modes write.
- Managed Iceberg ingestion paths. Distinguish how AWS Glue, Azure Data Factory, and Google Cloud Dataflow deliver data for Iceberg-based lakehouses, including which paths write to Iceberg and which stage data for later registration.
- Cloud integration trade-offs. Explain why choosing a managed ingestion service requires checking its Iceberg integration beyond its cloud-native convenience.
- Workload and integration fit. Explain how latency, catalog compatibility, schema evolution, and transformation needs guide ingestion-tool selection. Give examples of tools suited to different needs without treating any tool as universally best.
- Sustainable ingestion toolset. Justify selecting a small, complementary set of ingestion tools based on operational burden, cloud environment, and organizational skills. Describe the trade-off between managed services’ lower operational burden and customization.
- Contextual ingestion tradeoffs. Explain why an ingestion architecture should balance multiple priorities and account for existing constraints instead of optimizing for a single requirement in isolation.
- Streaming for low-latency ingestion. Explain why streaming ingestion is preferred when events must become queryable in an Iceberg table within seconds, and describe the section’s transaction-monitoring example.
- Commit frequency and operating tradeoffs. Explain why a low-latency Iceberg pipeline needs tuned commit frequency and operational safeguards rather than simply committing as often as possible.
- High-throughput ingestion design. Describe how a pipeline can ingest large volumes from many sources into Iceberg, using the media-streaming scenario to illustrate the roles of streaming, batching, and automated data handling.
- File and metadata overhead control. Explain why high-volume writes need controls on file generation and commit frequency, and describe the measures the section gives for keeping Iceberg performance stable as volume grows.
- Pre-storage transformation benefits. Explain why an ingestion pipeline might join, clean, filter, mask, or enrich data before writing it to Iceberg, and how doing so can help downstream analytics and governance.
- Spark and Flink capabilities. Describe why Spark and Flink are presented as options for complex ingestion transformations, using the healthcare example to illustrate the work involved.
- Iceberg schema evolution support. Explain which schema changes Iceberg supports and why ingestion tools need to handle schema drift as source data evolves.
- Evolving event pipeline safeguards. Describe how the mobile-event example prepares for frequent schema changes before data reaches storage.
- Managed ingestion as an operational choice. Explain why a team might choose managed ingestion rather than build and maintain a more complex pipeline, especially when it needs to iterate quickly with limited staff.
- Managed platform tradeoffs. Distinguish the operational benefits of managed ingestion from its limits for custom transformations, source changes, and cost at scale.
- Cloud ecosystem fit and tradeoffs. Explain why an organization may favor ingestion tools that fit its existing cloud platform, and describe the benefits and limitations of that choice using the AWS scenario.
- Context based ingestion selection. Explain why an ingestion strategy should balance multiple requirements and organizational constraints rather than begin with a preferred tool or optimize for one metric.
What it builds on
- Storage requirements (chapter 5) · The storage layer's requirements for preserving data.
- Auditing your data platform (chapter 4) · The audit identifies existing data flows and delivery constraints.
- Defining ingestion requirements (chapter 4) · Assumes ingestion requirements are established before choosing an architecture.
- Ingestion layer: Feeding data into Iceberg tables (chapter 2) · Assumes the ingestion layer feeds data into Iceberg tables.
- How Apache Iceberg manages metadata (chapter 2) · Assumes Iceberg tracks table state through metadata.
- ACID transactions (chapter 2) · Assumes the earlier introduction to Iceberg’s ACID transactions.
- How tables evolve (chapter 2) · Introduces Iceberg table evolution.
- Time travel and snapshot-based queries (chapter 2) · The idea of snapshots and time travel.
Section by section
Introduction
Introduces the ingestion layer as the point where data enters an Iceberg lakehouse and frames its design around differing delivery and reliability needs.
- Ingestion layer's role: Explain what the ingestion layer does in an Iceberg lakehouse and how its responsibility differs from the storage layer.
Why it matters: This distinction keeps ingestion decisions focused on getting data into the lakehouse, rather than on storing it afterward. - Workload-driven ingestion design: Explain why designing ingestion requires more than selecting an ETL tool, using the section's contrasting workload examples.
Why it matters: Different workloads impose different arrival requirements, so a tool choice alone does not settle the design.
Key terms: ingestion layer, storage layer, raw data, latency tolerance, throughput capacity, schema evolution, fault recovery, performance, consistency
6.1 Ingestion requirements
The section explains why ingestion requirements should be defined from audit findings before choosing pipeline designs or tools.
- Requirements-driven ingestion design: Explain why ingestion requirements should be defined before selecting tools or designing pipelines, using audit findings and contrasting workloads to show why priorities differ.
Why it matters: Clear requirements help you choose an ingestion approach that fits the workload rather than one that is unnecessarily complex.
Key terms: ingestion requirements, throughput and latency, reliability and fault tolerance, schema management, operational complexity
6.1.1 Ingestion throughput and latency
This section explains how to set ingestion throughput and latency requirements that fit business use cases and Iceberg’s analytical design.
- Throughput and freshness requirements: Distinguish ingestion throughput from latency, and explain why acceptable data freshness depends on the use case.
Why it matters: Clear freshness targets help prevent an ingestion design that is either too slow or unnecessarily demanding. - Iceberg freshness limits and tool fit: Explain why Iceberg ingestion targets must fit an analytical workload, and describe the broad latency and throughput tradeoffs of the ingestion options discussed.
Why it matters: A realistic freshness target keeps a team from treating an analytical table as a transactional store. - Throughput bottlenecks and benchmarks: Describe what can constrain throughput and how to set ingestion capacity targets using representative workload patterns.
Why it matters: Testing realistic steady and burst loads avoids designing around an arbitrary maximum while missing genuine bottlenecks. - Write frequency and table health: Explain how frequent writes affect Iceberg tables and how grouping writes and compaction help balance freshness with query performance.
Why it matters: Fast ingestion is useful only if the resulting table remains practical to query.
Key terms: throughput, latency, data freshness, OLAP, OLTP, analytical sink, commit intervals, streaming, batch, throughput constraints
6.1.2 Reliability and fault tolerance
This section explains how delivery guarantees, coordinated commits, recovery state, and observability make Iceberg ingestion reliable despite failures.
- End-to-end delivery guarantees: Distinguish at-least-once delivery from exactly-once semantics and explain why the source’s replay capability limits the guarantees a pipeline can provide.
Why it matters: The ingestion engine cannot promise stronger recovery guarantees than its source allows. - Coordinated checkpoint and table commits: Explain how checkpoint coordination and Iceberg’s atomic commits protect table consistency across retries, and distinguish that protection from the ingestion tool’s responsibility for duplicates and conflicts.
Why it matters: Atomic table commits prevent partial results from appearing, but reliable ingestion also depends on coordination by the writer. - Resumable ingestion state: Describe how a pipeline resumes after an outage and why idempotent reprocessing makes recovery safer.
Why it matters: A saved position and safe reprocessing help a pipeline recover without skipping or mishandling records. - Ingestion health indicators: Describe which pipeline signals support observability and what they allow teams to do.
Why it matters: Recovery mechanisms are more useful when teams can see that ingestion is failing or behaving unexpectedly.
Key terms: at-least-once delivery, exactly-once semantics, replayable sources, checkpointing, two-phase commit protocols, atomic, snapshot-based commits, transactional commit model, resumability, offsets, timestamps
6.1.3 Schema management and evolution
Explains how an Iceberg ingestion layer can accommodate changing schemas while protecting data quality and keeping pipelines running.
- Stable field IDs and evolution: Explain how Iceberg uses stable field IDs to let columns change without rewriting existing data files, while keeping data written under older schemas queryable.
Why it matters: This explains why an evolving source schema does not necessarily require rewriting existing Iceberg data. - Variant columns for changing attributes: Describe when a variant column is useful and how it complements explicit schema evolution.
Why it matters: Variants offer a place for unpredictable source attributes without abandoning structure everywhere. - Incoming schema alignment: Describe what ingestion jobs must do when source schemas change, and distinguish when batch and streaming jobs perform that alignment.
Why it matters: Iceberg’s schema flexibility does not by itself prevent an ingestion pipeline from mishandling changed source data. - Invalid record handling tradeoffs: Distinguish fail-fast checks, controlled casting, and dead-letter queues, and explain why a pipeline might combine them.
Why it matters: These choices determine whether bad records stop ingestion, change on the way in, or are set aside for review. - Schema history responsibility: Explain why ingestion systems need not maintain the full history of schema changes and where the section says to find an audit trail instead.
Why it matters: Separating ingestion from historical tracking avoids unnecessary pipeline overhead while preserving visibility into schema changes.
Key terms: schema evolution, stable field IDs, variant data types, variant columns, semistructured, schema alignment, schema compatibility, schema registries, metadata catalogs, fail-fast checks
6.1.4 Operational complexity and maintainability
This section explains how operational demands affect the long-term value of an ingestion layer and how to balance capability with maintainability.
- Maintainability as an architecture requirement: Explain why ingestion performance and reliability alone are not enough, and describe what makes an ingestion architecture manageable over time.
Why it matters: A pipeline that works well today can still become costly if the team must continually tend to it. - Batch and streaming operations: Distinguish the operational demands of orchestrated batch jobs from those of continuously running streaming jobs.
Why it matters: The ingestion model affects the skills and ongoing work needed to operate it. - Operational automation and configuration: Describe how observability, automated error handling, and manageable configuration reduce the work of operating pipelines.
Why it matters: These practices make routine pipeline issues and growing numbers of pipelines less labor-intensive to manage. - Framework maintenance tradeoffs: Explain the operational tradeoff between flexible open source ingestion tools and managed cloud-native services.
Why it matters: Tool selection changes both what the team can customize and what it must operate itself.
Key terms: operational complexity, maintainability, operational footprint, pipeline orchestration, batch jobs, streaming jobs, observability, automated retries, backoff policies, dead-letter queues
6.2 Ingestion models and architectures
This section compares batch, micro-batch, and streaming ingestion so architects can choose a model based on latency, freshness, reliability, and operational overhead.
- Batch ingestion tradeoffs: Explain why batch ingestion suits backfills and periodic workloads, while noting that retries are not automatically idempotent when the input can change between runs.
Why it matters: Clear batch runs are useful, but a retry may not reproduce the same result if its source has changed. - Micro-batch timing and recovery: Describe how micro-batch ingestion provides data at short intervals and why tracked offsets, state, and commit boundaries can simplify recovery reasoning, despite greater operational complexity than simple batch jobs.
Why it matters: Micro-batch offers fresher data without giving up the execution structure that helps teams reason about recovery. - Streaming availability versus consumption: Distinguish continuously landing arriving data from requiring every downstream consumer to process it in real time.
Why it matters: Landing data immediately preserves flexibility for downstream systems with different freshness needs.
Key terms: batch ingestion, idempotent, snapshot boundaries, historical backfills, micro-batch ingestion, input offsets, state, commit boundaries, streaming ingestion, real-time availability
6.2.1 Batch ingestion
This section explains how batch ingestion loads scheduled chunks of data into Iceberg tables, why it suits bulk processing, and what its recovery and freshness tradeoffs are.
- Batch workflow and fit: Describe how batch ingestion collects data over a defined period and loads it into the lakehouse in discrete, scheduled runs. Explain why it suits large historical or slowly changing datasets when throughput, reliability, and cost matter more than low latency.
Why it matters: This helps you recognize when a scheduled bulk load is a good ingestion choice. - Iceberg batch write guarantees: Explain the write operations Iceberg supports for batch jobs and what a completed batch write contributes to table history and consistency.
Why it matters: These guarantees explain why batch loads can preserve table history without exposing a partial write. - Bounded input for safe retries: Justify why a batch job needs a fixed input snapshot or clearly scoped chunk for safe retries. Describe what can go wrong if a retry reads a different input state.
Why it matters: Defining the input boundary prevents a recovery run from quietly processing different data. - Freshness and backlog tradeoffs: Explain how scheduled batch runs affect data freshness and how rising input volume can affect a fixed-size batch pipeline. Describe the kinds of operational adjustments the section suggests.
Why it matters: A reliable batch pipeline still needs enough capacity to keep data available on time.
Key terms: batch ingestion, discrete units, Parquet files, scheduled jobs, append mode, overwrites, upserts, Iceberg snapshot, atomic commits, fixed snapshot
6.2.2 Micro-batch and incremental ingestion
Micro-batch ingestion uses frequent, state-tracked runs to add new data to Iceberg tables, balancing freshness and operational simplicity against write overhead.
- Stateful incremental progress: Explain how micro-batch ingestion uses offsets, checkpoints, or other pipeline state to process only new data and resume after failure.
Why it matters: Tracked progress makes frequent ingestion more reliable and easier to operate. - Iceberg mini-batch commits: Describe how short, recurring execution cycles add data to Iceberg tables and what readers see when those writes commit.
Why it matters: Frequent updates can become available without exposing an incomplete write to readers. - Micro-batch source fit: Explain why regularly polled or triggered sources and near-real-time use cases suit micro-batch ingestion.
Why it matters: The source’s arrival pattern and the required freshness help determine whether micro-batching is a good fit. - Batch interval tradeoffs: Explain the freshness and overhead tradeoff in choosing a micro-batch interval, including the effect of frequent small writes on Iceberg tables.
Why it matters: An interval that meets freshness needs can still create write overhead and later read-performance costs.
Key terms: micro-batch ingestion, offsets, checkpoints, pipeline state, mini-batch, Iceberg tables, snapshots, snapshot isolation, SaaS platforms, APIs
6.2.3 Streaming ingestion
Explains how streaming ingestion delivers low-latency data to Iceberg through bounded commits, and the reliability, maintenance, and operational tradeoffs this creates.
- Streaming execution and table commits: Distinguish continuous stream processing from how data becomes visible in an Iceberg table. Explain why streaming ingestion has low but non-zero latency.
Why it matters: This distinction sets realistic expectations for how fresh a streaming Iceberg table can be. - Commit cadence and table health: Explain the tradeoff in choosing streaming commit frequency and why a streaming Iceberg table needs a maintenance plan.
Why it matters: A low-latency design can become costly or slow to query if its commit pattern is not maintained. - Streaming state and recovery: Describe how a long-running streaming job uses persisted state and checkpointing to recover, and how this works with Iceberg commits.
Why it matters: Recovery design determines whether a continuous pipeline can survive failures without exposing incomplete writes. - Stateful processing and incremental efficiency: Explain what stateful transformations enable in streaming ingestion and why incremental processing can reduce work compared with periodic batch jobs.
Why it matters: Streaming can be valuable for ongoing processing work, not just for faster data availability. - Continuous pipeline operational resilience: Describe the operational issues a streaming pipeline must handle beyond writing records: late events, bad records, and changing input rates.
Why it matters: Low latency is useful only if the pipeline remains accurate and stable when events arrive imperfectly or rates spike.
Key terms: streaming ingestion, unbounded streams, bounded units, commit intervals, commit frequency, metadata, small files, compaction, processing state, checkpointing
6.3 How Iceberg manages writes
This section introduces Iceberg’s snapshot-based writes as the foundation for reliable ingestion across batch, micro-batch, and streaming pipelines.
- Snapshot-based transactional writes: Explain that an Iceberg write creates a new table snapshot and updates metadata without modifying existing data files, and describe the guarantees this approach enables for ingestion.
Why it matters: This explains why different ingestion pipelines can write to Iceberg tables reliably.
Key terms: transactional table format, table snapshot, metadata, atomic commits, time travel, concurrent write isolation
6.3.1 Write semantics in Iceberg
Explains Iceberg’s write operations, their snapshot and file-level effects, and how engine capabilities shape ingestion choices.
- Snapshots for consistent writes: Explain that each Iceberg write creates a new snapshot representing a consistent table view at a point in time.
Why it matters: Snapshots explain how the table can change without losing a consistent view of its data. - Append and overwrite effects: Distinguish append from overwrite by what happens to existing data files and when each operation is useful.
Why it matters: The file-level difference helps you choose a write pattern and anticipate conflicts. - Row-level change strategies: Contrast merge-on-read and copy-on-write in how they apply row-level updates and deletes and in their read-versus-write costs.
Why it matters: This tradeoff affects both ingestion latency and the cost of reading changed data. - Position and equality deletes: Distinguish position deletes from equality deletes by how they identify rows and by their stated read, compaction, and ingestion tradeoffs.
Why it matters: The kind of delete file changes which ingestion patterns are practical and how expensive later reads may be. - CDC and conditional merges: Describe how Iceberg supports CDC use cases and what a merge operation does in transactional ingestion.
Why it matters: These capabilities extend ingestion beyond simply adding immutable records. - Engine-dependent write choices: Explain why choosing an Iceberg write strategy also requires considering the compute engine and its supported operations and delete types.
Why it matters: A write strategy must work with the engine that will actually perform the writes.
Key terms: snapshot, atomicity, isolation, time travel, append, overwrite, filter, partition specification, merge-on-read, copy-on-write
6.3.2 Commit protocols and conflict handling
Explains how Iceberg publishes consistent table snapshots, handles concurrent commit conflicts, and balances commit intervals against metadata growth and data freshness.
- Atomic snapshot publication: Trace how a write becomes visible by creating snapshot metadata and atomically updating the table’s metadata pointer. Explain why readers retain a consistent table view while writers operate in parallel.
Why it matters: This is how ingestion can publish changes without giving readers an inconsistent table view. - Concurrent write conflict handling: Explain how optimistic concurrency control handles parallel writes without distributed locks, and distinguish disjoint writes from potentially conflicting overwrites. Describe the response to a commit conflict at the level given here.
Why it matters: Concurrent ingestion pipelines need a way to recover from competing commits without assuming every write must be serialized. - Commit interval tradeoffs: Explain why frequent commits are not inherently the performance problem, and describe the tradeoff when a pipeline batches writes before committing.
Why it matters: Commit scheduling affects both the cost of managing table metadata and how quickly new data becomes available.
Key terms: atomic commit, table snapshot, snapshot metadata file, compare-and-swap, metadata pointer, optimistic concurrency control, commit conflicts, retries, backoff strategies, disjoint datasets
6.4 Tools and frameworks for ingestion
Introduces ingestion-tool selection as a choice guided by requirements and architectural fit, then previews the tools covered in the section.
- Ingestion tool selection criteria: Explain why an Iceberg ingestion tool should be chosen after defining requirements and an architectural model, and identify the factors that shape the choice.
Why it matters: These criteria help you evaluate tools against your workload rather than look for one universally best option.
Key terms: ingestion requirements, architectural model, latency needs, source systems, team expertise, scale and frequency
6.4.1 Apache Spark
This section explains why Spark is useful for Iceberg ingestion and what its batch, overwrite, merge, and streaming writes support.
- Spark’s ingestion role: Explain why Spark is a practical choice for Iceberg ingestion, including the workloads it suits and how it accesses Iceberg tables.
Why it matters: This helps you judge when Spark fits an Iceberg ingestion workflow. - Spark write operations: Distinguish appends, partitioned overwrites, and merges as Iceberg write workflows supported through Spark, and describe the effects stated for overwrites and merges.
Why it matters: The write operation you choose determines whether you add, replace, or reconcile data. - Structured Streaming micro-batches: Describe how Spark Structured Streaming writes to Iceberg and state the condition attached to its exactly-once semantics.
Why it matters: The configuration caveat matters when assessing guarantees for a near-real-time pipeline.
Key terms: Apache Spark, Iceberg Spark runtime module, Spark SQL, DataFrame APIs, append, partitioned overwrite, merge, upsert, write amplification, Structured Streaming
6.4.2 Apache Flink
This section explains when Flink is a strong choice for Iceberg ingestion and what its streaming, processing, and consistency features provide.
- Flink Iceberg ingestion fit: Explain why Flink suits low-latency, real-time ingestion into Iceberg and how the Iceberg Flink sink supports both streaming and batch writes.
Why it matters: This helps you decide whether Flink fits a continuously arriving data source. - Checkpointed exactly-once delivery: Explain the consistency benefit of Flink checkpointing with Iceberg snapshots and the condition attached to exactly-once delivery.
Why it matters: The checkpoint-and-snapshot connection matters when an ingestion flow cannot tolerate missing or duplicate data. - Event-time processing and transformations: Describe the processing Flink can perform before writing to Iceberg and why event-time support helps with late or out-of-order data.
Why it matters: Flink can prepare event data as it arrives rather than merely pass it through to Iceberg.
Key terms: Apache Flink, Iceberg Flink sink, streaming and batch writes, checkpointing, atomic snapshot system, exactly-once delivery, event-time semantics, DataStream API, SQL, deduplication
6.4.3 Apache NiFi
This section explains NiFi’s role in Iceberg ingestion, including visual dataflows, staged and direct-write paths, and the limits of its Iceberg support.
- Visual processor-based ingestion flows: Explain how NiFi uses connected processors to move, transform, and route data, and how its focus differs from Spark or Flink.
Why it matters: This distinction helps place NiFi alongside processing engines rather than treating it as a replacement for them. - Staged NiFi-to-Iceberg flow: Trace the example flow in which NiFi prepares and delivers data before an Iceberg-compatible engine ingests it into a table.
Why it matters: The example shows where NiFi’s delivery work ends and the downstream engine’s table ingestion begins. - Direct writes and table limits: Describe when PutIceberg can write to an Iceberg table, the setup the section lists, and which table-management tasks remain outside NiFi.
Why it matters: These boundaries determine whether a proposed NiFi-to-Iceberg write path is feasible. - Observable edge ingestion role: Explain why NiFi suits edge ingestion and observable dataflows while leaving heavy processing to other tools.
Why it matters: Operational visibility and flow handling can be reasons to include NiFi even when another engine performs the table writes.
Key terms: processors, data ingestion pipelines, flow control, drag-and-drop interface, GetFile, ConvertRecord, RouteOnAttribute, PutS3Object, Iceberg-compatible engine, PutIceberg
6.4.4 Fivetran
This section explains how Fivetran’s managed service ingests source data into Iceberg tables and why its automation can simplify adoption.
- Managed Iceberg ingestion path: Trace the example path from source systems through Fivetran to Parquet files in an Iceberg table, and explain how query engines access the table through Fivetran’s Iceberg REST Catalog.
Why it matters: The path shows how ingestion and query access fit together without a hand-built pipeline. - Automated operations and adoption fit: Explain which ingestion and table-management work Fivetran handles and why that makes it useful for organizations adopting Iceberg, especially for near-real-time syncs from business systems.
Why it matters: Managed ingestion can reduce the operational work involved in putting Iceberg into production.
Key terms: Managed Data Lake Service, Parquet, Fivetran Iceberg REST Catalog, Iceberg tables, fully managed ELT, schema mapping, metadata coordination, table lifecycle management, near-real-time syncs
6.4.5 Qlik
This subsection describes Qlik’s approach to streaming ingestion into Iceberg tables, emphasizing automated optimization, scale, and deployment flexibility.
- Qlik ingestion pipeline capabilities: Describe how Qlik captures data from high-throughput sources and writes it into Iceberg tables using declarative data flows, with support for schema evolution and partitioning strategies.
Why it matters: This explains what Qlik contributes to an Iceberg ingestion architecture. - Automated Iceberg table optimization: Explain how Qlik’s background optimization addresses operational work during continuous ingestion, and state the scale the subsection claims it can support.
Why it matters: Continuous ingestion can create table-maintenance work, so automation is a key part of Qlik’s value here. - Qlik deployment and workload fit: Describe the deployment and integration flexibility attributed to Qlik and identify the kinds of workloads for which the subsection presents it as a good fit.
Why it matters: These characteristics help determine whether Qlik fits a particular ingestion environment and workload.
Key terms: declarative data flows, Iceberg tables, schema evolution, partitioning strategies, compaction, small file management, partition optimization, operational overhead, connectors, multiple query engines
6.4.6 Airbyte
This section explains how Airbyte’s S3 Data Lake connector ingests data into Iceberg tables, what its write and schema limits are, and when it is a suitable choice.
- Connector-based Iceberg ingestion: Explain how Airbyte moves data from supported sources into Iceberg tables and why it suits periodic, connector-based ingestion.
Why it matters: This helps you decide whether a connector-based batch pipeline fits your ingestion needs. - Write modes and deduplication limits: Describe the connector’s write strategies and the assumptions behind merge-on-read deduplication.
Why it matters: The source’s change behavior determines whether Airbyte’s deduplication approach is appropriate. - Schema evolution boundaries: Distinguish the schema changes Airbyte can support from changes needing intervention, and describe how complex fields are stored.
Why it matters: These limits affect how much schema change a pipeline can absorb automatically. - Snapshots and stable reads: Explain how Airbyte syncs and truncate operations affect Iceberg snapshots and readers.
Why it matters: Stable reads matter when a sync involves a large update or an unstable source.
Key terms: Airbyte, S3 Data Lake connector, Parquet, Iceberg catalog, append, overwrite, merge-on-read, equality deletes, primary keys, cursor ordering
6.4.7 Confluent
This section explains how Confluent Tableflow turns Kafka streams into Iceberg tables, what it automates, and when its limitations matter.
- Kafka-to-Iceberg materialization: Explain how Tableflow moves streaming data from Kafka topics into Iceberg tables and makes those tables available to analytical query engines.
Why it matters: It shows how a team can make Kafka data available for lakehouse analytics without building its own ingestion pipeline. - Automated preparation and maintenance: Describe the ingestion work Tableflow automates and how Confluent Cloud for Apache Flink can prepare data before materialization.
Why it matters: Automation and early transformation reduce the work needed to make streaming data useful for analytics. - Tableflow fit and constraints: Justify when Tableflow is a good ingestion choice and identify the limitations that could rule it out.
Why it matters: Its convenience is valuable only if the team’s write, catalog, and deployment requirements fit its constraints.
Key terms: Tableflow, Kafka topics, materialized tables, Iceberg format, catalog services, Confluent Schema Registry, CDC stream materialization, file compaction, Confluent Cloud for Apache Flink, shift-left processing
6.4.8 Redpanda
This section explains how Redpanda makes Kafka-compatible topic data available as Iceberg tables and outlines its ingestion options and operational tradeoffs.
- Streaming topics as Iceberg tables: Explain how Redpanda makes streaming topic data available for analytics through Iceberg tables in cloud object storage, without an intermediate ETL pipeline.
Why it matters: It connects a Kafka-compatible streaming source to tools that query Iceberg tables. - Iceberg enablement and ingestion modes: Describe the settings needed to enable Iceberg support and distinguish what the three topic ingestion modes write.
Why it matters: The selected mode determines whether topic records remain binary or become structured Iceberg data. - Schema changes and failed records: Explain which schema changes Redpanda supports and what happens when schema conversion fails.
Why it matters: Schema changes and malformed records need not be treated as the same outcome. - Table partitioning and catalog options: Describe how topic-level partition settings affect reads and distinguish the two Iceberg catalog options.
Why it matters: These choices affect both query efficiency and how other tools discover table updates. - Integration fit and resource costs: Explain when this integration is useful and what resource or data-format limits the section identifies.
Why it matters: The simplified path to analytics still has capacity and format considerations.
Key terms: Redpanda topics, Iceberg tables, Parquet files, cloud object storage, iceberg_enabled, redpanda.iceberg.mode, key_value, value_schema_id_prefix, value_schema_latest, Schema Registry
6.4.9 Cloud-native ingestion services
This section compares cloud-native routes for getting data into Iceberg lakehouses and the integration trade-offs to assess.
- Managed Iceberg ingestion paths: Distinguish how AWS Glue, Azure Data Factory, and Google Cloud Dataflow deliver data for Iceberg-based lakehouses, including which paths write to Iceberg and which stage data for later registration.
Why it matters: A cloud-native ingestion service may require an additional step before its output becomes an Iceberg table. - Cloud streaming routes: Describe the stream-oriented routes the section gives for delivering data toward Iceberg tables.
Why it matters: The streaming route determines whether another processing component is needed to write the Iceberg table. - Cloud integration trade-offs: Explain why choosing a managed ingestion service requires checking its Iceberg integration beyond its cloud-native convenience.
Why it matters: A service that fits an existing cloud stack may still leave important Iceberg integration or maintenance needs unmet.
Key terms: AWS Glue, Azure Data Factory (ADF), Google Cloud Dataflow, Iceberg as a sink format, Parquet, Amazon Data Firehose, Azure Event Hubs, Google Pub/Sub, Spark Structured Streaming, Flink
6.4.10 Tool selection considerations
This section gives practical criteria for choosing a complementary set of Iceberg ingestion tools rather than seeking one tool for every workload.
- Workload and integration fit: Explain how latency, catalog compatibility, schema evolution, and transformation needs guide ingestion-tool selection. Give examples of tools suited to different needs without treating any tool as universally best.
Why it matters: Matching tools to the workload and Iceberg integration requirements helps avoid a pipeline that is fast but unsuitable for its data or transformations. - Sustainable ingestion toolset: Justify selecting a small, complementary set of ingestion tools based on operational burden, cloud environment, and organizational skills. Describe the trade-off between managed services’ lower operational burden and customization.
Why it matters: A toolset the team can deploy and support is more sustainable than a single supposedly universal tool or an unwieldy collection.
Key terms: ingestion model, catalog integration, schema evolution support, data transformation needs, operational maturity, cloud environment, operational burden, customization
6.5 Applying ingestion requirements in context
The section frames ingestion architecture as a context-dependent choice that balances competing requirements and existing constraints rather than optimizing for one need alone.
- Contextual ingestion tradeoffs: Explain why an ingestion architecture should balance multiple priorities and account for existing constraints instead of optimizing for a single requirement in isolation.
Why it matters: It keeps a compelling single requirement from driving an ingestion design that does not fit the wider platform.
Key terms: ingestion models, latency, data quality, operational burden, schema variability
6.5.1 Prioritizing low latency
Shows how to design Iceberg ingestion for seconds-level freshness while balancing fast commits against metadata growth and operational demands.
- Streaming for low-latency ingestion: Explain why streaming ingestion is preferred when events must become queryable in an Iceberg table within seconds, and describe the section’s transaction-monitoring example.
Why it matters: The required time to query new events drives the choice of ingestion model. - Commit frequency and operating tradeoffs: Explain why a low-latency Iceberg pipeline needs tuned commit frequency and operational safeguards rather than simply committing as often as possible.
Why it matters: Fast availability is useful only if the pipeline remains manageable and Iceberg performs well over time.
Key terms: low latency, streaming ingestion, Apache Flink, micro-batch commits, commit frequency, Iceberg snapshots, metadata bloat, monitoring and alerting, optimized file sizes
6.5.2 Managing high throughput
This section shows how to design high-volume Iceberg ingestion while controlling the file, metadata, and operational overhead that grows with scale.
- High-throughput ingestion design: Describe how a pipeline can ingest large volumes from many sources into Iceberg, using the media-streaming scenario to illustrate the roles of streaming, batching, and automated data handling.
Why it matters: The design must keep up with incoming data without making every source a separate manual ingestion problem. - File and metadata overhead control: Explain why high-volume writes need controls on file generation and commit frequency, and describe the measures the section gives for keeping Iceberg performance stable as volume grows.
Why it matters: Sustaining write volume is not enough if the resulting files and metadata make the table slower to use.
Key terms: high throughput, Apache Flink, checkpointing, deduplication, Qlik, Redpanda, file generation, commit frequency, snapshot growth, read amplification
6.5.3 Supporting complex transformations
This section explains when to transform data before writing it to Iceberg, why Spark or Flink fit that work, and what operational costs the approach brings.
- Pre-storage transformation benefits: Explain why an ingestion pipeline might join, clean, filter, mask, or enrich data before writing it to Iceberg, and how doing so can help downstream analytics and governance.
Why it matters: Transforming data during ingestion can make the stored data more useful and governed from the outset. - Spark and Flink capabilities: Describe why Spark and Flink are presented as options for complex ingestion transformations, using the healthcare example to illustrate the work involved.
Why it matters: The transformation work a pipeline requires helps determine which ingestion tool is suitable. - Transformation pipeline tradeoffs: Explain the reliability, latency, and maintenance costs that can accompany complex transformation logic, particularly stateful processing.
Why it matters: The benefits of transforming data early must be weighed against the effort of operating the pipeline reliably.
Key terms: data transformation, enrichment, filtering, data quality, governance policies, Apache Flink, Apache Spark, SQL, DataStream API, time-based joins
6.5.4 Handling schema evolution
This section explains how to select and configure ingestion tools so changing source schemas can be reflected in Iceberg tables without disrupting downstream workflows.
- Iceberg schema evolution support: Explain which schema changes Iceberg supports and why ingestion tools need to handle schema drift as source data evolves.
Why it matters: Matching the ingestion tool to Iceberg’s schema capabilities helps keep downstream workflows functioning as sources change. - Evolving event pipeline safeguards: Describe how the mobile-event example prepares for frequent schema changes before data reaches storage.
Why it matters: These safeguards let a pipeline accommodate routine event changes while flagging incompatible ones early. - Schema change operational tradeoffs: Explain the limitations and operational costs the section associates with frequent schema changes.
Why it matters: Accounting for these costs prevents automatic schema handling from becoming an operational burden.
Key terms: schema evolution, schema drift, schema registries, structured typing, schema registry, append, merge-on-read, schema mismatches, static schemas, metadata churn
6.5.5 Balancing operational overhead
This section shows how a small team can use managed ingestion to reduce operational work while weighing its flexibility and cost tradeoffs.
- Managed ingestion as an operational choice: Explain why a team might choose managed ingestion rather than build and maintain a more complex pipeline, especially when it needs to iterate quickly with limited staff.
Why it matters: The easiest pipeline to operate may be the best fit for a small team even when a custom pipeline offers more control. - Small-team SaaS ingestion path: Describe the managed ingestion path proposed for the scenario's SaaS data, including how the data can become queryable in Iceberg tables.
Why it matters: The scenario turns a preference for low overhead into a plausible route from SaaS sources to queryable Iceberg data. - Managed platform tradeoffs: Distinguish the operational benefits of managed ingestion from its limits for custom transformations, source changes, and cost at scale.
Why it matters: Lower maintenance is valuable, but it should not hide a mismatch with the data or an unfavorable cost at scale.
Key terms: operational overhead, managed operations, ingestion pipelines, cloud object storage, Parquet, Iceberg-compatible tables, schema mapping, incremental sync modes, advanced transformations, custom data logic
6.5.6 Considering existing cloud environments
Explains how an existing cloud environment shapes ingestion-tool choices and why those choices must balance integration benefits against flexibility and other requirements.
- Cloud ecosystem fit and tradeoffs: Explain why an organization may favor ingestion tools that fit its existing cloud platform, and describe the benefits and limitations of that choice using the AWS scenario.
Why it matters: A tool that fits the current environment may be easier to deploy and govern, even if it is not the most flexible option. - Context based ingestion selection: Explain why an ingestion strategy should balance multiple requirements and organizational constraints rather than begin with a preferred tool or optimize for one metric.
Why it matters: Evaluating competing needs helps avoid a pipeline that excels at one requirement but is difficult to operate or adapt.
Key terms: cloud-native services, cloud alignment, IAM, Glue Catalog, ingestion requirements, functional requirements, organizational constraints
6.6 Summary
Where this is used later
- Solution: Compaction (chapter 10) · Develops compaction as a table-maintenance solution.
- Monitoring and alerting integration (chapter 11) · Provides ingestion signals relevant to monitoring and alerting integration.
- Exploring Apache Iceberg’s metadata tables (chapter 10) · Examines the Iceberg metadata tables named here.
- What is compaction? (chapter 10) · explains why compaction is useful after frequent small writes
- Small files (chapter 10) · Connects frequent streaming writes to the small-file problem.
- Protecting against data loss and corruption (chapter 11) · Iceberg writes commit files into table snapshots.
- Merge-on-Read performance hits (chapter 10) · Builds on the read-time cost of merge-on-read changes.
- Responsibilities of the catalog (chapter 7) · The catalog’s responsibilities build on the idea that a table has a current metadata pointer.
Concepts explained in this chapter
- compactionA compaction strategy defines how fragmented data and delete files are consolidated based on factors such as activity, size, or freshness.
- checkpointingA checkpoint is persisted progress information from which an incremental data-processing workflow can resume after interruption.
- schema evolutionSchema evolution is the controlled modification of a dataset schema over time while preserving compatibility with existing data and readers.
- FlinkApache Flink is an open-source distributed processing framework for stateful batch and stream computations.
- Apache IcebergAn open table format for managing large analytic datasets with metadata-driven structure, snapshots, schema evolution, and transactional write capabilities.
- exactly-once deliveryExactly-once semantics guarantee that each input record contributes its intended processing effect no more than once despite retries or failures.
- ParquetApache Parquet is an open columnar file format designed for efficient storage and analytical processing of large datasets.
- SparkApache Spark is an open-source distributed processing framework for large-scale batch, streaming, and analytical workloads.
- deduplicationDeduplication is the removal or suppression of repeated records or events representing the same logical occurrence.
- throughputThe maximum volume or rate of data that an ingestion system can process within a specified period.
- batch pipelineBatch ingestion is the process of loading accumulated data into a target system in discrete processing runs.
- merge-on-readMerge-on-read mode is a table write strategy that records changes separately and merges them with base data when data is read.
- dead letter queueA dead-letter queue is a side channel that stores records rejected or unprocessable by a normal data-processing path for later inspection or correction.
- upsertAn upsert operation inserts records that are absent and updates records that already exist according to a matching key or condition.
- Iceberg tableAn Iceberg table is a logical table whose data and metadata are managed using the Apache Iceberg table format.
- RedpandaRedpanda is a Kafka-compatible distributed event-streaming platform designed for low-overhead, high-performance message processing.
- QlikQlik Sense is a business-intelligence and analytics platform for interactive data exploration, visualization, and reporting.
- merge operationA merge operation conditionally inserts, updates, or deletes target records based on matches with a source dataset.
- variant data typeA variant data type represents semistructured values whose fields or shapes may vary across records.
- controlled castingControlled casting is the deliberate coercion of incoming values into types compatible with a target schema under defined rules.
- fail-fastFail-fast ingestion rejects records or halts processing when incoming data does not conform to the expected schema.
- field idA stable field ID is an identifier that preserves a column's logical identity independently of its name or position in a schema.
- schema alignmentSchema alignment is the process of reconciling incoming fields and types with the definition of a target table.
- append modeAppend mode is a write configuration that adds new records to existing table data without replacing prior records.
- overwriteA table write operation that replaces existing data in a specified scope with new data.
- state managementState management is the persistence, tracking, and restoration of intermediate processing state in a long-running data workflow.
- ingestion layerAn ingestion layer is a system layer that collects data from source systems, transforms and cleans it, and loads it into storage tables.
- AWS GlueAWS Glue is a managed cloud service for data integration, discovery, preparation, and movement across data sources and destinations.
- observabilityObservability is the capability to infer a system's internal behavior and resource usage from its emitted telemetry and operational data.
- FivetranFivetran is a managed data-integration platform that automates movement of data from sources to destinations.
- copy-on-writeCopy-on-write is a data-modification pattern that rewrites affected base files immediately to materialize updates or deletions.
- delete fileA delete file is an auxiliary data structure that records rows or positional entries to be excluded from table results.
- equality deleteAn equality delete is a row-deletion representation that identifies records to remove by matching specified column values.
- position deleteA position delete is an Iceberg delete record that identifies a row by its position within a data file.
- reliabilityReliability is the ability of a system to perform consistently and preserve correct results despite failures, retries, and interruptions.
- resilienceFault tolerance is the ability of a system to continue operating correctly or recover without unacceptable data loss or corruption after component failures.
- freshnessData freshness is the recency of data relative to the time it was generated, updated, or expected to be available.
- operational burdenOperational overhead is the additional effort, resources, and complexity required to deploy, operate, maintain, and support a system.
- snapshotA consistent versioned representation of a table's state, including the data files that constitute that state.
- optimistic concurrency controlA concurrency-control approach that allows operations to proceed without locks and detects conflicts when changes are committed.
These guides are generated from the text of Manning books by Manning's knowledge graph and link to the sections they draw on. The full books are available on liveBook and at manning.com.
