Big Data Technologies

Chapter 11
Performance, Reliability and DataOps

Bachelors Program in IT
Big Data Technologies   •   Bachelor

Performance, Reliability and DataOps

Introduction

Big-data systems are valuable only when they produce results that are timely, correct, available, and reproducible. A data platform that processes terabytes quickly but silently drops records is not reliable. Similarly, a perfectly accurate pipeline that misses the business deadline is operationally unsuccessful. Performance, reliability, and DataOps therefore form a single engineering discipline rather than three unrelated concerns.

Performance concerns the efficient use of computational, storage, memory, and network resources. Reliability concerns the ability of a system to perform correctly and consistently despite failures, changing workloads, and imperfect data. DataOps applies software-engineering and operations practices—automation, testing, observability, version control, deployment discipline, and incident response—to data products and pipelines.

This chapter examines how engineers optimize distributed data systems and operate them safely in production. The emphasis is practical: selecting partitions and file formats, improving joins, allocating resources, designing monitoring and service-level objectives, and recovering from incidents without compromising data integrity.

Learning Objectives

By the end of this chapter, students should be able to:

  1. Explain how partitioning, file formats, compression, caching, and join strategies affect performance.
  2. Analyze bottlenecks using workload, storage, network, and execution metrics.
  3. Design monitoring and observability for batch and streaming pipelines.
  4. Apply testing, lineage, CI/CD, and reproducible deployment practices to data systems.
  5. Define service-level indicators, service-level objectives, and error budgets.
  6. Construct an incident-response and recovery plan for a production data platform.
  7. Evaluate trade-offs among speed, cost, correctness, availability, and maintainability.

1. A Performance Model for Distributed Data Processing

A data job usually spends time in several activities: reading data, decoding and decompressing it, transferring data across the network, computing transformations, shuffling records between workers, and writing results. A simplified model is:

Ttotal ≈ Tread + Tdecode + Tnetwork + Tcompute + Tshuffle + Twrite

The terms represent elapsed time for the corresponding stages. The approximation is useful for diagnosis, but stages may overlap through pipelining, so their arithmetic sum is not always the measured wall-clock time. The dominant stage is often the best initial optimization target.

A useful throughput measure is:

Throughput = D / T

where D is the amount of data processed, normally measured in bytes or records, and T is elapsed time in seconds. Units must therefore be bytes per second or records per second. Throughput alone is insufficient: a system can achieve high throughput while producing incorrect or excessively expensive results.

Latency describes the time required for one request or job. Batch systems commonly emphasize completion time, whereas interactive systems emphasize percentile latency, such as p95 or p99. The p95 latency is the value below which 95% of observed requests complete. Percentiles reveal tail behavior that averages conceal.

Bottlenecks and scalability

Amdahl’s law provides a disciplined way to reason about parallel speed-up. If fraction s of a workload is inherently serial and the remaining fraction is parallelizable across p workers, the ideal speed-up is:

S(p) = 1 / (s + (1 − s)/p)

Here, 0 ≤ s ≤ 1 and p ≥ 1. The formula assumes equal work distribution, no communication overhead, and no additional contention; real systems usually achieve less speed-up. For example, if s = 0.10 and p = 10, then S = 1/(0.10 + 0.90/10) = 5.26, not 10. This explains why adding workers eventually produces diminishing returns.

Engineers should distinguish:

  • CPU-bound work: processors are saturated while input and output are relatively fast.
  • I/O-bound work: workers wait for storage or network operations.
  • Memory-bound work: data structures exceed available memory, causing spilling or garbage-collection pressure.
  • Shuffle-bound work: distributed repartitioning causes network traffic and disk writes.
  • Skew-bound work: a small number of partitions receive disproportionate data and delay the entire job.

2. Data Layout: Partitions, Files, and Compression

Partitioning

A partition is a logical subset of data processed or stored together. At the storage layer, partitioning commonly creates directory paths such as date=2025-04-01/country=KE. At the execution layer, partitions are units assigned to workers.

Good partitioning supports selective reads, parallel execution, and manageable file sizes. A query filtering on a partition column can use partition pruning and avoid reading unrelated data. Appropriate partition columns are commonly low- or medium-cardinality attributes used frequently in predicates, such as date, region, or tenant. High-cardinality identifiers usually create too many directories and small files.

