Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably and efficiently operate Apache Flink

Flink Forward
Flink ForwardFlink Forward
1
Keep it going – How to reliably
and efficiently operate Apache
Flink
Robert Metzger
@rmetzger
About this talk
§ Part of the Apache Flink training offered by data Artisans
§ Subjective collection of most frequent ops questions on the user
mailing list.
Topics
§ Capacity planning
§ Deployment best practices
§ Tuning
• Work distribution
• Memory configuration
• Checkpointing
• Serialization
§ Lessons learned
2
Capacity Planning
3
First step: do the math!
§ Think through the resource requirements of your
problem
• Number of keys, state per key
• Number of records, record size
• Number of state updates
• What are your SLAs? (downtime, latency, max throughput)
§ What resources do you have?
• Network capacity (including Kafka, HDFS, etc.)
• Disk bandwidth (RocksDB relies on the local disk)
• Memory
• CPUs 4
Establish a baseline
§ Normal operation should be able to avoid back
pressure
§ Add a margin for recovery – these resources will be
used to “catch up”
§ Establish your baseline with checkpointing
enabled
5
Consider spiky loads
§ For example, operators downstream from a
Window won’t be continuously busy
§ How much downstream parallelism is required
depends on how quickly you expect to process
these spikes
6
Example: The Setup
§ Data:
• Message size: 2 KB
• Throughput: 1,000,000 msg/sec
• Distinct keys: 500,000,000 (aggregation in window: 4 longs per key)
• Checkpoint every minute
7
Kafka	
Source
keyBy
userId
Sliding	
Window
5m	size
1m	slide
Kafka	
Sink
RocksDB
Example: The setup
§ Hardware:
• 5 machines
• 10 gigabit Ethernet
• Each machine running a
Flink TaskManager
• Disks are attached via
the network
§ Kafka is separate
8
TM	1	
TM	2	
TM	3	
TM	4	TM	5	
NAS Kafka
Example: A machine’s perspective
9
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
2 KB * 1,000,000 = 2GB/s
2GB/s / 5 machines = 400
MB/s
Shuffle:	320	MB/s
80	MB/s
Shuffle:	320	MB/s
400MB/s / 5 receivers =
80MB/s
1 receiver is local, 4 remote:
4 * 80 = 320 MB/s out
Kafka:	67	MB/s
Excursion 1: Window emit
10
How much data is the window emitting?
Recap: 500,000,000 unique users (4 longs per key)
Sliding window of 5 minutes, 1 minute slide
Assumption: For each user, we emit 2 ints (user_id, window_ts) and 4 longs
from the aggregation = 2 * 4 bytes + 4 * 8 bytes = 40 bytes per key
100,000,000 (users) * 40 bytes = 4 GB every minute from each machine
Example: A machine’s perspective
11
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
2 KB * 1,000,000 = 2GB/s
2GB/s / 5 machines = 400
MB/s Shuffle:	320	MB/s
80	MB/s
Shuffle:	320	MB/s
400MB/s / 5 receivers =
80MB/s
1 receiver is local, 4 remote:
4 * 80 = 320 MB/s out
Kafka:	67	MB/s
4 GB / minute => 67 MB/
second (on average)
Example: Result
12
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
Shuffle:	320	MB/s
80	MB/s
Shuffle:	320	MB/s
Kafka:	67	MB/s
Total	In:	720	MB/s Total	Out:	387	MB/s
Example: Result
13
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	mb/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 mb/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 mb/s
Shuffle:	320	mb/s
80	mb/s
Shuffle:	320	mb/s
Kafka:	67	mb/s
Total	In:	720	mb/s Total	Out:	387	mb/s
WRONG.
We forgot:
• Disk Access to RocksDB
• Checkpointing
Example: Intermediate Result
14
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
Shuffle:	320	MB/s
Shuffle:	320	MB/s Kafka:	67	MB/s
Disk	read:	? Disk	write:	?
Excursion 2: Window state access
15
How is the Window operator accessing state?
Recap: 1,000,000 msg/sec. Sliding window of 5 minutes, 1 minute slide
Assumption: For each user, we store 2 ints (user_id, window_ts) and 4 longs
from the aggregation = 2 * 4 bytes + 4 * 8 bytes = 40 bytes per key
5 minute window (window_ts)
key (user_id)
value (long, long, long, long)
Incoming data
For each incoming record, update
aggregations in 5 windows
Excursion 2: Window state access
16
How is the Window operator accessing state?
For each key-value access, we need to retrieve 40 bytes from disk,
update the aggregates and put 40 bytes back
per machine: 40 bytes * 5 windows * 200,000 msg/sec = 40 MB/s
Example: Intermediate Result
17
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
Shuffle:	320	MB/s
Shuffle:	320	MB/s Kafka:	67	MB/s
Total	In:	760	MB/s Total	Out:	427	MB/s
Disk	read:	40	MB/s Disk	write:	40	MB/s
Excursion 3: Checkpointing
18
How much state are we checkpointing?
per machine: 40 bytes * 5 windows * 100,000,000 keys = 20 GB
We checkpoint every minute, so
20 GB / 60 seconds = 333 MB/s
Example: Final Result
19
TaskManager n
Kafka Source
keyBy
window
Kafka Sink
Kafka:	400	MB/s
10 Gigabit Ethernet (Full Duplex)
In: 1250 MB/s
10 Gigabit Ethernet (Full Duplex)
Out: 1250 MB/s
Shuffle:	320	MB/s
Shuffle:	320	MB/s Kafka:	67	MB/s
Total	In:	760	MB/s Total	Out:	760	MB/s
Disk	read:	40	MB/s Disk	write:	40	MB/s
Checkpoints:	333	MB/s
Example: Network requirements
20
TM	2	
TM	3	
TM	4	
TM	5	
TM	1	
NAS
In: 760 MB/s
Out: 760 MB/s
5x 80 MB/s =
400 MB/s
Kafka
400 MB/s * 5 +
67 MB/s * 5 = 2335 MB/s
Overall network traffic:
2 * 760 * 5 + 400 + 2335
= 10335 MB/s
= 82,68 Gigabit/s
Deployment Best Practices
Things you should consider before putting a job in production
21
Deployment Options
§ Hadoop YARN integration
• Cloudera, Hortonworks, MapR, …
• Amazon Elastic MapReduce (EMR), Google Cloud
dataproc
§ Mesos & DC/OS integration
§ Standalone Cluster (“native”)
• provided bash scripts
• provided Docker images
22
Flink in containerland
DAY 3 / 3:20 PM - 4:00 PM
MASCHINENHAUS
Choose your state backend
Name Working state State backup Snapshotting
RocksDBStateBackend Local disk	(tmp
directory)
Distributed file	
system
Asynchronously
• Good	for	state	larger	than	available	memory
• Supports incremental	checkpoints
• Rule	of	thumb:	10x	slower	than	memory-based	backends
FsStateBackend JVM	Heap Distributed file	
system
Synchronous	/	Async
• Fast, requires	large	heap
MemoryStateBackend JVM	Heap JobManager JVM	
Heap
Synchronous	/	Async
• Good	for	testing	and	experimentation with	small	state	(locally) 23
Asynchronous Snapshotting
24
SyncAsync
Check the production readiness list
§ Explicitly set the max parallelism for rescaling
• 0 < parallelism <= max parallelism <= 32768
• Max parallelism > 128 has some impact on performance and
state size
§ Set UUIDs for all operators to allow changing the
application between restores
• By default Flink generates UUIDs
§ Use the new ListCheckpointed and
CheckpointedFunction interfaces
25
Production Readiness Checklist: https://ci.apache.org/projects/flink/flink-docs-release-
1.3/ops/production_ready.html
Tuning: CPU usage / work
distribution
26
Configure parallelism / slots
§ These settings influence how the work is
spread across the available CPUs
§ 1 CPU per slot is common
§ multiple CPUs per slot makes sense if one slot
(i.e. one parallel instance of the job) performs
many CPU intensive operations
27
Operator chaining
28
Task slots
29
Slot sharing (parallelism now 6)
30
Benefits of slot sharing
§ A Flink cluster needs exactly as many task slots
as the highest parallelism used in the job
§ Better resource utilization
§ Reduced network traffic
31
What can you do?
§ Number of TaskManagers vs number of slots
per TM
§ Set slots per TaskManager
§ Set parallelism per operator
§ Control operator chaining behavior
§ Set slot sharing groups to break operators into
different slots
32
Tuning: Memory Configuration
33
Memory in Flink (on YARN)
34
YARN	Container	Limit
JVM	Heap	(limited	by	Xmx parameter)
Other	JVM	allocations:	Classes,	metadata,	DirectByteBuffers
JVM	process	size
Netty RocksDB?
Network
buffersInternal	
Flink	
services
User	code
(window	contents,	…) Memory
Manager
Example: Memory in Flink
35
YARN	Container	Limit:	2000	MB
JVM	Heap:	Xmx:	1500MB =	2000	*	0.75	(default	cutoff	is	
25%)
Other	JVM	allocations:	Classes,	metadata,	stacks,	…		
JVM	process	size:	<	2000	MB
Netty ~64MB RocksDB?
MemoryManager?
up	to	70%	of	the	available	heap
§ TaskManager: 2000 MB on YARN
“containerized.heap-cutoff-ratio”
Container request size
“taskmanager.memory.fraction“
RocksDB	Config
Network	
Buffers
„taskmanager.network.
memory.min“	(64MB)	
and „.max“	(1GB)
Tuning: Checkpointing
36
Checkpointing
§ Measure, analyze and try out!
§ Configure a checkpointing interval
• How much can you afford to reprocess on restore?
• How many resources are consumed by the checkpointing? (cost in
throughput and latency)
§ Fine-tuning
• “min pause between checkpoints”
• “checkpoint timeout”
• “concurrent checkpoints”
§ Configure exactly once / at least once
• exactly once does buffer alignment spilling (can affect latency)
37
38
Conclusion
39
Tuning Approaches
§ 1. Develop / optimize job locally
• Use data generator / small sample dataset
• Check the logs for warnings
• Check the UI for backpressure, throughput,
metrics
• Debug / profile locally
§ 2. Optimize on cluster
• Checkpointing, parallelism, slots, RocksDB,
network config, …
40
The usual suspects
§ Inefficient serialization
§ Inefficient dataflow graph
• Too many repartitionings; blocking I/O
§ Slow external systems
§ Slow network, slow disks
§ Checkpointing configuration
41
Q & A
Let’s discuss …
4
2
4
Thank you!
@rmetzger | @theplucas
@dataArtisans
We are hiring!
data-artisans.com/careers
44
Set UUIDs for all (stateful) operators
§ Operator UUIDs are needed to restore state from a
savepoint
§ Flink will auto—generate UUIDs, but this results in
fragile snapshots.
§ Setting UUIDs in the API:
DataStream<String> stream = env
.addSource(new StatefulSource())
.uid("source-id") // ID for the source operator
.map(new StatefulMapper())
.uid("mapper-id") // ID for the mapper
.print();
45
Use the savepoint tool for deletions
§ Savepoint files contain only metadata and
depend on the checkpoint files
• bin/flink savepoint -d :savepointPath
§ There is work in progress to make savepoints
self-contained
à deletion / relocation will be much easier
46
Avoid the deprecated state APIs
§ Using the Checkpointed interface will prevent you from rescaling
your job
§ Use ListCheckpointed (like Checkpointed, but redistributeble) or
CheckpointedFunction (full flexibility) instead.
Production Readiness Checklist:
https://ci.apache.org/projects/flink/flink-docs-release-
1.3/ops/production_ready.html
47
Explicitly set max parallelism
§ Changing this parameter is painful
• requires a complete restart and loss of all
checkpointed/savepointed state
§ 0 < parallelism <= max parallelism <= 32768
§ Max parallelism > 128 has some impact on
performance and state size
48
RocksDB
§ If you have plenty of memory, be generous with RocksDB
(note: RocksDB does not allocate its memory from the JVM’s
heap!). When allocating more memory for RocksDB on
YARN, increase the memory cutoff (= smaller heap)
§ RocksDB has many tuning parameters.
§ Flink offers predefined collections of options:
• SPINNING_DISK_OPTIMIZED_HIGH_MEM
• FLASH_SSD_OPTIMIZED
49
Tuning: Serialization
50
(de)serialization is expensive
§ Getting this wrong can have a huge impact
§ But don’t overthink it
51
Serialization in Flink
§ Flink has its own serialization framework, which
is used for
• Basic types (Java primitives and their boxed form)
• Primitive arrays and Object arrays
• Tuples
• Scala case classes
• POJOs
§ Otherwise Flink falls back to Kryo
52
A note on custom serializers / parsers
§ Avoid obvious anti-patterns, e.g. creating a new JSON
parser for every record
53
Source map()
String
keyBy()/
window()/
apply()
Sink
Source map()
keyBy()/
window()/
apply()
§ Many sources (e.g. Kafka) can parse JSON directly
§ Avoid, if possible, to ship the schema with every record
String
What else?
§ You should register types with Kryo, e.g.,
• env.registerTypeWithKryoSerializer(DateTime.class,
JodaDateTimeSerializer.class)
§ You should register any subtypes; this can increase
performance a lot
§ You can use serializers from other systems, like Protobuf or
Thrift with Kyro by registering the types (and serializers)
§ Avoid expensive types, e.g. Collections, large records
§ Do not change serializers or type registrations if you are
restoring from a savepoint
54
(High Availability) Deployment
55
Deployment Options
§ Hadoop YARN integration
• Cloudera, Hortonworks, MapR, …
• Amazon Elastic MapReduce (EMR), Google Cloud
dataproc
§ Mesos & DC/OS integration
§ Standalone Cluster (“native”)
• provided bash scripts
• provided Docker images
56
Flink in containerland
DAY 3 / 3:20 PM - 4:00 PM
MASCHINENHAUS
Deployment Options
§ Docs and best-practices coming soon for
• Kubernetes
• Docker Swarm
à Check Flink Documentation details!
57
Flink in containerland
DAY 3 / 3:20 PM - 4:00 PM
MASCHINENHAUS
58
High Availability
Deployments
YARN / Mesos HA
§ Run only one JobManager
§ Restarts managed by the cluster framework
§ For HA on YARN, we recommend using at least
Hadoop 2.5.0 (due to a critical bug in 2.4)
§ Zookeeper is always required
59
Standalone cluster HA
§ Run standby JobManagers
§ Zookeeper manages
JobManager failover and
restarts
§ TaskManager failures are
resolved by the
JobManager
à Use custom tool to ensure
a certain number of Job- and
TaskManagers
60
Deployment: Security
Bonus Slides
61
Outline
1. Hadoop delegation tokens
2. Kerberos authentication
3. SSL
62
§ Quite limited
• YARN only
• Hadoop services only
• Tokens expire
Hadoop delegation tokens
63
DATA
Job
Task Task
HDFS
Kafka
ZK
WebUI CLI
HTTP
Akka
token
§ Keytab-based identity
§ Standalone, YARN, Mesos
§ Shared by all jobs
Kerberos authentication
64
DATA
Job
Task Task
HDFS
Kafka
ZK
WebUI CLI
HTTP
Akka
keytab
SSL
§ taskmanager.data.ssl.enabled:
communication between task
managers
§ blob.service.ssl.enabled:
client/server blob service
§ akka.ssl.enabled: akka-based
control connection between the
flink client, jobmanager and
taskmanager
§ jobmanager.web.ssl.enabled:
https for WebUI
65
DATA
Job
Task Task
HDFS
Kafka
ZK
WebUI CLI
HTTPS
Akka
keytab certs
Limitations
§ The clients are not authenticated to the cluster
§ All the secrets known to a Flink job are exposed
to everyone who can connect to the cluster's
endpoint
§ Exploring SSL mutual authentication
66
1 of 66

