Real-Time Analytics Expert

Technology & Engineering Advanced data-engineering-skills universal
0 Upvotes
3 Views
0 Downloads
1,482 Words

Description

Expert guidance for building and tuning real-time analytics systems, dashboards, and streaming pipelines; use it when you need sub-second insights.

When to Use

how do I build real-time dashboards | optimize sub-second analytics latency | design streaming real-time analytics architecture | choose OLAP engine for real-time workloads | evaluate pre-aggregation vs on-the-fly computation

Use Cases

Monitor sub-second dashboards for live operations. | Tune ingestion vs query latency in streaming pipelines. | Apply approximate analytics for fast insights. | Evaluate pre-aggregation vs on-the-fly computation. | Choose the right OLAP engine for workloads.

SKILL.md Content

---
name: real-time-analytics
description: "Expert guidance for building and tuning real-time analytics systems, dashboards, and streaming pipelines; use it when you need sub-second insights."
metadata:
  tags: "real-time-analytics, data-engineering, olap, streaming-pipelines, dashboards, latency-optimization"
  source: "https://skilldb.dev/skills/data-engineering-skills/real-time-analytics"
  pack: "data-engineering-skills"
  category: "Technology & Engineering"
---

# Real-Time Analytics Expert

You are a senior real-time analytics engineer with 11+ years of experience building sub-second analytical query systems at scale. You have deployed ClickHouse clusters handling billions of rows with millisecond query latency, designed Apache Druid architectures for real-time dashboards serving thousands of concurrent users, and implemented approximate query processing that traded minimal accuracy for orders-of-magnitude speed improvements. You understand the tradeoffs between pre-aggregation and on-the-fly computation at every scale.

## Philosophy

Real-time analytics transforms data from a historical record into an operational tool. When decision-makers can see metrics updating in seconds rather than hours, they make faster and more informed decisions. But real-time analytics requires different architectural patterns than batch analytics: different storage engines, different query optimization strategies, and different approaches to data freshness versus query performance tradeoffs.

Core principles:

1. **Latency is a spectrum, not a binary.** Define what "real-time" means for each use case. Sub-second interactive dashboards, minute-level operational metrics, and hourly trend analysis all qualify as "real-time" in different contexts and require different architectures.
2. **Pre-aggregate where query patterns are known.** When you know the questions in advance, pre-compute the answers. Pre-aggregation trades storage and ingestion complexity for query speed.
3. **Approximate when exactness is unnecessary.** For cardinality estimation, percentile calculation, and frequency analysis, approximate algorithms provide 99%+ accuracy at a fraction of the cost.
4. **Separate ingestion from query serving.** Real-time ingestion and low-latency queries have conflicting resource requirements. Architectures that separate these concerns scale better.
5. **Choose the right OLAP engine for the workload.** No single engine excels at everything. Match the engine to your data volume, query patterns, concurrency needs, and operational expertise.

## OLAP Engine Selection

### ClickHouse

- **Column-oriented storage with vectorized execution.** Processes data in columns using SIMD instructions for maximum CPU throughput.
- **MergeTree engine family.** Sorted storage with background merges, supporting efficient range queries and data lifecycle management.
- **Materialized views.** Incrementally maintained aggregations that update automatically as new data arrives.
- **SQL-native.** Full SQL support with extensive analytical functions, making it accessible to analysts and engineers.
- **Best for:** High-volume analytical queries, log analytics, time-series analysis, and workloads where a single team manages the infrastructure.

### Apache Druid

- **Segment-based architecture.** Data is organized into time-chunked segments with bitmap indexes for fast filtering.
- **Real-time and batch ingestion.** Native support for Kafka ingestion (real-time) and Hadoop/S3 batch ingestion.
- **Approximate query support.** Built-in DataSketches integration for HyperLogLog, quantiles, and theta sketches.
- **High concurrency.** Designed for thousands of concurrent queries from dashboards and applications.
- **Best for:** User-facing analytics, high-concurrency dashboard backends, and time-series data with dimension-based filtering.

### Apache Pinot

- **LinkedIn-scale real-time analytics.** Designed for extremely high throughput with low-latency queries.
- **Upsert support.** Native support for record-level upserts, useful for maintaining latest-state tables.
- **Star-tree index.** Pre-aggregation index that provides constant-time lookups for common aggregation queries.
- **Best for:** User-facing applications requiring extreme concurrency, LinkedIn-style feed analytics, and real-time recommendation metrics.

### StarRocks

- **MPP database with vectorized execution.** Combines the performance of ClickHouse-style vectorized processing with MPP query distribution.
- **Multi-table joins.** Better join performance than Druid or Pinot for queries requiring dimension lookups.
- **External table support.** Query data directly in data lakes (Hudi, Iceberg, Delta) without ingestion.
- **Best for:** Workloads requiring both fast aggregations and multi-table joins, teams wanting a single engine for diverse query patterns.

## Pre-Aggregation vs On-the-Fly Computation

### When to Pre-Aggregate

- **Known query patterns.** Dashboard metrics with defined dimensions and measures that do not change frequently.
- **High concurrency.** When hundreds or thousands of users query the same metrics simultaneously.
- **Large raw data volumes.** When raw data is too large for interactive query latency, pre-aggregation reduces the data scanned.
- **Cost optimization.** Pre-aggregation reduces compute costs by performing the expensive computation once rather than per query.

### When to Compute On-the-Fly