Partitioning has costs. Excessive partitions create scheduling overhead and many small files. Poorly chosen keys cause skew. A date partition may be effective for historical analysis but inadequate if nearly every query filters by customer. Partition design should therefore follow observed access patterns rather than personal preference.

For a rough planning estimate, if a dataset contains D bytes and the desired average partition size is P bytes, the initial partition count is:

N ≈ D / P

This is a planning estimate, not a guarantee. Actual counts depend on compression, file format, record distribution, and execution-framework overhead. For example, 1,000 GB of data with a target of 256 MB per partition gives approximately 4,000 partitions before accounting for skew or metadata.

File formats

Row-oriented formats such as CSV and JSON are convenient for interchange but inefficient for analytical scans. They repeat field names or delimiters, require expensive parsing, and generally lack strong column statistics. Columnar formats such as Parquet and ORC store values by column or column group. They allow a query to read only required columns, apply predicate pushdown, and use encoding schemes suited to similar values.

Design choiceMain advantageMain risk or limitation
CSV/JSONHuman-readable interchangeLarge scans, weak typing, expensive parsing
AvroSchema-aware row-oriented exchangeLess efficient for selective analytical reads
Parquet/ORCColumn pruning, compression, statisticsRequires compatible tooling and careful schema evolution
Many tiny filesFine-grained parallelism in theoryMetadata and scheduling overhead
Fewer large filesEfficient metadata and sequential I/OLess parallelism if files are excessively large

A practical lakehouse layout often uses columnar files for analytical tables, compacts small files, and retains raw immutable data separately for recovery and auditability.

Compression

Compression reduces storage and network transfer but requires CPU to compress and decompress. The correct choice depends on the bottleneck. Snappy and similar codecs favor speed; gzip often gives stronger compression at greater CPU cost; Zstandard provides configurable levels and is frequently useful when both compression ratio and speed matter.

The compression ratio is:

Rc = U / C

where U is uncompressed size and C is compressed size, using the same units. If 1,000 GB compresses to 250 GB, Rc = 1000/250 = 4, meaning a 4:1 ratio. Compression does not automatically improve performance: if CPU is saturated, a lighter codec may reduce elapsed time; if storage or network is the bottleneck, stronger compression may help.

The small-files problem

Thousands of small files increase object-store requests, metadata operations, task startup time, and planning overhead. Compaction combines them into appropriately sized files while preserving partition and schema rules. Compaction must be controlled: running it too frequently consumes resources, and concurrent compaction can conflict with readers or writers. Table formats that support snapshots and atomic commits make compaction safer.

3. Caching and Join Optimization

Caching

Caching retains frequently reused data in memory, local disk, or a remote cache. It is effective when a dataset is reused across multiple actions and fits sufficiently in the chosen cache. It is ineffective when data is read once, changes constantly, or exceeds cache capacity and causes eviction.

Engineers should measure cache hit rate, memory pressure, eviction rate, and end-to-end latency. Caching a large intermediate result may reduce repeated computation but increase garbage collection and displace more valuable data. Cache invalidation is also a correctness issue: stale reference data can produce incorrect reports. A cache policy should specify freshness, invalidation triggers, maximum size, and behavior during cache failure.

Join strategies

Joins are often among the most expensive operations because they may require data movement. Common strategies include:

  • Broadcast or replicated join: copy a small table to each worker and join locally. This avoids a large shuffle but requires the replicated table to fit safely in worker memory.
  • Hash join: hash both sides by the join key so matching keys reach the same worker. It is effective for equality joins but can require substantial memory and network transfer.
  • Sort-merge join: sort both inputs by the key and merge them. It is robust for large inputs but sorting and shuffling are expensive.
  • Bucketed or colocated join: store related datasets using compatible key organization so future joins require less movement.

A broadcast threshold should not be selected solely by table size on disk. The relevant size may be the in-memory representation, and multiple concurrent tasks can multiply memory demand. Engineers must account for executor memory, serialization overhead, skew, and concurrent queries.

Join performance also depends on data quality. Null keys, inconsistent types, hidden whitespace, and duplicate business keys can create incorrect results or unexpectedly large outputs. Before optimizing a join, verify key semantics and cardinality.

Skew and salting

If one key occurs far more frequently than others, hash partitioning sends excessive work to one task. Symptoms include a few long-running tasks, large shuffle blocks, and otherwise idle workers. Remedies include filtering invalid keys, handling heavy hitters separately, using a broadcast strategy where appropriate, or salting a hot key by adding a controlled sub-key. Salting changes the join logic and must be designed so that all valid matches are still produced; it is not a universal solution.