Recommended

Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce... by
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
Flink Forward Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...Flink Forward
1.1K views43 slides
Virtual Flink Forward 2020: Autoscaling Flink at Netflix - Timothy Farkas by
Virtual Flink Forward 2020: Autoscaling Flink at Netflix - Timothy FarkasVirtual Flink Forward 2020: Autoscaling Flink at Netflix - Timothy Farkas
Virtual Flink Forward 2020: Autoscaling Flink at Netflix - Timothy FarkasFlink Forward
1.1K views49 slides
Flink Forward San Francisco 2018: Steven Wu - "Scaling Flink in Cloud" by
Flink Forward San Francisco 2018: Steven Wu - "Scaling Flink in Cloud" Flink Forward San Francisco 2018: Steven Wu - "Scaling Flink in Cloud"
Flink Forward San Francisco 2018: Steven Wu - "Scaling Flink in Cloud" Flink Forward
2.8K views82 slides
Flink Forward Berlin 2017: Piotr Wawrzyniak - Extending Apache Flink stream p... by
Flink Forward Berlin 2017: Piotr Wawrzyniak - Extending Apache Flink stream p...Flink Forward Berlin 2017: Piotr Wawrzyniak - Extending Apache Flink stream p...
Flink Forward Berlin 2017: Piotr Wawrzyniak - Extending Apache Flink stream p...Flink Forward
527 views20 slides
Flink Forward Berlin 2017: Stefan Richter - A look at Flink's internal data s... by
Flink Forward Berlin 2017: Stefan Richter - A look at Flink's internal data s...Flink Forward Berlin 2017: Stefan Richter - A look at Flink's internal data s...
Flink Forward Berlin 2017: Stefan Richter - A look at Flink's internal data s...Flink Forward
1.7K views60 slides
Flink Forward Berlin 2017: Andreas Kunft - Efficiently executing R Dataframes... by
Flink Forward Berlin 2017: Andreas Kunft - Efficiently executing R Dataframes...Flink Forward Berlin 2017: Andreas Kunft - Efficiently executing R Dataframes...
Flink Forward Berlin 2017: Andreas Kunft - Efficiently executing R Dataframes...Flink Forward
542 views23 slides

