Kappa architecture (streaming only) in Hadoop - Deep Dive
┌───────────────┐
│ Data Sources │
└──────┬────────┘
│ Stream of data
▼
┌───────────────┐
│ Streaming │
│ Processing │
│ Engine │
└──────┬────────┘
│ Processed results
▼
┌───────────────┐
│ Output / │
│ Storage │
└───────────────┘┌───────────────┐
│ Data Sources │
└──────┬────────┘
│
▼
┌─────────────────────┐
│ Distributed Log │
│ (Immutable, Replay) │
└──────┬───────────────┘
│
▼
┌─────────────────────┐
│ Stream Processing │
│ Engine (Stateful) │
│ Checkpointing │
└──────┬───────────────┘
│
▼
┌───────────────┐
│ Output / │
│ Storage │
└───────────────┘Practice
What is the main idea behind the Kappa architecture in data processing?
Solution
Step 1: Understand Kappa architecture concept
Kappa architecture focuses on processing data as a stream only once, avoiding batch processing.Step 2: Compare with other architectures
Unlike Lambda architecture, Kappa does not separate batch and streaming layers.Final Answer:
Process data only once as a continuous stream -> Option BQuick Check:
Kappa = single stream processing [OK]
- Confusing Kappa with Lambda architecture
- Thinking Kappa uses batch processing
- Assuming multiple processing passes
Which of the following is a correct component used in a typical Kappa architecture setup?
A) Separate batch and speed layers
B) Hadoop MapReduce for batch jobs
C) HDFS for storing batch data
D) Kafka for streaming data
Solution
Step 1: Identify streaming components in Kappa
Kappa architecture uses streaming tools like Kafka to handle real-time data.Step 2: Exclude batch-specific components
Batch tools like MapReduce or HDFS batch storage are not part of Kappa's streaming-only design.Final Answer:
Kafka for streaming data -> Option DQuick Check:
Kappa uses Kafka, not batch tools [OK]
- Choosing batch tools like MapReduce
- Selecting batch storage like HDFS
- Thinking Kappa has separate batch layers
Consider this simplified streaming code snippet using Kafka and Spark in a Kappa architecture:
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('KappaExample').getOrCreate()
# Read stream from Kafka topic
stream_df = spark.readStream.format('kafka') \
.option('kafka.bootstrap.servers', 'localhost:9092') \
.option('subscribe', 'events') \
.load()
# Select and cast value to string
value_df = stream_df.selectExpr('CAST(value AS STRING)')
# Write stream to console
query = value_df.writeStream.outputMode('append').format('console').start()
query.awaitTermination()What will this code do?
Solution
Step 1: Understand the streaming read
The code reads a continuous stream from Kafka topic 'events' using Spark Structured Streaming.Step 2: Analyze output mode and sink
Output mode 'append' with console sink means new messages print continuously to console.Final Answer:
Continuously print new Kafka messages from 'events' topic to console -> Option AQuick Check:
Streaming read + console output = continuous print [OK]
- Thinking it reads all past messages once
- Assuming it writes back to Kafka
- Expecting schema error without explicit schema
Identify the error in this Kappa architecture streaming code snippet using Kafka and Spark:
stream_df = spark.readStream.format('kafka') \
.option('kafka.bootstrap.servers', 'localhost:9092') \
.option('subscribe', 'events') \
.load()
value_df = stream_df.selectExpr('CAST(value AS STRING)')
query = value_df.writeStream.outputMode('complete').format('console').start()
query.awaitTermination()What is the problem?
Solution
Step 1: Check output mode usage
Output mode 'complete' requires aggregation queries to output full results.Step 2: Analyze query type
This query only selects and casts values without aggregation, so 'complete' mode is invalid.Final Answer:
Output mode 'complete' is invalid for streaming without aggregation -> Option AQuick Check:
'complete' mode needs aggregation [OK]
- Assuming missing schema causes error
- Thinking Kafka address is wrong
- Believing code runs without error
You want to build a real-time dashboard using Kappa architecture that shows the count of events per user from a Kafka stream. Which approach fits best?
A) Use two separate systems: one for batch counts and one for streaming counts, then merge results.
B) Store Kafka data in HDFS, run daily batch jobs to count events per user, then update dashboard.
C) Use Spark Structured Streaming to read Kafka, group by user, count events, and update dashboard continuously.
D) Read Kafka stream once and save raw data only, no processing.
Solution
Step 1: Understand Kappa architecture goal
Kappa architecture processes data as a stream only, avoiding batch layers.Step 2: Choose streaming aggregation for real-time dashboard
Using Spark Structured Streaming to group and count events per user fits Kappa's streaming-only design and real-time needs.Step 3: Exclude batch or hybrid approaches
Batch jobs or separate batch/stream systems contradict Kappa principles.Final Answer:
Use Spark Structured Streaming to read Kafka, group by user, count events, and update dashboard continuously. -> Option CQuick Check:
Real-time + streaming aggregation = Use Spark Structured Streaming to read Kafka, group by user, count events, and update dashboard continuously. [OK]
- Choosing batch processing for real-time needs
- Using hybrid batch and streaming systems
- Not processing data, just storing raw stream
Ready to prove it?
Pass the test and this pattern moves unknown