4. Resource Allocation and Cost-Aware Design

Resource allocation includes CPU cores, memory, local storage, network bandwidth, and worker count. Static allocation is predictable, while dynamic allocation can scale workers according to backlog or active tasks. Dynamic allocation improves utilization but may add startup latency and create instability if scaling reacts too aggressively.

A production configuration should establish:

  • memory limits and spill behavior;
  • CPU and concurrency limits;
  • maximum shuffle and temporary-storage usage;
  • queue priorities and admission control;
  • autoscaling boundaries;
  • workload isolation for critical and exploratory jobs.

Resource efficiency is not merely a cost concern. Oversubscription causes contention, noisy-neighbor effects, and unpredictable latency. Undersubscription creates avoidable queues. Capacity planning should use historical workload distributions, growth assumptions, peak periods, and recovery requirements.

A useful operational cost approximation is:

Cost ≈ r × t × u

where r is the resource consumption rate, t is elapsed usage time, and u is the unit price. The units must be compatible—for example, virtual-machine-hours multiplied by currency per virtual-machine-hour. This estimate excludes storage, network, licenses, and operational labor unless they are added explicitly.

5. Reliability Engineering for Data Systems

Reliability means more than uptime. A data pipeline may be available but unreliable if it publishes incomplete, duplicated, late, or semantically incorrect data. Reliability properties include:

  • Correctness: outputs conform to defined business and technical rules.
  • Completeness: expected records and partitions are present.
  • Consistency: repeated reads and related datasets agree according to the chosen consistency model.
  • Durability: committed data survives component failure.
  • Recoverability: the system can be restored within an acceptable time.
  • Idempotence: replaying the same input does not create unintended duplicate effects.

Failure patterns and controls

Distributed systems fail through worker loss, network partitions, object-store errors, schema changes, corrupted files, credential expiration, bad deployments, and upstream delays. A robust pipeline uses retries for transient failures, but retries must be bounded and use backoff. Retrying a non-idempotent write can duplicate data. Exactly-once claims must be examined carefully: they generally depend on transactional sinks, durable offsets, deterministic processing, and a defined failure model.

Checkpointing records progress so a streaming job can resume without reprocessing all input. Write-ahead logs, immutable raw zones, snapshots, and versioned tables support recovery. Recovery objectives should be explicit:

  • RPO (Recovery Point Objective): maximum acceptable data loss measured in time.
  • RTO (Recovery Time Objective): maximum acceptable time to restore service.

For example, an RPO of 15 minutes means the organization accepts losing at most approximately 15 minutes of committed updates under the stated scenario; it does not guarantee zero loss.

6. Monitoring and Observability

Monitoring reports known measurements; observability supports diagnosis by exposing internal state through metrics, logs, traces, events, and data-quality signals. A data platform should make it possible to answer: What failed? When? Which data was affected? Why did it fail? Has recovery completed?

Important metric categories include:

CategoryExample signals
Pipeline healthsuccess rate, duration, retries, backlog, missed schedules
Resource healthCPU, memory, spill, disk, network, garbage collection
Data healthrow counts, null rates, freshness, duplicates, distribution changes
Service healthrequest latency, error rate, availability, throughput
Governanceschema changes, access denials, lineage gaps, policy violations

Logs should be structured and include run identifiers, dataset identifiers, partition values, code version, and correlation identifiers. Sensitive values must not be logged. Traces are particularly useful when a request crosses orchestration, compute, storage, and catalog services.

A data-quality assertion should have an owner, threshold, severity, and response. For instance, a freshness check may alert when the newest partition is more than two hours old. Thresholds should distinguish warning from failure and should be calibrated to normal variation to avoid alert fatigue.

7. SLI, SLO, SLA, and Error Budgets

A Service-Level Indicator (SLI) is a measured aspect of service performance. An SLO is a target for that indicator over a stated period. An SLA is a formal agreement that may include consequences if targets are missed.

For availability, a common SLI is:

Availability = successful eligible operations / total eligible operations

The numerator and denominator must be defined precisely, including exclusions and time window. If 9,990 of 10,000 eligible operations succeed, availability is 0.999 = 99.9%.

An SLO of 99.9% over a 30-day month permits approximately 0.1% unavailability. Using a 30-day approximation:

Allowed downtime = 30 × 24 × 60 × 0.001 = 43.2 minutes

This is an approximation because calendar months differ and the SLO may count requests rather than clock time. For data products, SLOs may cover freshness, completeness, correctness, latency, and availability. A freshness SLI could be the age of the newest valid partition, while a completeness SLI could measure the proportion of expected records received.

The error budget is the permitted SLO failure:

Error budget = 1 − SLO target

An organization that consumes its error budget should reduce risky releases and prioritize reliability work. SLOs must not incentivize teams to manipulate measurement boundaries or sacrifice correctness for availability.

8. Testing, Lineage, and CI/CD

Testing layers

Data systems require multiple forms of testing:

  1. Unit tests verify functions and transformations in isolation.
  2. Schema tests verify field names, types, nullability, and compatibility rules.
  3. Data-quality tests check uniqueness, validity, referential integrity, ranges, and freshness.
  4. Integration tests exercise real storage, catalogs, queues, or databases in controlled environments.
  5. Contract tests verify assumptions between producers and consumers.
  6. End-to-end tests validate the complete path from source to published product.
  7. Performance tests measure behavior at expected and peak scale.
  8. Recovery tests verify restart, replay, rollback, and restoration procedures.

Tests should include representative edge cases: empty inputs, late events, duplicate events, null keys, schema evolution, time-zone boundaries, and unusually large partitions.

Lineage and reproducibility

Lineage records relationships among sources, transformations, tables, reports, and owners. It supports impact analysis, audit, incident scoping, and responsible deletion. Column-level lineage is valuable but can be difficult to maintain through dynamic SQL or user-defined functions.

Reproducibility requires versioned code, configuration, schemas, dependencies, and input references. A production result should be traceable to a code commit, job configuration, source snapshot or time range, and execution identity.

CI/CD for data

A data CI/CD pipeline may perform formatting and static checks, unit and contract tests, schema compatibility checks, security scans, build creation, deployment to a staging environment, integration tests, and controlled promotion. Safe release patterns include canary runs, blue-green deployment, feature flags, and automatic rollback.

Database and table changes require special care. A backward-compatible migration may add a nullable field before consumers adopt it; a destructive rename should be staged across multiple releases. Deployment automation should be idempotent and should separate code promotion from irreversible data deletion.

9. Incident Response and Recovery

Incident response begins before failure. Teams should define severity levels, on-call ownership, escalation paths, communication channels, runbooks, and decision authority. During an incident, responders should first protect users and data, then diagnose and repair.

A practical sequence is:

  1. Detect and acknowledge the alert.
  2. Establish scope, start time, affected products, and current data state.
  3. Mitigate—for example, pause publication, isolate a faulty source, or roll back a deployment.
  4. Preserve evidence such as logs, run identifiers, versions, and failed inputs.
  5. Recover using replay, checkpoint restoration, snapshot rollback, or corrected backfill.
  6. Validate completeness, correctness, freshness, and downstream impact.
  7. Communicate status and resolution.
  8. Conduct a blameless post-incident review and track corrective actions.

Recovery should distinguish reprocessing from backfilling. Reprocessing repeats a failed or suspect run, whereas backfilling intentionally computes historical data for a period. Both require idempotent writes, clear partition boundaries, and downstream notification. A successful job status is not sufficient evidence that the resulting data is correct.

10. Applied Case: An Illustrative Retail Analytics Platform

Background

A fictional retailer operates a cloud data platform receiving point-of-sale transactions, online orders, inventory events, and customer interactions. A daily sales dashboard must be refreshed by 06:00, and inventory data should normally be less than 30 minutes old.

Problem

The daily job increasingly takes four hours. Analysts report intermittent missing sales, while infrastructure costs rise. Monitoring reports only job success or failure and provides no partition-level quality information.

Analysis

An execution review finds that raw JSON files are stored in thousands of small objects. The transformation reads every historical partition because the date filter is applied after a non-prunable transformation. A customer-dimension join uses a large shuffle, and one anonymous customer key is extremely frequent. The job retries after a write timeout, sometimes appending duplicate records. There is no lineage showing which dashboards depend on affected tables.

Approach and solution

The team retains raw immutable files but converts curated data to Parquet, partitions it by transaction date and region, and schedules controlled compaction. It moves the date predicate before expensive transformations so partition pruning can occur. A compact customer dimension is broadcast after confirming safe in-memory size. The heavy anonymous key is handled separately, avoiding uncontrolled salting of all records.