More Related Content

What's hot

Flink Forward SF 2017: Cliff Resnick & Seth Wiesman - From Zero to Streami... by
Flink Forward SF 2017:  Cliff Resnick & Seth Wiesman -   From Zero to Streami...Flink Forward SF 2017:  Cliff Resnick & Seth Wiesman -   From Zero to Streami...
Flink Forward SF 2017: Cliff Resnick & Seth Wiesman - From Zero to Streami...Flink Forward
437 views34 slides
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit... by
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...Flink Forward
1.6K views28 slides
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa... by
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...Guozhang Wang
707 views136 slides
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large... by
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...Flink Forward
1.5K views44 slides
Virtual Flink Forward 2020: Build your next-generation stream platform based ... by
Virtual Flink Forward 2020: Build your next-generation stream platform based ...Virtual Flink Forward 2020: Build your next-generation stream platform based ...
Virtual Flink Forward 2020: Build your next-generation stream platform based ...Flink Forward
1.1K views53 slides
Better Kafka Performance Without Changing Any Code | Simon Ritter, Azul by
Better Kafka Performance Without Changing Any Code | Simon Ritter, AzulBetter Kafka Performance Without Changing Any Code | Simon Ritter, Azul
Better Kafka Performance Without Changing Any Code | Simon Ritter, AzulHostedbyConfluent
355 views22 slides

What's hot(20)

