SlideShare a Scribd company logo
1
Exactly-Once Made Fast
Boyang Chen: Engineer@Confluent
Guozhang Wang: Engineer@Confluent
2
- Recap: exactly-once semantics (EOS) for Kafka
- What cost are we paying for EOS today
- Closing the gaps: usability and scalability
Overview
3
Back in 2017..
4
5
6
7
8
9
Commit
10
Commit
11
Commit
12
Commit
Atomic
13
The Kafka Approach for Exactly Once
1) Idempotent writes in order within a single topic partition
2) Transactional writes across multiple output topic partitions
3) Guarantee single writer for any input topic partitions
[KIP-98, KIP-129]
14
The Kafka Approach for Exactly Once
1) Idempotent writes in order within a single topic partition
2) Transactional writes across multiple output topic partitions
3) Guarantee single writer for any input topic partitions
[KIP-98, KIP-129]
15
Kafka Transactions
16
17
txn-status: non-exist, partitions: {}
18
txn-status: non-exist, partitions: {}
producer.initTxn();
19
txn-status: empty, partitions: {}
producer.initTxn();
non-exist
20
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
}
} catch (KafkaException e) {
}txn-status: empty, partitions: {}
producer.initTxn();
21
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
} catch (KafkaException e) {
}txn-status: empty, partitions: {}
producer.initTxn();
22
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0}
producer.initTxn();
non-exist {}
23
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0}
producer.initTxn();
24
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0}
producer.initTxn();
25
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0}
producer.initTxn();
26
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0}
producer.initTxn();
27
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0, offset-0}
producer.initTxn();
{output-0}
28
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0, offset-0}
producer.initTxn();
29
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: prep-commit, partitions: {output-0, offset-0}
producer.initTxn();
on-going
30
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: prep-commit, partitions: {output-0, offset-0}
producer.initTxn();
31
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: prep-commit, partitions: {output-0, offset-0}
producer.initTxn();
32
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: committed, partitions: {output-0, offset-0}
producer.initTxn();
prep-commit
33
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output-0, offset-0}
producer.initTxn();
34
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
producer.abortTxn();
}txn-status: on-going, partitions: {output-0, offset-0}
producer.initTxn();
35
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
producer.abortTxn();
}txn-status: prep-abort, partitions: {output-0, offset-0}
producer.initTxn();
on-going
36
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
producer.abortTxn();
}txn-status: prep-abort, partitions: {output-0, offset-0}
producer.initTxn();
37
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
producer.abortTxn();
}txn-status: prep-abort, partitions: {output-0, offset-0}
producer.initTxn();
38
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(..);
producer.commitTxn();
} catch (KafkaException e) {
producer.abortTxn();
}txn-status: aborted, partitions: {output-0, offset-0}
producer.initTxn();
prep-abort
39
The Kafka Approach for Exactly Once:
1) Idempotent writes in order within a single topic partition
2) Transactional writes across multiple output topic partitions
3) Guarantee single writer for any input topic partitions
40
41
42
At a given time, an input partition should only be processed by a single client
43
At a given time, an input partition should only be processed by a single client
Consumer Group
44
At a given time, an input partition should only be processed by a single client
Consumer Group
45
At a given time, an input partition should only be processed by a single client
Consumer Group
46
The “Single Writer” Fencing Problem
47
When Taking Over the Partition:
1) The previous txn must have completed commit or abort so there are no
concurrent transactions.
2) Other clients will be fenced write processing results for those input
partitions, a.k.a we have a “single writer”.
48
Transactional ID: defines single writer scope
1) Configured by the unique producer `transactional.id` property.
2) Enforced fencing by a monotonic epoch for each id.
3) Producer initialization await pending transaction completion.
49
Transactional ID: defines single writer scope
1) Configured by the unique producer `transactional.id` property.
2) Enforced fencing by a monotonic epoch for each id.
3) Producer initialization await pending transaction completion.
50
Transactional ID: defines single writer scope
1) Configured by the unique producer `transactional.id` property.
2) Enforced fencing by a monotonic epoch for each id.
3) Producer initialization await pending transaction completion.
51
Consumer Group
txn.Id = A, epoch = 1
txn.Id = B, epoch = 1
52
Consumer Group
txn.Id = A, epoch = 1
53
Consumer Group
txn.Id = A, epoch = 1
54
Consumer Group
txn.Id = A, epoch = 1
txn.Id = B, initializing...
55
Consumer Group
txn.Id = A, epoch = 1
txn.Id = B, epoch = 2
56
Consumer Group
txn.Id = A, epoch = 1
txn.Id = B, epoch = 2
Num. producer transaction IDs ~= num. input partitions
Producers need to be dynamically created when rebalance
57
EOS Scalability
58
Number of Input
Partitions
Growth of Producers
Number of
Applications
5 10 15 20 25 30
600
500
400
300
200
1
00
59
Number of Input
Partitions
At Least Once
Growth of Producers
Number of
Applications
5 10 15 20 25 30
600
500
400
300
200
1
00
60
Number of Input
Partitions
At Least Once
Growth of Producers
Number of
Applications
5 10 15 20 25 30
600
500
400
300
200
1
00
Exactly Once
61
KIP-447
62
What problems
are KIP-447
solving ?
63
What problems
are KIP-447
solving ?
● Make one producer per process model work
64
What problems
are KIP-447
solving ?
● Make one producer per process model work
● Unblock technical challenges
○ Offset commit fencing
○ Concurrent transaction
65
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
66
● We are fencing on the transactional producer side,
which assumes a static partition assignment
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
67
● We are fencing on the transactional producer side,
which assumes a static partition assignment
● Consumer group partition assignments are dynamic
in practice
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
68
69
70
71
72
73
74
● We are fencing on the transactional producer side,
which assumes a static partition assignment
● Consumer group partition assignments are dynamic
in practice
● Action: fence zombie producer commit
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
75
● We are fencing on the transactional producer side,
which assumes a static partition assignment
● Consumer group partition assignments are dynamic
in practice
● Action: fence zombie producer commit
○ Different from epoch fencing
○ Utilize consumer group generation ~= epoch
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
76
77
78
79
80
81
82
83
● We are fencing on the transactional producer side,
which assumes a static partition assignment
● Consumer group partition assignments are dynamic
in practice
● Action: fence zombie producer commit
○ Different from epoch fencing
○ Utilize consumer group generation ~= epoch
● Add new APIs
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
84
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(offsets);
producer.commitTxn();
} catch (KafkaException e) {
}txn-status: on-going, partitions: {output, offset}
85
try {
producer.beginTxn();
records = consumer.poll();
for (Record rec <- records) {
// process ..
producer.send(“output”, ..);
}
producer.sendOffsets(offsets,
consumer.groupMetadata());
producer.commitTxn();
} catch (KafkaException e) {
}
txn-status: on-going, partitions: {output, offset}
86
● We are fencing on the transactional producer side,
which assumes a static partition assignment
● Consumer group partition assignments are dynamic
in practice
● Action: fence zombie producer commit
○ Different from epoch fencing
○ Utilize consumer group generation ~= epoch
● Add new APIs
○ Expose group generation through
consumer#groupMetadata()
○ Commit transaction with consumer metadata through
producer#sendOffsetsToTransaction(offsets,
groupMetadata)
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
87
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
88
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
● Only one open transaction allowed for each input
partition
89
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
● Only one open transaction allowed for each input
partition
● Offset commit is the only critical section
90
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
● Only one open transaction allowed for each input
partition
● Offset commit is the only critical section
○ Observed: Broker uses pending offsets to indicate
other ongoing transaction
91
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
● Only one open transaction allowed for each input
partition
● Offset commit is the only critical section
○ Observed: Broker uses pending offsets to indicate
other ongoing transaction
○ Observed: consumer always needs to fetch offset after
rebalance
92
What problems
are KIP-447
solving ?
● Offset commit fencing
● Concurrent transaction
● Only one open transaction allowed for each input
partition
● Offset commit is the only critical section
○ Observed: Broker uses pending offsets to indicate
other ongoing transaction
○ Observed: consumer always needs to fetch offset after
rebalance
○ Action: OffsetFetchRequest will back-off until pending
offsets are cleared, either by previous transaction
complete or timeout
93
94
95
96
97
98
99
447 Summary
100
447 Summary
● Resolve the semantic mismatch between producer
and consumer
○ Offset commit fencing
○ Concurrent transaction
101
447 Summary
● Resolve the semantic mismatch between producer
and consumer
○ Offset commit fencing
○ Concurrent transaction
● Make the one producer per processing unit possible
102
Number of Input
Partitions
At Least Once
Growth of Producers
Number of
Applications
5 10 15 20 25 30
600
500
400
300
200
1
00
Exactly Once
103
Number of Input
Partitions
At Least Once
Growth of Producers
Number of
Applications
5 10 15 20 25 30
600
500
400
300
200
1
00
Exactly Once
Exactly Once After 447
104
Scale Testing
105
Prove the 447 scalability improvement to
break the limit
- At_least_once
- Exactly_once
- Exactly_once_beta (post KIP-447 EOS)
Scale Testing
106
Scale Testing
107
Scale Testing
● Num.brokers = 3
● Num.input.partitions = 200
● Num.output.partitions = 100
● Test.interval.ms = 4 min
● Num.threads = 3
● Num.records.second = 1000
● Commit.interval.ms = 1 second
● Num.instances = 10, 20, 30...
108
Scale Testing
● Num.brokers = 3
● Num.input.partitions = 200
● Num.output.partitions = 100
● Test.interval.ms = 4 min
● Num.threads = 3
● Num.records.second = 1000
● Commit.interval.ms = 1 second
● Num.instances = 10, 20, 30...
109
Scale Testing
● At_least_once and
exactly_once_beta perform
steadily
● Exactly_once (pre KIP-447)
throughput degrades
significantly around 20-25
applications
110
Opt-in on Kafka Streams
111
Upgrade Procedure
112
Upgrade Procedure
● Rolling bounce brokers to >= Apache Kafka 2.5
113
Upgrade Procedure
● Rolling bounce brokers to >= Apache Kafka 2.5
● Upgrade the stream application binary and keep the
PROCESSING_GUARATNEE setting at "exactly_once". Do the first rolling
bounce, and make sure the group is stable with every instance on 2.6 binary.
114
Upgrade Procedure
● Rolling bounce brokers to >= Apache Kafka 2.5
● Upgrade the stream application binary and keep the
PROCESSING_GUARATNEE setting at "exactly_once". Do the first rolling
bounce, and make sure the group is stable with every instance on 2.6 binary.
● Upgrade the PROCESSING_GUARANTEE setting to "exactly_once_beta" and do
a second rolling bounce to start using new thread producer for EOS.
115
Conclusion
116
1. Walkthrough Kafka transaction model
117
1. Walkthrough Kafka transaction model
2. The usability and scalability issues with “single writer”
118
1. Walkthrough Kafka transaction model
2. The usability and scalability issues with “single writer”
3. How KIP-447 solves the challenges
119
1. Walkthrough Kafka transaction model
2. The usability and scalability issues with “single writer”
3. How KIP-447 solves the challenges
4. How to adopt KIP-447 in Kafka Streams
120
Thank you!
121
- KIP-98 - Exactly Once Delivery and Transactional
Messaging - Apache Kafka
- KIP-447: Producer scalability for exactly once
semantics - Apache Kafka
Resources