The output table uses transactional or atomic partition replacement rather than blind append. Each run carries a unique run identifier and writes deterministically, making retries idempotent. Schema, freshness, duplicate, and reconciliation tests are added. Reconciliation compares source totals with curated totals by date and region, with documented exceptions.

The platform introduces metrics for input and output counts, partition age, task skew, shuffle volume, spill, and retry count. A dashboard SLO requires the daily sales product to be available by 06:00 on at least 99.5% of scheduled days, while the inventory product has a 30-minute freshness objective. CI/CD promotes tested transformations through staging and uses a canary date partition before broad deployment.

Outcome

The redesign reduces unnecessary scanning and shuffle, removes duplicate publication during retries, and makes missing partitions visible before dashboard publication. More importantly, operators can identify whether a delay arises from upstream lateness, compute saturation, skew, or data-quality failure. Exact numerical improvement would depend on workload and infrastructure, so performance claims should be measured rather than assumed.

Learning points

The case demonstrates that optimization and reliability reinforce one another. Columnar storage reduces work, but data contracts and reconciliation protect correctness. Idempotence makes retries safe. Observability turns an opaque failure into a diagnosable event. SLOs connect technical behavior to user expectations, while lineage makes impact analysis practical.

11. Governance, Ethics, and Contemporary Practice

Performance optimization must not weaken privacy or access control. Caching may expose sensitive data to broader infrastructure; logs may accidentally contain personal identifiers; replicated joins may copy restricted dimensions to many workers. Encryption, least privilege, retention limits, masking, tokenization, and access auditing remain necessary regardless of performance pressure.

Data-quality failures can produce discriminatory or harmful decisions when downstream systems use incomplete or biased data. Teams should document known limitations, monitor relevant population segments where lawful and appropriate, and provide correction procedures. Automated data systems need human ownership for consequential decisions.

Contemporary platforms increasingly combine lakehouse table formats, open metadata standards, policy-aware catalogs, managed orchestration, and machine-learning-assisted anomaly detection. AI can help identify unusual volumes, schema drift, or likely incident causes, but alerts require validation. Anomaly detection may confuse legitimate seasonal change with failure, and model-generated explanations should not replace evidence from logs, lineage, and controlled tests.

Best Practices Checklist

  • Choose partition keys from query and arrival patterns, not habit.
  • Compact small files and monitor file-size distributions.
  • Prefer typed columnar formats for analytical storage.
  • Optimize the largest cost driver first: scan, shuffle, compute, or skew.
  • Validate join-key semantics before changing join strategy.
  • Make writes idempotent and define replay behavior.
  • Monitor both system metrics and data-quality metrics.
  • Version code, schemas, dependencies, configuration, and input references.
  • Define SLIs and SLOs with explicit measurement boundaries.
  • Test rollback, replay, backfill, and disaster recovery.
  • Protect sensitive data in caches, logs, lineage, and replicated tables.
  • Conduct blameless post-incident reviews with accountable follow-through.

Chapter Summary

Performance engineering for big-data systems begins with identifying the dominant source of elapsed time: reading, decoding, network transfer, computation, shuffle, or writing. Partition pruning, columnar file formats, compression, compaction, caching, and suitable join strategies can reduce unnecessary work, but each introduces trade-offs involving memory, CPU, metadata, skew, and correctness. Resource allocation must balance throughput, latency, cost, and workload isolation.

Reliability requires correct, complete, durable, recoverable, and idempotent data products. Checkpointing, immutable raw data, snapshots, bounded retries, and explicit RPO and RTO objectives support recovery. DataOps extends these principles through observability, layered testing, lineage, reproducible builds, CI/CD, controlled releases, and disciplined incident response. SLIs and SLOs translate user expectations into measurable objectives, while error budgets guide the balance between feature delivery and reliability work. Effective production data engineering therefore treats performance, operational evidence, governance, and business impact as one connected system.

Key Terms

Partition: A logical subset of data processed or stored together.

Partition pruning: Avoiding reads of partitions that cannot satisfy a query predicate.

Columnar format: A storage format that organizes values primarily by column.

Compression ratio: Uncompressed size divided by compressed size.

Small-files problem: Performance degradation caused by excessive numbers of small data files.

Shuffle: Redistribution of records across workers, commonly by key.

Data skew: Unequal distribution of records or work across partitions.