Flink Forward SF 2017: Cliff Resnick & Seth Wiesman - From Zero to Streami... by Flink Forward
Flink Forward SF 2017:  Cliff Resnick & Seth Wiesman -   From Zero to Streami...Flink Forward SF 2017:  Cliff Resnick & Seth Wiesman -   From Zero to Streami...
Flink Forward SF 2017: Cliff Resnick & Seth Wiesman - From Zero to Streami...
Flink Forward437 views
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit... by Flink Forward
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...
Flink Forward San Francisco 2019: Scaling a real-time streaming warehouse wit...
Flink Forward1.6K views
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa... by Guozhang Wang
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...
Consistency and Completeness: Rethinking Distributed Stream Processing in Apa...
Guozhang Wang707 views
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large... by Flink Forward
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...
Flink Forward SF 2017: Stephan Ewen - Experiences running Flink at Very Large...
Flink Forward1.5K views
Virtual Flink Forward 2020: Build your next-generation stream platform based ... by Flink Forward
Virtual Flink Forward 2020: Build your next-generation stream platform based ...Virtual Flink Forward 2020: Build your next-generation stream platform based ...
Virtual Flink Forward 2020: Build your next-generation stream platform based ...
Flink Forward1.1K views
Better Kafka Performance Without Changing Any Code | Simon Ritter, Azul by HostedbyConfluent
Better Kafka Performance Without Changing Any Code | Simon Ritter, AzulBetter Kafka Performance Without Changing Any Code | Simon Ritter, Azul
Better Kafka Performance Without Changing Any Code | Simon Ritter, Azul
HostedbyConfluent355 views
Kafka 102: Streams and Tables All the Way Down | Kafka Summit San Francisco 2019 by Michael Noll
Kafka 102: Streams and Tables All the Way Down | Kafka Summit San Francisco 2019Kafka 102: Streams and Tables All the Way Down | Kafka Summit San Francisco 2019
Kafka 102: Streams and Tables All the Way Down | Kafka Summit San Francisco 2019
Michael Noll4K views
Keynote: Building and Operating A Serverless Streaming Runtime for Apache Bea... by Flink Forward
Keynote: Building and Operating A Serverless Streaming Runtime for Apache Bea...Keynote: Building and Operating A Serverless Streaming Runtime for Apache Bea...
Keynote: Building and Operating A Serverless Streaming Runtime for Apache Bea...
Flink Forward368 views
Predictive Maintenance with Deep Learning and Apache Flink by Dongwon Kim
Predictive Maintenance with Deep Learning and Apache FlinkPredictive Maintenance with Deep Learning and Apache Flink
Predictive Maintenance with Deep Learning and Apache Flink
Dongwon Kim2.8K views
Till Rohrmann – Fault Tolerance and Job Recovery in Apache Flink by Flink Forward
Till Rohrmann – Fault Tolerance and Job Recovery in Apache FlinkTill Rohrmann – Fault Tolerance and Job Recovery in Apache Flink
Till Rohrmann – Fault Tolerance and Job Recovery in Apache Flink
Flink Forward7.4K views
Processing Big Data in Real-Time - Yanai Franchi, Tikal by Codemotion Tel Aviv
Processing Big Data in Real-Time - Yanai Franchi, TikalProcessing Big Data in Real-Time - Yanai Franchi, Tikal
Processing Big Data in Real-Time - Yanai Franchi, Tikal
Flink Forward San Francisco 2019: Developing and operating real-time applicat... by Flink Forward
Flink Forward San Francisco 2019: Developing and operating real-time applicat...Flink Forward San Francisco 2019: Developing and operating real-time applicat...
Flink Forward San Francisco 2019: Developing and operating real-time applicat...
Flink Forward390 views
Real Time Data Streaming using Kafka & Storm by Ran Silberman
Real Time Data Streaming using Kafka & StormReal Time Data Streaming using Kafka & Storm
Real Time Data Streaming using Kafka & Storm
Ran Silberman16.9K views
SF Big Analytics 2019112: Uncovering performance regressions in the TCP SACK... by Chester Chen
 SF Big Analytics 2019112: Uncovering performance regressions in the TCP SACK... SF Big Analytics 2019112: Uncovering performance regressions in the TCP SACK...
SF Big Analytics 2019112: Uncovering performance regressions in the TCP SACK...
Chester Chen296 views
Samza memory capacity_2015_ieee_big_data_data_quality_workshop by Tao Feng
Samza memory capacity_2015_ieee_big_data_data_quality_workshopSamza memory capacity_2015_ieee_big_data_data_quality_workshop
Samza memory capacity_2015_ieee_big_data_data_quality_workshop
Tao Feng2.3K views
Flink Forward San Francisco 2019: Moving from Lambda and Kappa Architectures ... by Flink Forward
Flink Forward San Francisco 2019: Moving from Lambda and Kappa Architectures ...Flink Forward San Francisco 2019: Moving from Lambda and Kappa Architectures ...
Flink Forward San Francisco 2019: Moving from Lambda and Kappa Architectures ...
Flink Forward2.7K views
First Flink Bay Area meetup by Kostas Tzoumas
First Flink Bay Area meetupFirst Flink Bay Area meetup
First Flink Bay Area meetup
Kostas Tzoumas1.7K views
Pulsar connector on flink 1.14 by 宇帆 盛
Pulsar connector on flink 1.14Pulsar connector on flink 1.14
Pulsar connector on flink 1.14
宇帆 盛123 views

Similar to Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably and efficiently operate Apache Flink

Designs, Lessons and Advice from Building Large Distributed Systems by
Designs, Lessons and Advice from Building Large Distributed SystemsDesigns, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed SystemsDaehyeok Kim
120 views73 slides
High performace network of Cloud Native Taiwan User Group by
High performace network of Cloud Native Taiwan User GroupHigh performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User GroupHungWei Chiu
1.8K views68 slides
Kafka to the Maxka - (Kafka Performance Tuning) by
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)DataWorks Summit
6.4K views66 slides
CPN302 your-linux-ami-optimization-and-performance by
CPN302 your-linux-ami-optimization-and-performanceCPN302 your-linux-ami-optimization-and-performance
CPN302 your-linux-ami-optimization-and-performanceCoburn Watson
11.1K views61 slides
Galaxy CloudMan performance on AWS by
Galaxy CloudMan performance on AWSGalaxy CloudMan performance on AWS
Galaxy CloudMan performance on AWSEnis Afgan
415 views29 slides
Basics of JVM Tuning by
Basics of JVM TuningBasics of JVM Tuning
Basics of JVM TuningVladislav Gangan
3.9K views60 slides

Similar to Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably and efficiently operate Apache Flink(20)