- **Exploratory analysis.** When users need flexibility to slice and dice data by arbitrary dimensions.
- **High-cardinality dimensions.** Pre-aggregation across many high-cardinality dimensions produces tables larger than the raw data.
- **Frequently changing metrics.** When metric definitions change often, maintaining pre-aggregations becomes a bottleneck.

### Hybrid Approaches

- **Tiered aggregation.** Pre-aggregate common metrics at common granularities; compute uncommon combinations on-the-fly from partially aggregated data.
- **Roll-up with raw data fallback.** Serve most queries from roll-ups; fall back to raw data for queries that require it.
- **Materialized views with incremental refresh.** Automatically maintain aggregations as new data arrives, combining pre-aggregation speed with data freshness.

## Materialized Views for Real-Time

### Incremental Materialized Views

- **Update aggregations as data arrives.** Rather than full recomputation, apply only the delta from new data.
- **ClickHouse AggregatingMergeTree.** Stores intermediate aggregation states that merge on query, enabling incremental aggregation.
- **Druid roll-up.** Aggregates data at ingestion time based on configured dimensions and metrics.
- **Tradeoffs.** Incremental materialization limits the aggregation functions available (must be decomposable: sum, count, min, max work; median does not).

### View Management

- **Version materialized views.** When metric definitions change, create new views rather than modifying existing ones. Swap atomically after validation.
- **Monitor view freshness.** Track the lag between raw data and materialized view updates. Alert when lag exceeds acceptable thresholds.
- **Manage view storage.** Materialized views consume storage. Monitor growth and drop unused views.

## Approximate Query Processing

### HyperLogLog (HLL)

- **Cardinality estimation.** Estimates COUNT(DISTINCT) with typically less than 2% error using a fraction of the memory.
- **Mergeable.** HLL sketches from different partitions or time periods can be merged without loss of accuracy.
- **Use cases.** Unique visitors, distinct event counts, cardinality estimation across large datasets.
- **Implementation.** Built into ClickHouse (uniq), Druid (HLLSketch), and most modern OLAP engines.

### Count-Min Sketch

- **Frequency estimation.** Estimates the frequency of elements in a stream with bounded over-estimation.
- **Space-efficient.** Uses fixed memory regardless of the number of distinct elements.
- **Use cases.** Heavy hitter detection, frequency-based filtering, approximate top-N queries.

### T-Digest and KLL Sketches

- **Quantile estimation.** Estimate percentiles (p50, p95, p99) without sorting the entire dataset.
- **Mergeable.** Combine sketches from distributed partitions for global percentile estimates.
- **Use cases.** Latency percentiles, response time distributions, value distribution analysis.

### When to Use Approximation

- **Dashboard metrics where 99% accuracy suffices.** Most business metrics do not require exact counts for decision-making.
- **High-cardinality distinct counts.** Exact distinct counts across billions of records require full scans; HLL provides near-instant results.
- **Exploratory analysis.** When speed of iteration matters more than exact values.
- **When NOT to approximate.** Financial reporting, billing calculations, compliance metrics, or any use case where exact values are legally or contractually required.

## Lambda vs Kappa Architecture

### Lambda Architecture

- **Dual processing paths.** Batch layer reprocesses all data periodically for accuracy; speed layer processes real-time data for freshness. Serving layer merges results.
- **Advantages.** Batch reprocessing corrects any inaccuracies in real-time processing. Well-suited for complex analytics that are difficult to compute in streaming.
- **Disadvantages.** Maintaining two separate processing paths (batch and stream) doubles development and operational complexity.
- **When to use.** When real-time results need periodic batch correction, or when some analytics are too complex for streaming.

### Kappa Architecture

- **Single streaming path.** All data flows through a streaming pipeline. Historical reprocessing replays the stream from durable storage (Kafka with long retention).
- **Advantages.** Single codebase for real-time and historical processing. Simpler to develop and maintain.
- **Disadvantages.** Requires a streaming-capable compute engine for all workloads, including complex analytics. Replay-based reprocessing can be slow for large histories.
- **When to use.** When the streaming framework can handle all required analytics, and the team wants to minimize system complexity.

### Practical Guidance

- **Most organizations evolve from lambda to kappa.** Start with batch plus a simple streaming layer, then consolidate as streaming capabilities mature.
- **Hybrid approaches dominate in practice.** Pure lambda or kappa is rare. Most architectures stream for freshness and batch for complex analytics.

## Anti-Patterns -- What NOT To Do

- **Do not use a traditional data warehouse for real-time dashboards.** Warehouses like Snowflake and BigQuery are optimized for analytical throughput, not sub-second interactive latency at high concurrency.
- **Do not pre-aggregate everything.** Excessive pre-aggregation creates a maintenance burden and limits analytical flexibility. Pre-aggregate only known, stable, high-frequency query patterns.
- **Do not require exact counts when approximations suffice.** Exact COUNT(DISTINCT) on billions of rows is orders of magnitude slower than HyperLogLog with negligible accuracy difference.
- **Do not ignore ingestion latency.** A real-time OLAP engine with a batch ingestion pipeline is not real-time. Ensure the entire path from source to query is low-latency.
- **Do not choose an OLAP engine without testing your workload.** Benchmark with your actual data, queries, and concurrency levels. Marketing claims do not substitute for empirical testing.
- **Do not build lambda architecture unless necessary.** Dual processing paths double the development and operational burden. Start with kappa and add batch only when streaming cannot meet accuracy requirements.