Broadcast join: A join that copies a small relation to workers to avoid a large shuffle.

Cache: A faster temporary store retaining data for reuse.

Idempotence: The property that repeating an operation produces no unintended additional effect.

Checkpoint: Durable progress information used to resume processing.

Observability: The ability to infer internal system state from emitted evidence.

Lineage: Recorded relationships among data sources, transformations, and outputs.

DataOps: Operational and software-engineering practices applied to data products.

SLI: A measured indicator of service behavior.

SLO: A target value or range for an SLI over a defined period.

SLA: A formal service agreement that may include obligations or consequences.

Error budget: The permitted amount of SLO failure.

RPO: Maximum acceptable data loss measured in time.

RTO: Maximum acceptable time to restore service.

Review Questions

Short Answer Questions

  1. Why can adding more workers fail to produce proportional speed-up?
  2. What is partition pruning, and why does partition-column choice matter?
  3. Distinguish a broadcast join from a shuffle-based hash join.
  4. What information does lineage provide during an incident?
  5. Define RPO and RTO.

Long Answer Questions

  1. Explain how file format, compression, partitioning, and compaction interact in an analytical data lake.
  2. Describe a complete monitoring and observability design for a streaming pipeline.
  3. Discuss how idempotence, checkpointing, and snapshots support reliable recovery.
  4. Explain how CI/CD and schema evolution should be designed for production data systems.
  5. Evaluate the benefits and limitations of SLOs and error budgets for data products.

Analytical / Application Questions

  1. A 2 TB table is stored in 10,000 small JSON files, and queries usually select one month of data and five columns. Propose a redesigned layout and justify each decision.
  2. A join has 99% of tasks complete while one task runs for 40 minutes. Diagnose the likely cause and propose at least two remedies, including their risks.
  3. A daily pipeline publishes duplicate records after a transient write timeout. Design an incident response, correction, and prevention plan that preserves auditability.

Multiple Choice Questions with Answers

Question 1

Which storage design most directly enables column pruning for analytical queries?

A. CSV files with repeated headers

B. A columnar format such as Parquet

C. A row-oriented log with no schema

D. Uncompressed text files

Correct Answer: B. A columnar format such as Parquet

Question 2

A dataset of 1,000 GB is planned with an average partition size of 256 MB. Approximately how many partitions are indicated by the simple planning estimate?

A. 256

B. 1,000

C. 4,000

D. 256,000

Correct Answer: C. 4,000

Question 3

Which condition most strongly suggests data skew?

A. All tasks finish at nearly the same time

B. A few tasks run much longer while most workers are idle

C. The query reads only selected columns

D. Compression reduces network transfer

Correct Answer: B. A few tasks run much longer while most workers are idle

Question 4

What is the principal advantage of a broadcast join?

A. It eliminates the need for a join key

B. It avoids replicating any data

C. It can avoid a large shuffle when one input is safely small

D. It guarantees zero memory use

Correct Answer: C. It can avoid a large shuffle when one input is safely small

Question 5

If 9,990 of 10,000 eligible operations succeed, what is the availability SLI?

A. 90%

B. 99%

C. 99.9%

D. 99.99%

Correct Answer: C. 99.9%

Question 6

Which practice makes retrying a data write safer?

A. Blindly appending every retry

B. Using an idempotent, deterministic write

C. Deleting all historical data first

D. Disabling validation

Correct Answer: B. Using an idempotent, deterministic write

Question 7

What does an SLO represent?

A. A measured indicator only

B. A target for a measured service indicator over a defined period

C. A storage encryption key

D. A database primary key

Correct Answer: B. A target for a measured service indicator over a defined period

Question 8

Which test is specifically intended to verify assumptions between data producers and consumers?

A. Contract test

B. Syntax highlighting

C. Compression test

D. Cache eviction test

Correct Answer: A. Contract test

Question 9

For a 99.9% SLO over an approximate 30-day month, the permitted downtime is approximately:

A. 4.32 minutes

B. 14.4 minutes

C. 43.2 minutes

D. 432 minutes

Correct Answer: C. 43.2 minutes

Question 10

What is the primary purpose of a checkpoint in stream processing?

A. To permanently compress every source file

B. To record durable progress for restart and recovery

C. To remove the need for monitoring

D. To guarantee that upstream data is correct

Correct Answer: B. To record durable progress for restart and recovery

Big Data Technologies
Chapter 11 of 14