Designs, Lessons and Advice from Building Large Distributed Systems by Daehyeok Kim
Designs, Lessons and Advice from Building Large Distributed SystemsDesigns, Lessons and Advice from Building Large Distributed Systems
Designs, Lessons and Advice from Building Large Distributed Systems
Daehyeok Kim120 views
High performace network of Cloud Native Taiwan User Group by HungWei Chiu
High performace network of Cloud Native Taiwan User GroupHigh performace network of Cloud Native Taiwan User Group
High performace network of Cloud Native Taiwan User Group
HungWei Chiu1.8K views
Kafka to the Maxka - (Kafka Performance Tuning) by DataWorks Summit
Kafka to the Maxka - (Kafka Performance Tuning)Kafka to the Maxka - (Kafka Performance Tuning)
Kafka to the Maxka - (Kafka Performance Tuning)
DataWorks Summit6.4K views
CPN302 your-linux-ami-optimization-and-performance by Coburn Watson
CPN302 your-linux-ami-optimization-and-performanceCPN302 your-linux-ami-optimization-and-performance
CPN302 your-linux-ami-optimization-and-performance
Coburn Watson11.1K views
Galaxy CloudMan performance on AWS by Enis Afgan
Galaxy CloudMan performance on AWSGalaxy CloudMan performance on AWS
Galaxy CloudMan performance on AWS
Enis Afgan415 views
Memory-Based Cloud Architectures by 小新 制造
Memory-Based Cloud ArchitecturesMemory-Based Cloud Architectures
Memory-Based Cloud Architectures
小新 制造502 views
Deployment Strategies (Mongo Austin) by MongoDB
Deployment Strategies (Mongo Austin)Deployment Strategies (Mongo Austin)
Deployment Strategies (Mongo Austin)
MongoDB1.1K views
Stephan Ewen - Experiences running Flink at Very Large Scale by Ververica
Stephan Ewen -  Experiences running Flink at Very Large ScaleStephan Ewen -  Experiences running Flink at Very Large Scale
Stephan Ewen - Experiences running Flink at Very Large Scale
Ververica 3.5K views
Open HFT libraries in @Java by Peter Lawrey
Open HFT libraries in @JavaOpen HFT libraries in @Java
Open HFT libraries in @Java
Peter Lawrey6K views
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final by Vigyan Jain
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-FinalSizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Sizing MongoDB on AWS with Wired Tiger-Patrick and Vigyan-Final
Vigyan Jain395 views
Shak larry-jeder-perf-and-tuning-summit14-part2-final by Tommy Lee
Shak larry-jeder-perf-and-tuning-summit14-part2-finalShak larry-jeder-perf-and-tuning-summit14-part2-final
Shak larry-jeder-perf-and-tuning-summit14-part2-final
Tommy Lee1.9K views
Deployment Strategies by MongoDB
Deployment StrategiesDeployment Strategies
Deployment Strategies
MongoDB1.1K views
Drizzle—Low Latency Execution for Apache Spark: Spark Summit East talk by Shi... by Spark Summit
Drizzle—Low Latency Execution for Apache Spark: Spark Summit East talk by Shi...Drizzle—Low Latency Execution for Apache Spark: Spark Summit East talk by Shi...
Drizzle—Low Latency Execution for Apache Spark: Spark Summit East talk by Shi...
Spark Summit2.7K views
Deployment Strategy by MongoDB
Deployment StrategyDeployment Strategy
Deployment Strategy
MongoDB1.4K views
Memory, Big Data, NoSQL and Virtualization by Bigstep
Memory, Big Data, NoSQL and VirtualizationMemory, Big Data, NoSQL and Virtualization
Memory, Big Data, NoSQL and Virtualization
Bigstep1.9K views
Технологии работы с дисковыми хранилищами и файловыми системами Windows Serve... by Виталий Стародубцев
Технологии работы с дисковыми хранилищами и файловыми системами Windows Serve...Технологии работы с дисковыми хранилищами и файловыми системами Windows Serve...
Технологии работы с дисковыми хранилищами и файловыми системами Windows Serve...

More from Flink Forward

Building a fully managed stream processing platform on Flink at scale for Lin... by
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Flink Forward
851 views56 slides
Evening out the uneven: dealing with skew in Flink by
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkFlink Forward
2.5K views35 slides
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i... by
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...Flink Forward
183 views13 slides
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ... by
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Flink Forward
573 views34 slides
Introducing the Apache Flink Kubernetes Operator by
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorFlink Forward
769 views37 slides
Autoscaling Flink with Reactive Mode by
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeFlink Forward
921 views17 slides

More from Flink Forward(20)

Building a fully managed stream processing platform on Flink at scale for Lin... by Flink Forward
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...
Flink Forward851 views
Evening out the uneven: dealing with skew in Flink by Flink Forward
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in Flink
Flink Forward2.5K views
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i... by Flink Forward
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...
Flink Forward183 views
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ... by Flink Forward
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Flink Forward573 views
Introducing the Apache Flink Kubernetes Operator by Flink Forward
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes Operator
Flink Forward769 views
Autoscaling Flink with Reactive Mode by Flink Forward
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive Mode
Flink Forward921 views
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli... by Flink Forward
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Flink Forward264 views
One sink to rule them all: Introducing the new Async Sink by Flink Forward
One sink to rule them all: Introducing the new Async SinkOne sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async Sink
Flink Forward309 views
Tuning Apache Kafka Connectors for Flink.pptx by Flink Forward
Tuning Apache Kafka Connectors for Flink.pptxTuning Apache Kafka Connectors for Flink.pptx
Tuning Apache Kafka Connectors for Flink.pptx
Flink Forward426 views
Flink powered stream processing platform at Pinterest by Flink Forward
Flink powered stream processing platform at PinterestFlink powered stream processing platform at Pinterest
Flink powered stream processing platform at Pinterest
Flink Forward221 views
Apache Flink in the Cloud-Native Era by Flink Forward
Apache Flink in the Cloud-Native EraApache Flink in the Cloud-Native Era
Apache Flink in the Cloud-Native Era
Flink Forward171 views
Where is my bottleneck? Performance troubleshooting in Flink by Flink Forward
Where is my bottleneck? Performance troubleshooting in FlinkWhere is my bottleneck? Performance troubleshooting in Flink
Where is my bottleneck? Performance troubleshooting in Flink
Flink Forward531 views
Using the New Apache Flink Kubernetes Operator in a Production Deployment by Flink Forward
Using the New Apache Flink Kubernetes Operator in a Production DeploymentUsing the New Apache Flink Kubernetes Operator in a Production Deployment
Using the New Apache Flink Kubernetes Operator in a Production Deployment
Flink Forward648 views
The Current State of Table API in 2022 by Flink Forward
The Current State of Table API in 2022The Current State of Table API in 2022
The Current State of Table API in 2022
Flink Forward171 views
Dynamic Rule-based Real-time Market Data Alerts by Flink Forward
Dynamic Rule-based Real-time Market Data AlertsDynamic Rule-based Real-time Market Data Alerts
Dynamic Rule-based Real-time Market Data Alerts
Flink Forward743 views
Exactly-Once Financial Data Processing at Scale with Flink and Pinot by Flink Forward
Exactly-Once Financial Data Processing at Scale with Flink and PinotExactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Flink Forward683 views
Processing Semantically-Ordered Streams in Financial Services by Flink Forward
Processing Semantically-Ordered Streams in Financial ServicesProcessing Semantically-Ordered Streams in Financial Services
Processing Semantically-Ordered Streams in Financial Services
Flink Forward167 views
Tame the small files problem and optimize data layout for streaming ingestion... by Flink Forward
Tame the small files problem and optimize data layout for streaming ingestion...Tame the small files problem and optimize data layout for streaming ingestion...
Tame the small files problem and optimize data layout for streaming ingestion...
Flink Forward800 views
Batch Processing at Scale with Flink & Iceberg by Flink Forward
Batch Processing at Scale with Flink & IcebergBatch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & Iceberg
Flink Forward586 views
Welcome to the Flink Community! by Flink Forward
Welcome to the Flink Community!Welcome to the Flink Community!
Welcome to the Flink Community!
Flink Forward127 views