More Related Content

What's hot

Exactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka StreamsExactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka Streams
Guozhang Wang
 
Stream Application Development with Apache Kafka
Stream Application Development with Apache KafkaStream Application Development with Apache Kafka
Stream Application Development with Apache Kafka
Matthias J. Sax
 
Kick your database_to_the_curb_reston_08_27_19
Kick your database_to_the_curb_reston_08_27_19Kick your database_to_the_curb_reston_08_27_19
Kick your database_to_the_curb_reston_08_27_19
confluent
 
Robust Operations of Kafka Streams
Robust Operations of Kafka StreamsRobust Operations of Kafka Streams
Robust Operations of Kafka Streams
confluent
 
Event stream processing using Kafka streams
Event stream processing using Kafka streamsEvent stream processing using Kafka streams
Event stream processing using Kafka streams
Fredrik Vraalsen
 
Event sourcing - what could possibly go wrong ? Devoxx PL 2021
Event sourcing  - what could possibly go wrong ? Devoxx PL 2021Event sourcing  - what could possibly go wrong ? Devoxx PL 2021
Event sourcing - what could possibly go wrong ? Devoxx PL 2021
Andrzej Ludwikowski
 
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
confluent
 
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
confluent
 
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. SaxIntroducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
Databricks
 
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
confluent
 
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward
 
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
Yaroslav Tkachenko
 
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
confluent
 
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
confluent
 
KSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for KafkaKSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for Kafka
confluent
 
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupExactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Natan Silnitsky
 
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
confluent
 
Actors or Not: Async Event Architectures
Actors or Not: Async Event ArchitecturesActors or Not: Async Event Architectures
Actors or Not: Async Event Architectures
Yaroslav Tkachenko
 
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’ Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
confluent
 
Apache Kafka: New Features That You Might Not Know About
Apache Kafka: New Features That You Might Not Know AboutApache Kafka: New Features That You Might Not Know About
Apache Kafka: New Features That You Might Not Know About
Yaroslav Tkachenko
 

What's hot (20)

Exactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka StreamsExactly-once Stream Processing with Kafka Streams
Exactly-once Stream Processing with Kafka Streams
 
Stream Application Development with Apache Kafka
Stream Application Development with Apache KafkaStream Application Development with Apache Kafka
Stream Application Development with Apache Kafka
 
Kick your database_to_the_curb_reston_08_27_19
Kick your database_to_the_curb_reston_08_27_19Kick your database_to_the_curb_reston_08_27_19
Kick your database_to_the_curb_reston_08_27_19
 
Robust Operations of Kafka Streams
Robust Operations of Kafka StreamsRobust Operations of Kafka Streams
Robust Operations of Kafka Streams
 
Event stream processing using Kafka streams
Event stream processing using Kafka streamsEvent stream processing using Kafka streams
Event stream processing using Kafka streams
 
Event sourcing - what could possibly go wrong ? Devoxx PL 2021
Event sourcing  - what could possibly go wrong ? Devoxx PL 2021Event sourcing  - what could possibly go wrong ? Devoxx PL 2021
Event sourcing - what could possibly go wrong ? Devoxx PL 2021
 
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
Achieving a 50% Reduction in Cross-AZ Network Costs from Kafka (Uday Sagar Si...
 
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
What's the time? ...and why? (Mattias Sax, Confluent) Kafka Summit SF 2019
 
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. SaxIntroducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
Introducing Exactly Once Semantics in Apache Kafka with Matthias J. Sax
 
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
Real Time Streaming Data with Kafka and TensorFlow (Yong Tang, MobileIron) Ka...
 
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
Flink Forward Berlin 2017: Robert Metzger - Keep it going - How to reliably a...
 
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
Building Scalable and Extendable Data Pipeline for Call of Duty Games: Lesson...
 
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
Kafka Summit SF 2017 - MultiCluster, MultiTenant and Hierarchical Kafka Messa...
 
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
Production Ready Kafka on Kubernetes (Devandra Tagare, Lyft) Kafka Summit SF ...
 
KSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for KafkaKSQL: Streaming SQL for Kafka
KSQL: Streaming SQL for Kafka
 
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv MeetupExactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
Exactly Once Delivery with Kafka - Kafka Tel-Aviv Meetup
 
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
Apache kafka meet_up_zurich_at_swissre_from_zero_to_hero_with_kafka_connect_2...
 
Actors or Not: Async Event Architectures
Actors or Not: Async Event ArchitecturesActors or Not: Async Event Architectures
Actors or Not: Async Event Architectures
 
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’ Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
Serverless and Streaming: Building ‘eBay’ by ‘Turning the Database Inside Out’
 
Apache Kafka: New Features That You Might Not Know About
Apache Kafka: New Features That You Might Not Know AboutApache Kafka: New Features That You Might Not Know About
Apache Kafka: New Features That You Might Not Know About
 

Similar to Exactly-Once Made Easy: Transactional Messaging Improvement for Usability and Scalability

Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
Jiangjie Qin
 
Kostas Kloudas - Extending Flink's Streaming APIs
Kostas Kloudas - Extending Flink's Streaming APIsKostas Kloudas - Extending Flink's Streaming APIs
Kostas Kloudas - Extending Flink's Streaming APIs
Ververica
 
blockchain-and-trusted-computing
blockchain-and-trusted-computingblockchain-and-trusted-computing
blockchain-and-trusted-computing
YongraeJo
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
confluent
 
TDEA 2018 Kafka EOS (Exactly-once)
TDEA 2018 Kafka EOS (Exactly-once)TDEA 2018 Kafka EOS (Exactly-once)
TDEA 2018 Kafka EOS (Exactly-once)
Erhwen Kuo
 
SFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a ProSFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a Pro
Chester Chen
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India
 
JVM Memory Model - Yoav Abrahami, Wix
JVM Memory Model - Yoav Abrahami, WixJVM Memory Model - Yoav Abrahami, Wix
JVM Memory Model - Yoav Abrahami, Wix
Codemotion Tel Aviv
 
Crossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic LanguagesCrossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic Languages
Bastian Kruck
 
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyKotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Haim Yadid
 
High Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsHigh Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and Solutions
Yinghai Lu
 
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 Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
Flink Forward
 
ez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devicesez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devices
Stefan Gränitz
 
Transactions in Action: the Story of Exactly Once in Apache Kafka
Transactions in Action: the Story of Exactly Once in Apache KafkaTransactions in Action: the Story of Exactly Once in Apache Kafka
Transactions in Action: the Story of Exactly Once in Apache Kafka
HostedbyConfluent
 
Exactly-once Data Processing with Kafka Streams - July 27, 2017
Exactly-once Data Processing with Kafka Streams - July 27, 2017Exactly-once Data Processing with Kafka Streams - July 27, 2017
Exactly-once Data Processing with Kafka Streams - July 27, 2017
confluent
 
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
Aljoscha Krettek
 
Kenneth Knowles - Apache Beam - A Unified Model for Batch and Streaming Data...
Kenneth Knowles -  Apache Beam - A Unified Model for Batch and Streaming Data...Kenneth Knowles -  Apache Beam - A Unified Model for Batch and Streaming Data...
Kenneth Knowles - Apache Beam - A Unified Model for Batch and Streaming Data...
Flink Forward
 
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
Jeff Squyres
 
Presentation topalidis giorgos
Presentation topalidis giorgosPresentation topalidis giorgos
Presentation topalidis giorgos
Giorgos Topalidis
 
Presentation_Topalidis_Giorgos
Presentation_Topalidis_GiorgosPresentation_Topalidis_Giorgos
Presentation_Topalidis_GiorgosGiorgos Topalidis
 

Similar to Exactly-Once Made Easy: Transactional Messaging Improvement for Usability and Scalability (20)

Producer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache KafkaProducer Performance Tuning for Apache Kafka
Producer Performance Tuning for Apache Kafka
 
Kostas Kloudas - Extending Flink's Streaming APIs
Kostas Kloudas - Extending Flink's Streaming APIsKostas Kloudas - Extending Flink's Streaming APIs
Kostas Kloudas - Extending Flink's Streaming APIs
 
blockchain-and-trusted-computing
blockchain-and-trusted-computingblockchain-and-trusted-computing
blockchain-and-trusted-computing
 
Citi TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep DiveCiti TechTalk Session 2: Kafka Deep Dive
Citi TechTalk Session 2: Kafka Deep Dive
 
TDEA 2018 Kafka EOS (Exactly-once)
TDEA 2018 Kafka EOS (Exactly-once)TDEA 2018 Kafka EOS (Exactly-once)
TDEA 2018 Kafka EOS (Exactly-once)
 
SFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a ProSFBigAnalytics_20190724: Monitor kafka like a Pro
SFBigAnalytics_20190724: Monitor kafka like a Pro
 
Eclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JITEclipse Day India 2015 - Java bytecode analysis and JIT
Eclipse Day India 2015 - Java bytecode analysis and JIT
 
JVM Memory Model - Yoav Abrahami, Wix
JVM Memory Model - Yoav Abrahami, WixJVM Memory Model - Yoav Abrahami, Wix
JVM Memory Model - Yoav Abrahami, Wix
 
Crossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic LanguagesCrossing Abstraction Barriers When Debugging In Dynamic Languages
Crossing Abstraction Barriers When Debugging In Dynamic Languages
 
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the UglyKotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
Kotlin Backend Development 6 Yrs Recap. The Good, the Bad and the Ugly
 
High Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and SolutionsHigh Performance Erlang - Pitfalls and Solutions
High Performance Erlang - Pitfalls and Solutions
 
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 Berlin 2017: Aljoscha Krettek - Talk Python to me: Stream Proce...
 
ez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devicesez-clang C++ REPL for bare-metal embedded devices
ez-clang C++ REPL for bare-metal embedded devices
 
Transactions in Action: the Story of Exactly Once in Apache Kafka
Transactions in Action: the Story of Exactly Once in Apache KafkaTransactions in Action: the Story of Exactly Once in Apache Kafka
Transactions in Action: the Story of Exactly Once in Apache Kafka
 
Exactly-once Data Processing with Kafka Streams - July 27, 2017
Exactly-once Data Processing with Kafka Streams - July 27, 2017Exactly-once Data Processing with Kafka Streams - July 27, 2017
Exactly-once Data Processing with Kafka Streams - July 27, 2017
 
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
Talk Python To Me: Stream Processing in your favourite Language with Beam on ...
 
Kenneth Knowles - Apache Beam - A Unified Model for Batch and Streaming Data...
Kenneth Knowles -  Apache Beam - A Unified Model for Batch and Streaming Data...Kenneth Knowles -  Apache Beam - A Unified Model for Batch and Streaming Data...
Kenneth Knowles - Apache Beam - A Unified Model for Batch and Streaming Data...
 
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything(Open) MPI, Parallel Computing, Life, the Universe, and Everything
(Open) MPI, Parallel Computing, Life, the Universe, and Everything
 
Presentation topalidis giorgos
Presentation topalidis giorgosPresentation topalidis giorgos
Presentation topalidis giorgos
 
Presentation_Topalidis_Giorgos
Presentation_Topalidis_GiorgosPresentation_Topalidis_Giorgos
Presentation_Topalidis_Giorgos
 

More from Guozhang Wang

Consensus in Apache Kafka: From Theory to Production.pdf
Consensus in Apache Kafka: From Theory to Production.pdfConsensus in Apache Kafka: From Theory to Production.pdf
Consensus in Apache Kafka: From Theory to Production.pdf
Guozhang Wang
 
Introduction to the Incremental Cooperative Protocol of Kafka
Introduction to the Incremental Cooperative Protocol of KafkaIntroduction to the Incremental Cooperative Protocol of Kafka
Introduction to the Incremental Cooperative Protocol of Kafka
Guozhang Wang
 
Apache Kafka from 0.7 to 1.0, History and Lesson Learned
Apache Kafka from 0.7 to 1.0, History and Lesson LearnedApache Kafka from 0.7 to 1.0, History and Lesson Learned
Apache Kafka from 0.7 to 1.0, History and Lesson Learned
Guozhang Wang
 
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark StreamingBuilding Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Guozhang Wang
 
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache KafkaBuilding Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
Guozhang Wang
 
Introduction to Kafka Streams
Introduction to Kafka StreamsIntroduction to Kafka Streams
Introduction to Kafka Streams
Guozhang Wang
 
Apache Kafka at LinkedIn
Apache Kafka at LinkedInApache Kafka at LinkedIn
Apache Kafka at LinkedIn
Guozhang Wang
 
Behavioral Simulations in MapReduce
Behavioral Simulations in MapReduceBehavioral Simulations in MapReduce
Behavioral Simulations in MapReduce
Guozhang Wang
 
Automatic Scaling Iterative Computations
Automatic Scaling Iterative ComputationsAutomatic Scaling Iterative Computations
Automatic Scaling Iterative Computations
Guozhang Wang
 

More from Guozhang Wang (9)

Consensus in Apache Kafka: From Theory to Production.pdf
Consensus in Apache Kafka: From Theory to Production.pdfConsensus in Apache Kafka: From Theory to Production.pdf
Consensus in Apache Kafka: From Theory to Production.pdf
 
Introduction to the Incremental Cooperative Protocol of Kafka
Introduction to the Incremental Cooperative Protocol of KafkaIntroduction to the Incremental Cooperative Protocol of Kafka
Introduction to the Incremental Cooperative Protocol of Kafka
 
Apache Kafka from 0.7 to 1.0, History and Lesson Learned
Apache Kafka from 0.7 to 1.0, History and Lesson LearnedApache Kafka from 0.7 to 1.0, History and Lesson Learned
Apache Kafka from 0.7 to 1.0, History and Lesson Learned
 
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark StreamingBuilding Realtim Data Pipelines with Kafka Connect and Spark Streaming
Building Realtim Data Pipelines with Kafka Connect and Spark Streaming
 
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache KafkaBuilding Stream Infrastructure across Multiple Data Centers with Apache Kafka
Building Stream Infrastructure across Multiple Data Centers with Apache Kafka
 
Introduction to Kafka Streams
Introduction to Kafka StreamsIntroduction to Kafka Streams
Introduction to Kafka Streams
 
Apache Kafka at LinkedIn
Apache Kafka at LinkedInApache Kafka at LinkedIn
Apache Kafka at LinkedIn
 
Behavioral Simulations in MapReduce
Behavioral Simulations in MapReduceBehavioral Simulations in MapReduce
Behavioral Simulations in MapReduce
 
Automatic Scaling Iterative Computations
Automatic Scaling Iterative ComputationsAutomatic Scaling Iterative Computations
Automatic Scaling Iterative Computations
 

Recently uploaded

Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Sreedhar Chowdam
 
Democratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek AryaDemocratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek Arya
abh.arya
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
ViniHema
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
obonagu
 
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
MdTanvirMahtab2
 
DESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docxDESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docx
FluxPrime1
 
WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234
AafreenAbuthahir2
 
Halogenation process of chemical process industries
Halogenation process of chemical process industriesHalogenation process of chemical process industries
Halogenation process of chemical process industries
MuhammadTufail242431
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
Massimo Talia
 
Vaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdfVaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdf
Kamal Acharya
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
Kamal Acharya
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
Kamal Acharya
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
Kamal Acharya
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
Kamal Acharya
 
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSETECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
DuvanRamosGarzon1
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
Osamah Alsalih
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
seandesed
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
fxintegritypublishin
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
gerogepatton
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
VENKATESHvenky89705
 

Recently uploaded (20)

Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&BDesign and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
Design and Analysis of Algorithms-DP,Backtracking,Graphs,B&B
 
Democratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek AryaDemocratizing Fuzzing at Scale by Abhishek Arya
Democratizing Fuzzing at Scale by Abhishek Arya
 
power quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptxpower quality voltage fluctuation UNIT - I.pptx
power quality voltage fluctuation UNIT - I.pptx
 
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
在线办理(ANU毕业证书)澳洲国立大学毕业证录取通知书一模一样
 
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
Industrial Training at Shahjalal Fertilizer Company Limited (SFCL)
 
DESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docxDESIGN A COTTON SEED SEPARATION MACHINE.docx
DESIGN A COTTON SEED SEPARATION MACHINE.docx
 
WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234WATER CRISIS and its solutions-pptx 1234
WATER CRISIS and its solutions-pptx 1234
 
Halogenation process of chemical process industries
Halogenation process of chemical process industriesHalogenation process of chemical process industries
Halogenation process of chemical process industries
 
Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024Nuclear Power Economics and Structuring 2024
Nuclear Power Economics and Structuring 2024
 
Vaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdfVaccine management system project report documentation..pdf
Vaccine management system project report documentation..pdf
 
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdfCOLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
COLLEGE BUS MANAGEMENT SYSTEM PROJECT REPORT.pdf
 
Cosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdfCosmetic shop management system project report.pdf
Cosmetic shop management system project report.pdf
 
Courier management system project report.pdf
Courier management system project report.pdfCourier management system project report.pdf
Courier management system project report.pdf
 
Final project report on grocery store management system..pdf
Final project report on grocery store management system..pdfFinal project report on grocery store management system..pdf
Final project report on grocery store management system..pdf
 
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSETECHNICAL TRAINING MANUAL   GENERAL FAMILIARIZATION COURSE
TECHNICAL TRAINING MANUAL GENERAL FAMILIARIZATION COURSE
 
MCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdfMCQ Soil mechanics questions (Soil shear strength).pdf
MCQ Soil mechanics questions (Soil shear strength).pdf
 
Architectural Portfolio Sean Lockwood
Architectural Portfolio Sean LockwoodArchitectural Portfolio Sean Lockwood
Architectural Portfolio Sean Lockwood
 
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdfHybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
Hybrid optimization of pumped hydro system and solar- Engr. Abdul-Azeez.pdf
 
Immunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary AttacksImmunizing Image Classifiers Against Localized Adversary Attacks
Immunizing Image Classifiers Against Localized Adversary Attacks
 
road safety engineering r s e unit 3.pdf
road safety engineering  r s e unit 3.pdfroad safety engineering  r s e unit 3.pdf
road safety engineering r s e unit 3.pdf
 

Exactly-Once Made Easy: Transactional Messaging Improvement for Usability and Scalability

  • 1. 1 Exactly-Once Made Fast Boyang Chen: Engineer@Confluent Guozhang Wang: Engineer@Confluent
  • 2. 2 - Recap: exactly-once semantics (EOS) for Kafka - What cost are we paying for EOS today - Closing the gaps: usability and scalability Overview
  • 4. 4
  • 5. 5
  • 6. 6
  • 7. 7
  • 8. 8
  • 13. 13 The Kafka Approach for Exactly Once 1) Idempotent writes in order within a single topic partition 2) Transactional writes across multiple output topic partitions 3) Guarantee single writer for any input topic partitions [KIP-98, KIP-129]
  • 14. 14 The Kafka Approach for Exactly Once 1) Idempotent writes in order within a single topic partition 2) Transactional writes across multiple output topic partitions 3) Guarantee single writer for any input topic partitions [KIP-98, KIP-129]
  • 16. 16
  • 18. 18 txn-status: non-exist, partitions: {} producer.initTxn();
  • 19. 19 txn-status: empty, partitions: {} producer.initTxn(); non-exist
  • 20. 20 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. } } catch (KafkaException e) { }txn-status: empty, partitions: {} producer.initTxn();
  • 21. 21 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } } catch (KafkaException e) { }txn-status: empty, partitions: {} producer.initTxn();
  • 22. 22 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0} producer.initTxn(); non-exist {}
  • 23. 23 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0} producer.initTxn();
  • 24. 24 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0} producer.initTxn();
  • 25. 25 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0} producer.initTxn();
  • 26. 26 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0} producer.initTxn();
  • 27. 27 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0, offset-0} producer.initTxn(); {output-0}
  • 28. 28 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0, offset-0} producer.initTxn();
  • 29. 29 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: prep-commit, partitions: {output-0, offset-0} producer.initTxn(); on-going
  • 30. 30 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: prep-commit, partitions: {output-0, offset-0} producer.initTxn();
  • 31. 31 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: prep-commit, partitions: {output-0, offset-0} producer.initTxn();
  • 32. 32 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: committed, partitions: {output-0, offset-0} producer.initTxn(); prep-commit
  • 33. 33 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { }txn-status: on-going, partitions: {output-0, offset-0} producer.initTxn();
  • 34. 34 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { producer.abortTxn(); }txn-status: on-going, partitions: {output-0, offset-0} producer.initTxn();
  • 35. 35 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { producer.abortTxn(); }txn-status: prep-abort, partitions: {output-0, offset-0} producer.initTxn(); on-going
  • 36. 36 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { producer.abortTxn(); }txn-status: prep-abort, partitions: {output-0, offset-0} producer.initTxn();
  • 37. 37 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { producer.abortTxn(); }txn-status: prep-abort, partitions: {output-0, offset-0} producer.initTxn();
  • 38. 38 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(..); producer.commitTxn(); } catch (KafkaException e) { producer.abortTxn(); }txn-status: aborted, partitions: {output-0, offset-0} producer.initTxn(); prep-abort
  • 39. 39 The Kafka Approach for Exactly Once: 1) Idempotent writes in order within a single topic partition 2) Transactional writes across multiple output topic partitions 3) Guarantee single writer for any input topic partitions
  • 40. 40
  • 41. 41
  • 42. 42 At a given time, an input partition should only be processed by a single client
  • 43. 43 At a given time, an input partition should only be processed by a single client Consumer Group
  • 44. 44 At a given time, an input partition should only be processed by a single client Consumer Group
  • 45. 45 At a given time, an input partition should only be processed by a single client Consumer Group
  • 46. 46 The “Single Writer” Fencing Problem
  • 47. 47 When Taking Over the Partition: 1) The previous txn must have completed commit or abort so there are no concurrent transactions. 2) Other clients will be fenced write processing results for those input partitions, a.k.a we have a “single writer”.
  • 48. 48 Transactional ID: defines single writer scope 1) Configured by the unique producer `transactional.id` property. 2) Enforced fencing by a monotonic epoch for each id. 3) Producer initialization await pending transaction completion.
  • 49. 49 Transactional ID: defines single writer scope 1) Configured by the unique producer `transactional.id` property. 2) Enforced fencing by a monotonic epoch for each id. 3) Producer initialization await pending transaction completion.
  • 50. 50 Transactional ID: defines single writer scope 1) Configured by the unique producer `transactional.id` property. 2) Enforced fencing by a monotonic epoch for each id. 3) Producer initialization await pending transaction completion.
  • 51. 51 Consumer Group txn.Id = A, epoch = 1 txn.Id = B, epoch = 1
  • 54. 54 Consumer Group txn.Id = A, epoch = 1 txn.Id = B, initializing...
  • 55. 55 Consumer Group txn.Id = A, epoch = 1 txn.Id = B, epoch = 2
  • 56. 56 Consumer Group txn.Id = A, epoch = 1 txn.Id = B, epoch = 2 Num. producer transaction IDs ~= num. input partitions Producers need to be dynamically created when rebalance
  • 58. 58 Number of Input Partitions Growth of Producers Number of Applications 5 10 15 20 25 30 600 500 400 300 200 1 00
  • 59. 59 Number of Input Partitions At Least Once Growth of Producers Number of Applications 5 10 15 20 25 30 600 500 400 300 200 1 00
  • 60. 60 Number of Input Partitions At Least Once Growth of Producers Number of Applications 5 10 15 20 25 30 600 500 400 300 200 1 00 Exactly Once
  • 63. 63 What problems are KIP-447 solving ? ● Make one producer per process model work
  • 64. 64 What problems are KIP-447 solving ? ● Make one producer per process model work ● Unblock technical challenges ○ Offset commit fencing ○ Concurrent transaction
  • 65. 65 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 66. 66 ● We are fencing on the transactional producer side, which assumes a static partition assignment What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 67. 67 ● We are fencing on the transactional producer side, which assumes a static partition assignment ● Consumer group partition assignments are dynamic in practice What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 68. 68
  • 69. 69
  • 70. 70
  • 71. 71
  • 72. 72
  • 73. 73
  • 74. 74 ● We are fencing on the transactional producer side, which assumes a static partition assignment ● Consumer group partition assignments are dynamic in practice ● Action: fence zombie producer commit What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 75. 75 ● We are fencing on the transactional producer side, which assumes a static partition assignment ● Consumer group partition assignments are dynamic in practice ● Action: fence zombie producer commit ○ Different from epoch fencing ○ Utilize consumer group generation ~= epoch What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 76. 76
  • 77. 77
  • 78. 78
  • 79. 79
  • 80. 80
  • 81. 81
  • 82. 82
  • 83. 83 ● We are fencing on the transactional producer side, which assumes a static partition assignment ● Consumer group partition assignments are dynamic in practice ● Action: fence zombie producer commit ○ Different from epoch fencing ○ Utilize consumer group generation ~= epoch ● Add new APIs What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 84. 84 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(offsets); producer.commitTxn(); } catch (KafkaException e) { }txn-status: on-going, partitions: {output, offset}
  • 85. 85 try { producer.beginTxn(); records = consumer.poll(); for (Record rec <- records) { // process .. producer.send(“output”, ..); } producer.sendOffsets(offsets, consumer.groupMetadata()); producer.commitTxn(); } catch (KafkaException e) { } txn-status: on-going, partitions: {output, offset}
  • 86. 86 ● We are fencing on the transactional producer side, which assumes a static partition assignment ● Consumer group partition assignments are dynamic in practice ● Action: fence zombie producer commit ○ Different from epoch fencing ○ Utilize consumer group generation ~= epoch ● Add new APIs ○ Expose group generation through consumer#groupMetadata() ○ Commit transaction with consumer metadata through producer#sendOffsetsToTransaction(offsets, groupMetadata) What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 87. 87 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction
  • 88. 88 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction ● Only one open transaction allowed for each input partition
  • 89. 89 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction ● Only one open transaction allowed for each input partition ● Offset commit is the only critical section
  • 90. 90 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction ● Only one open transaction allowed for each input partition ● Offset commit is the only critical section ○ Observed: Broker uses pending offsets to indicate other ongoing transaction
  • 91. 91 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction ● Only one open transaction allowed for each input partition ● Offset commit is the only critical section ○ Observed: Broker uses pending offsets to indicate other ongoing transaction ○ Observed: consumer always needs to fetch offset after rebalance
  • 92. 92 What problems are KIP-447 solving ? ● Offset commit fencing ● Concurrent transaction ● Only one open transaction allowed for each input partition ● Offset commit is the only critical section ○ Observed: Broker uses pending offsets to indicate other ongoing transaction ○ Observed: consumer always needs to fetch offset after rebalance ○ Action: OffsetFetchRequest will back-off until pending offsets are cleared, either by previous transaction complete or timeout
  • 93. 93
  • 94. 94
  • 95. 95
  • 96. 96
  • 97. 97
  • 98. 98
  • 100. 100 447 Summary ● Resolve the semantic mismatch between producer and consumer ○ Offset commit fencing ○ Concurrent transaction
  • 101. 101 447 Summary ● Resolve the semantic mismatch between producer and consumer ○ Offset commit fencing ○ Concurrent transaction ● Make the one producer per processing unit possible
  • 102. 102 Number of Input Partitions At Least Once Growth of Producers Number of Applications 5 10 15 20 25 30 600 500 400 300 200 1 00 Exactly Once
  • 103. 103 Number of Input Partitions At Least Once Growth of Producers Number of Applications 5 10 15 20 25 30 600 500 400 300 200 1 00 Exactly Once Exactly Once After 447
  • 105. 105 Prove the 447 scalability improvement to break the limit - At_least_once - Exactly_once - Exactly_once_beta (post KIP-447 EOS) Scale Testing
  • 107. 107 Scale Testing ● Num.brokers = 3 ● Num.input.partitions = 200 ● Num.output.partitions = 100 ● Test.interval.ms = 4 min ● Num.threads = 3 ● Num.records.second = 1000 ● Commit.interval.ms = 1 second ● Num.instances = 10, 20, 30...
  • 108. 108 Scale Testing ● Num.brokers = 3 ● Num.input.partitions = 200 ● Num.output.partitions = 100 ● Test.interval.ms = 4 min ● Num.threads = 3 ● Num.records.second = 1000 ● Commit.interval.ms = 1 second ● Num.instances = 10, 20, 30...
  • 109. 109 Scale Testing ● At_least_once and exactly_once_beta perform steadily ● Exactly_once (pre KIP-447) throughput degrades significantly around 20-25 applications
  • 112. 112 Upgrade Procedure ● Rolling bounce brokers to >= Apache Kafka 2.5
  • 113. 113 Upgrade Procedure ● Rolling bounce brokers to >= Apache Kafka 2.5 ● Upgrade the stream application binary and keep the PROCESSING_GUARATNEE setting at "exactly_once". Do the first rolling bounce, and make sure the group is stable with every instance on 2.6 binary.
  • 114. 114 Upgrade Procedure ● Rolling bounce brokers to >= Apache Kafka 2.5 ● Upgrade the stream application binary and keep the PROCESSING_GUARATNEE setting at "exactly_once". Do the first rolling bounce, and make sure the group is stable with every instance on 2.6 binary. ● Upgrade the PROCESSING_GUARANTEE setting to "exactly_once_beta" and do a second rolling bounce to start using new thread producer for EOS.
  • 116. 116 1. Walkthrough Kafka transaction model
  • 117. 117 1. Walkthrough Kafka transaction model 2. The usability and scalability issues with “single writer”
  • 118. 118 1. Walkthrough Kafka transaction model 2. The usability and scalability issues with “single writer” 3. How KIP-447 solves the challenges
  • 119. 119 1. Walkthrough Kafka transaction model 2. The usability and scalability issues with “single writer” 3. How KIP-447 solves the challenges 4. How to adopt KIP-447 in Kafka Streams
  • 121. 121 - KIP-98 - Exactly Once Delivery and Transactional Messaging - Apache Kafka - KIP-447: Producer scalability for exactly once semantics - Apache Kafka Resources