Recently uploaded

How Leaders See Data? (Level 1) by
How Leaders See Data? (Level 1)How Leaders See Data? (Level 1)
How Leaders See Data? (Level 1)Narendra Narendra
13 views76 slides
MOSORE_BRESCIA by
MOSORE_BRESCIAMOSORE_BRESCIA
MOSORE_BRESCIAFederico Karagulian
5 views8 slides
Supercharging your Data with Azure AI Search and Azure OpenAI by
Supercharging your Data with Azure AI Search and Azure OpenAISupercharging your Data with Azure AI Search and Azure OpenAI
Supercharging your Data with Azure AI Search and Azure OpenAIPeter Gallagher
37 views32 slides
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx by
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptxDataScienceConferenc1
5 views12 slides
Advanced_Recommendation_Systems_Presentation.pptx by
Advanced_Recommendation_Systems_Presentation.pptxAdvanced_Recommendation_Systems_Presentation.pptx
Advanced_Recommendation_Systems_Presentation.pptxneeharikasingh29
5 views9 slides
PROGRAMME.pdf by
PROGRAMME.pdfPROGRAMME.pdf
PROGRAMME.pdfHiNedHaJar
18 views13 slides

Recently uploaded(20)

Supercharging your Data with Azure AI Search and Azure OpenAI by Peter Gallagher
Supercharging your Data with Azure AI Search and Azure OpenAISupercharging your Data with Azure AI Search and Azure OpenAI
Supercharging your Data with Azure AI Search and Azure OpenAI
Peter Gallagher37 views
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx by DataScienceConferenc1
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx
[DSC Europe 23] Zsolt Feleki - Machine Translation should we trust it.pptx
Advanced_Recommendation_Systems_Presentation.pptx by neeharikasingh29
Advanced_Recommendation_Systems_Presentation.pptxAdvanced_Recommendation_Systems_Presentation.pptx
Advanced_Recommendation_Systems_Presentation.pptx
Understanding Hallucinations in LLMs - 2023 09 29.pptx by Greg Makowski
Understanding Hallucinations in LLMs - 2023 09 29.pptxUnderstanding Hallucinations in LLMs - 2023 09 29.pptx
Understanding Hallucinations in LLMs - 2023 09 29.pptx
Greg Makowski17 views
Cross-network in Google Analytics 4.pdf by GA4 Tutorials
Cross-network in Google Analytics 4.pdfCross-network in Google Analytics 4.pdf
Cross-network in Google Analytics 4.pdf
GA4 Tutorials6 views
Vikas 500 BIG DATA TECHNOLOGIES LAB.pdf by vikas12611618
Vikas 500 BIG DATA TECHNOLOGIES LAB.pdfVikas 500 BIG DATA TECHNOLOGIES LAB.pdf
Vikas 500 BIG DATA TECHNOLOGIES LAB.pdf
vikas126116188 views
Organic Shopping in Google Analytics 4.pdf by GA4 Tutorials
Organic Shopping in Google Analytics 4.pdfOrganic Shopping in Google Analytics 4.pdf
Organic Shopping in Google Analytics 4.pdf
GA4 Tutorials11 views
Survey on Factuality in LLM's.pptx by NeethaSherra1
Survey on Factuality in LLM's.pptxSurvey on Factuality in LLM's.pptx
Survey on Factuality in LLM's.pptx
NeethaSherra15 views
Short Story Assignment by Kelly Nguyen by kellynguyen01
Short Story Assignment by Kelly NguyenShort Story Assignment by Kelly Nguyen
Short Story Assignment by Kelly Nguyen
kellynguyen0119 views
[DSC Europe 23] Spela Poklukar & Tea Brasanac - Retrieval Augmented Generation by DataScienceConferenc1
[DSC Europe 23] Spela Poklukar & Tea Brasanac - Retrieval Augmented Generation[DSC Europe 23] Spela Poklukar & Tea Brasanac - Retrieval Augmented Generation
[DSC Europe 23] Spela Poklukar & Tea Brasanac - Retrieval Augmented Generation
UNEP FI CRS Climate Risk Results.pptx by pekka28
UNEP FI CRS Climate Risk Results.pptxUNEP FI CRS Climate Risk Results.pptx
UNEP FI CRS Climate Risk Results.pptx
pekka2811 views
Introduction to Microsoft Fabric.pdf by ishaniuudeshika
Introduction to Microsoft Fabric.pdfIntroduction to Microsoft Fabric.pdf
Introduction to Microsoft Fabric.pdf
ishaniuudeshika29 views
3196 The Case of The East River by ErickANDRADE90
3196 The Case of The East River3196 The Case of The East River
3196 The Case of The East River
ErickANDRADE9011 views
RuleBookForTheFairDataEconomy.pptx by noraelstela1
RuleBookForTheFairDataEconomy.pptxRuleBookForTheFairDataEconomy.pptx
RuleBookForTheFairDataEconomy.pptx
noraelstela167 views
Building Real-Time Travel Alerts by Timothy Spann
Building Real-Time Travel AlertsBuilding Real-Time Travel Alerts
Building Real-Time Travel Alerts
Timothy Spann111 views
Data structure and algorithm. by Abdul salam
Data structure and algorithm. Data structure and algorithm.
Data structure and algorithm.
Abdul salam 19 views

Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably and efficiently operate Apache Flink

  • 1. 1 Keep it going – How to reliably and efficiently operate Apache Flink Robert Metzger @rmetzger
  • 2. About this talk § Part of the Apache Flink training offered by data Artisans § Subjective collection of most frequent ops questions on the user mailing list. Topics § Capacity planning § Deployment best practices § Tuning • Work distribution • Memory configuration • Checkpointing • Serialization § Lessons learned 2
  • 4. First step: do the math! § Think through the resource requirements of your problem • Number of keys, state per key • Number of records, record size • Number of state updates • What are your SLAs? (downtime, latency, max throughput) § What resources do you have? • Network capacity (including Kafka, HDFS, etc.) • Disk bandwidth (RocksDB relies on the local disk) • Memory • CPUs 4
  • 5. Establish a baseline § Normal operation should be able to avoid back pressure § Add a margin for recovery – these resources will be used to “catch up” § Establish your baseline with checkpointing enabled 5
  • 6. Consider spiky loads § For example, operators downstream from a Window won’t be continuously busy § How much downstream parallelism is required depends on how quickly you expect to process these spikes 6
  • 7. Example: The Setup § Data: • Message size: 2 KB • Throughput: 1,000,000 msg/sec • Distinct keys: 500,000,000 (aggregation in window: 4 longs per key) • Checkpoint every minute 7 Kafka Source keyBy userId Sliding Window 5m size 1m slide Kafka Sink RocksDB
  • 8. Example: The setup § Hardware: • 5 machines • 10 gigabit Ethernet • Each machine running a Flink TaskManager • Disks are attached via the network § Kafka is separate 8 TM 1 TM 2 TM 3 TM 4 TM 5 NAS Kafka
  • 9. Example: A machine’s perspective 9 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s 2 KB * 1,000,000 = 2GB/s 2GB/s / 5 machines = 400 MB/s Shuffle: 320 MB/s 80 MB/s Shuffle: 320 MB/s 400MB/s / 5 receivers = 80MB/s 1 receiver is local, 4 remote: 4 * 80 = 320 MB/s out Kafka: 67 MB/s
  • 10. Excursion 1: Window emit 10 How much data is the window emitting? Recap: 500,000,000 unique users (4 longs per key) Sliding window of 5 minutes, 1 minute slide Assumption: For each user, we emit 2 ints (user_id, window_ts) and 4 longs from the aggregation = 2 * 4 bytes + 4 * 8 bytes = 40 bytes per key 100,000,000 (users) * 40 bytes = 4 GB every minute from each machine
  • 11. Example: A machine’s perspective 11 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s 2 KB * 1,000,000 = 2GB/s 2GB/s / 5 machines = 400 MB/s Shuffle: 320 MB/s 80 MB/s Shuffle: 320 MB/s 400MB/s / 5 receivers = 80MB/s 1 receiver is local, 4 remote: 4 * 80 = 320 MB/s out Kafka: 67 MB/s 4 GB / minute => 67 MB/ second (on average)
  • 12. Example: Result 12 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s Shuffle: 320 MB/s 80 MB/s Shuffle: 320 MB/s Kafka: 67 MB/s Total In: 720 MB/s Total Out: 387 MB/s
  • 13. Example: Result 13 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 mb/s 10 Gigabit Ethernet (Full Duplex) In: 1250 mb/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 mb/s Shuffle: 320 mb/s 80 mb/s Shuffle: 320 mb/s Kafka: 67 mb/s Total In: 720 mb/s Total Out: 387 mb/s WRONG. We forgot: • Disk Access to RocksDB • Checkpointing
  • 14. Example: Intermediate Result 14 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s Shuffle: 320 MB/s Shuffle: 320 MB/s Kafka: 67 MB/s Disk read: ? Disk write: ?
  • 15. Excursion 2: Window state access 15 How is the Window operator accessing state? Recap: 1,000,000 msg/sec. Sliding window of 5 minutes, 1 minute slide Assumption: For each user, we store 2 ints (user_id, window_ts) and 4 longs from the aggregation = 2 * 4 bytes + 4 * 8 bytes = 40 bytes per key 5 minute window (window_ts) key (user_id) value (long, long, long, long) Incoming data For each incoming record, update aggregations in 5 windows
  • 16. Excursion 2: Window state access 16 How is the Window operator accessing state? For each key-value access, we need to retrieve 40 bytes from disk, update the aggregates and put 40 bytes back per machine: 40 bytes * 5 windows * 200,000 msg/sec = 40 MB/s
  • 17. Example: Intermediate Result 17 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s Shuffle: 320 MB/s Shuffle: 320 MB/s Kafka: 67 MB/s Total In: 760 MB/s Total Out: 427 MB/s Disk read: 40 MB/s Disk write: 40 MB/s
  • 18. Excursion 3: Checkpointing 18 How much state are we checkpointing? per machine: 40 bytes * 5 windows * 100,000,000 keys = 20 GB We checkpoint every minute, so 20 GB / 60 seconds = 333 MB/s
  • 19. Example: Final Result 19 TaskManager n Kafka Source keyBy window Kafka Sink Kafka: 400 MB/s 10 Gigabit Ethernet (Full Duplex) In: 1250 MB/s 10 Gigabit Ethernet (Full Duplex) Out: 1250 MB/s Shuffle: 320 MB/s Shuffle: 320 MB/s Kafka: 67 MB/s Total In: 760 MB/s Total Out: 760 MB/s Disk read: 40 MB/s Disk write: 40 MB/s Checkpoints: 333 MB/s
  • 20. Example: Network requirements 20 TM 2 TM 3 TM 4 TM 5 TM 1 NAS In: 760 MB/s Out: 760 MB/s 5x 80 MB/s = 400 MB/s Kafka 400 MB/s * 5 + 67 MB/s * 5 = 2335 MB/s Overall network traffic: 2 * 760 * 5 + 400 + 2335 = 10335 MB/s = 82,68 Gigabit/s
  • 21. Deployment Best Practices Things you should consider before putting a job in production 21
  • 22. Deployment Options § Hadoop YARN integration • Cloudera, Hortonworks, MapR, … • Amazon Elastic MapReduce (EMR), Google Cloud dataproc § Mesos & DC/OS integration § Standalone Cluster (“native”) • provided bash scripts • provided Docker images 22 Flink in containerland DAY 3 / 3:20 PM - 4:00 PM MASCHINENHAUS
  • 23. Choose your state backend Name Working state State backup Snapshotting RocksDBStateBackend Local disk (tmp directory) Distributed file system Asynchronously • Good for state larger than available memory • Supports incremental checkpoints • Rule of thumb: 10x slower than memory-based backends FsStateBackend JVM Heap Distributed file system Synchronous / Async • Fast, requires large heap MemoryStateBackend JVM Heap JobManager JVM Heap Synchronous / Async • Good for testing and experimentation with small state (locally) 23
  • 25. Check the production readiness list § Explicitly set the max parallelism for rescaling • 0 < parallelism <= max parallelism <= 32768 • Max parallelism > 128 has some impact on performance and state size § Set UUIDs for all operators to allow changing the application between restores • By default Flink generates UUIDs § Use the new ListCheckpointed and CheckpointedFunction interfaces 25 Production Readiness Checklist: https://ci.apache.org/projects/flink/flink-docs-release- 1.3/ops/production_ready.html
  • 26. Tuning: CPU usage / work distribution 26
  • 27. Configure parallelism / slots § These settings influence how the work is spread across the available CPUs § 1 CPU per slot is common § multiple CPUs per slot makes sense if one slot (i.e. one parallel instance of the job) performs many CPU intensive operations 27
  • 31. Benefits of slot sharing § A Flink cluster needs exactly as many task slots as the highest parallelism used in the job § Better resource utilization § Reduced network traffic 31
  • 32. What can you do? § Number of TaskManagers vs number of slots per TM § Set slots per TaskManager § Set parallelism per operator § Control operator chaining behavior § Set slot sharing groups to break operators into different slots 32
  • 34. Memory in Flink (on YARN) 34 YARN Container Limit JVM Heap (limited by Xmx parameter) Other JVM allocations: Classes, metadata, DirectByteBuffers JVM process size Netty RocksDB? Network buffersInternal Flink services User code (window contents, …) Memory Manager
  • 35. Example: Memory in Flink 35 YARN Container Limit: 2000 MB JVM Heap: Xmx: 1500MB = 2000 * 0.75 (default cutoff is 25%) Other JVM allocations: Classes, metadata, stacks, … JVM process size: < 2000 MB Netty ~64MB RocksDB? MemoryManager? up to 70% of the available heap § TaskManager: 2000 MB on YARN “containerized.heap-cutoff-ratio” Container request size “taskmanager.memory.fraction“ RocksDB Config Network Buffers „taskmanager.network. memory.min“ (64MB) and „.max“ (1GB)
  • 37. Checkpointing § Measure, analyze and try out! § Configure a checkpointing interval • How much can you afford to reprocess on restore? • How many resources are consumed by the checkpointing? (cost in throughput and latency) § Fine-tuning • “min pause between checkpoints” • “checkpoint timeout” • “concurrent checkpoints” § Configure exactly once / at least once • exactly once does buffer alignment spilling (can affect latency) 37
  • 38. 38
  • 40. Tuning Approaches § 1. Develop / optimize job locally • Use data generator / small sample dataset • Check the logs for warnings • Check the UI for backpressure, throughput, metrics • Debug / profile locally § 2. Optimize on cluster • Checkpointing, parallelism, slots, RocksDB, network config, … 40
  • 41. The usual suspects § Inefficient serialization § Inefficient dataflow graph • Too many repartitionings; blocking I/O § Slow external systems § Slow network, slow disks § Checkpointing configuration 41
  • 42. Q & A Let’s discuss … 4 2
  • 43. 4 Thank you! @rmetzger | @theplucas @dataArtisans
  • 45. Set UUIDs for all (stateful) operators § Operator UUIDs are needed to restore state from a savepoint § Flink will auto—generate UUIDs, but this results in fragile snapshots. § Setting UUIDs in the API: DataStream<String> stream = env .addSource(new StatefulSource()) .uid("source-id") // ID for the source operator .map(new StatefulMapper()) .uid("mapper-id") // ID for the mapper .print(); 45
  • 46. Use the savepoint tool for deletions § Savepoint files contain only metadata and depend on the checkpoint files • bin/flink savepoint -d :savepointPath § There is work in progress to make savepoints self-contained à deletion / relocation will be much easier 46
  • 47. Avoid the deprecated state APIs § Using the Checkpointed interface will prevent you from rescaling your job § Use ListCheckpointed (like Checkpointed, but redistributeble) or CheckpointedFunction (full flexibility) instead. Production Readiness Checklist: https://ci.apache.org/projects/flink/flink-docs-release- 1.3/ops/production_ready.html 47
  • 48. Explicitly set max parallelism § Changing this parameter is painful • requires a complete restart and loss of all checkpointed/savepointed state § 0 < parallelism <= max parallelism <= 32768 § Max parallelism > 128 has some impact on performance and state size 48
  • 49. RocksDB § If you have plenty of memory, be generous with RocksDB (note: RocksDB does not allocate its memory from the JVM’s heap!). When allocating more memory for RocksDB on YARN, increase the memory cutoff (= smaller heap) § RocksDB has many tuning parameters. § Flink offers predefined collections of options: • SPINNING_DISK_OPTIMIZED_HIGH_MEM • FLASH_SSD_OPTIMIZED 49
  • 51. (de)serialization is expensive § Getting this wrong can have a huge impact § But don’t overthink it 51
  • 52. Serialization in Flink § Flink has its own serialization framework, which is used for • Basic types (Java primitives and their boxed form) • Primitive arrays and Object arrays • Tuples • Scala case classes • POJOs § Otherwise Flink falls back to Kryo 52
  • 53. A note on custom serializers / parsers § Avoid obvious anti-patterns, e.g. creating a new JSON parser for every record 53 Source map() String keyBy()/ window()/ apply() Sink Source map() keyBy()/ window()/ apply() § Many sources (e.g. Kafka) can parse JSON directly § Avoid, if possible, to ship the schema with every record String
  • 54. What else? § You should register types with Kryo, e.g., • env.registerTypeWithKryoSerializer(DateTime.class, JodaDateTimeSerializer.class) § You should register any subtypes; this can increase performance a lot § You can use serializers from other systems, like Protobuf or Thrift with Kyro by registering the types (and serializers) § Avoid expensive types, e.g. Collections, large records § Do not change serializers or type registrations if you are restoring from a savepoint 54
  • 56. Deployment Options § Hadoop YARN integration • Cloudera, Hortonworks, MapR, … • Amazon Elastic MapReduce (EMR), Google Cloud dataproc § Mesos & DC/OS integration § Standalone Cluster (“native”) • provided bash scripts • provided Docker images 56 Flink in containerland DAY 3 / 3:20 PM - 4:00 PM MASCHINENHAUS
  • 57. Deployment Options § Docs and best-practices coming soon for • Kubernetes • Docker Swarm à Check Flink Documentation details! 57 Flink in containerland DAY 3 / 3:20 PM - 4:00 PM MASCHINENHAUS
  • 59. YARN / Mesos HA § Run only one JobManager § Restarts managed by the cluster framework § For HA on YARN, we recommend using at least Hadoop 2.5.0 (due to a critical bug in 2.4) § Zookeeper is always required 59
  • 60. Standalone cluster HA § Run standby JobManagers § Zookeeper manages JobManager failover and restarts § TaskManager failures are resolved by the JobManager à Use custom tool to ensure a certain number of Job- and TaskManagers 60
  • 62. Outline 1. Hadoop delegation tokens 2. Kerberos authentication 3. SSL 62
  • 63. § Quite limited • YARN only • Hadoop services only • Tokens expire Hadoop delegation tokens 63 DATA Job Task Task HDFS Kafka ZK WebUI CLI HTTP Akka token
  • 64. § Keytab-based identity § Standalone, YARN, Mesos § Shared by all jobs Kerberos authentication 64 DATA Job Task Task HDFS Kafka ZK WebUI CLI HTTP Akka keytab
  • 65. SSL § taskmanager.data.ssl.enabled: communication between task managers § blob.service.ssl.enabled: client/server blob service § akka.ssl.enabled: akka-based control connection between the flink client, jobmanager and taskmanager § jobmanager.web.ssl.enabled: https for WebUI 65 DATA Job Task Task HDFS Kafka ZK WebUI CLI HTTPS Akka keytab certs
  • 66. Limitations § The clients are not authenticated to the cluster § All the secrets known to a Flink job are exposed to everyone who can connect to the cluster's endpoint § Exploring SSL mutual authentication 66