SlideShare a Scribd company logo
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Looking for Patterns -
FlinkCEP Library
_D. Wysakowicz_
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
About me
■ Data Engineer at GetInData
■ Apache Flink Committer
■ Involved in Flink CEP library development
Dawid Wysakowicz
@OneMoreCoder
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
That moment
when party
goes wrong.
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Were there
any signs?
Any Patterns?
That moment
when party
goes wrong.
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Image source: “Continuous Analytics: Stream Query Processing in Practice”, Michael J Franklin, Professor, UC Berkley, Dec 2009 and
http://www.slideshare.net/JoshBaer/shortening-the-feedback-loop-big-data-spain-external
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Buying Home Insurance Online
Property
Info
Offer
Accept
General Terms
of Contract
PaymentScope
Change
Info
Change
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Buying Home Insurance Online
Property
Info
Offer
Accept
Exit
Scope
Change
Info
Change
General Terms
of Contract
Payment
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Simple Example - Matching Payments
Notify whenever a payment for accepted offer arrives
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Create Pattern
/* create pattern sequence*/
Pattern<Event, ?> pattern = Pattern<Event>
.begin("offer accepted")
.subtype(OfferAccepted.class)
.followedBy("payment received")
.subtype(PaymentReceived.class)
.within(Time.hours(48));
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Apply Pattern
/* create pattern sequence*/
Pattern<Event, ?> pattern = Pattern<Event>
.begin("offer accepted")
.subtype(OfferAccepted.class)
.followedBy("payment received")
.subtype(PaymentReceived.class)
.within(Time.hours(48));
/* convert match sequence into alerts */
DataStream<Alert> alerts = CEP.pattern(stream, pattern)
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Select Matches
/* create pattern sequence*/
Pattern<Event, ?> pattern = Pattern<Event>
.begin("offer accepted")
.subtype(OfferAccepted.class)
.followedBy("payment received")
.subtype(PaymentReceived.class)
.within(Time.hours(48));
/* convert match sequence into alerts */
DataStream<Alert> alerts = CEP.pattern(stream, pattern)
.select(new PatternSelectFunction<Event, Alert>() {
@Override
public Alert select(Map<String, List<Event>> match) throws Exception {
return createAlert(match);
}
});
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Handle Results
/* create pattern sequence*/
Pattern<Event, ?> pattern = Pattern<Event>
.begin("offer accepted")
.subtype(OfferAccepted.class)
.followedBy("payment received")
.subtype(PaymentReceived.class)
.within(Time.hours(48));
/* convert match sequence into alerts */
DataStream<Alert> alerts = CEP.pattern(stream, pattern)
.select(new PatternSelectFunction<Event, Alert>() {
@Override
public Alert select(Map<String, List<Event>> match) throws Exception {
return createAlert(match);
}
});
/* write out results */
alerts.addSink(...);
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Seamless Integration - Standard Pipeline
DataStream
Source e.g.
DataStream
Sink e.g.
DataStream
Transformations
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Seamless Integration - CEP Library
DataStream
Source e.g.
DataStream
Sink e.g.
DataStream
Transformations
CEP
DataStream Pattern
DataStream
Stream of matches
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
CEP Resulting Matches
CEP
DataStream
Pattern
A -> B -> C
C2C1B2B1A
DataStream
Stream of matches
A, B1, C1 A, B2, C1 A, B1, C2 A, B2, C2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
CEP Timeouted Matches
CEP
DataStream
Pattern
A -> B -> C within 5 seconds
C2(t=7)B2(t=4)B1(t=2)A(t = 1)
DataStream
Stream of timeouted matches
W=6
?
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
CEP Timeouted Matches
CEP
DataStream
Pattern
A -> B -> C within 5 seconds
C2(t=7)B2(t=4)B1(t=2)A(t = 1)
DataStream
Stream of timeouted matches
A A, B1 A, B2
W=6
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Pattern Sequence
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Patterns
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
Basic building blocks
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Conditions
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
Basic building blocks
Condition specification
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Time Restrictions
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
.within(Time.seconds(3))
Basic building blocks
Condition specification
Time restrictions
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Time Restrictions
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
.within(Time.seconds(3))
Basic building blocks
Condition specification
Time restrictions
NOTE: The time restriction is a
global property. This is a period in
which either whole match is
generated or partial matches are
timeouted.
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
Consuming Strategy
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
Consuming Strategy
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
■ Skip till any
Consuming Strategy
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
■ Skip till any
■ Not follow
Consuming Strategy
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
■ Skip till any
Consuming Strategy
■ Not follow
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
■ Skip till any
■ Not follow
■ Not next
Consuming Strategy
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Skip till next
■ Strict continuity
■ Skip till any
Consuming Strategy
■ Not follow
■ Not next
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Consuming Strategy
■ Skip till next
■ Strict continuity
■ Skip till any
■ Not follow
■ Not next
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Looping Example
How many offer changes before accepting?
...
?
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Pattern Specification
Pattern
.begin("start")
.subtype(Event.class)
.where(...)
.or(...)
.times(3)
.followedBy("next")
.subtype(Event.class)
.where(...)
.where(...)
.oneOrMore().optional()
.within(Time.seconds(3))
Quantifier application
Basic building blocks
Condition specification
Time restrictions
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Quantifiers
■ Singleton pattern
■ Complex pattern
● Times (count)
● Looping pattern
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Quantifiers
■ Singleton pattern
■ Complex pattern
● Times (count)
● Looping pattern
■ Optional pattern
● singleton -> optional
● times -> no or exactly n times
● oneOrMore -> zeroOrMore
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Complex Patterns - Consuming Strategies
?
Pattern
.begin("offer").subtype(Offer.class)
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
?
Pattern
.begin("offer").subtype(Offer.class)
.followedByAny("changes").subtype(OfferChanged.class)
Complex Patterns - Consuming Strategies
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
?
Pattern
.begin("offer").subtype(Offer.class)
.followedByAny("changes").subtype(OfferChanged.class)
.oneOrMore()
.consecutive()
Complex Patterns - Consuming Strategies
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
?
Pattern
.begin("offer").subtype(Offer.class)
.followedByAny("changes").subtype(OfferChanged.class)
.oneOrMore()
.consecutive()
.followedBy(“accepted”).subtype(OfferAccepted.class)
Complex Patterns - Consuming Strategies
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
■ Consuming strategy - before first element
■ Inner consuming strategy - between events matched in the
Pattern
Complex Patterns - Consuming Strategies
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Iterative Condition
Trigger alert when the same property changed.
PL Flood PL
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Iterative Condition
public abstract class IterativeCondition<T> implements Function, Serializable {
public abstract boolean filter(T value, Context<T> ctx) throws Exception;
/**
* @return An {@link Iterable} over the already accepted elements
* for a given pattern. Elements are iterated in the order they were
* inserted in the pattern.
*
* @param name The name of the pattern.
*/
public interface Context<T> extends Serializable {
Iterable<T> getEventsForPattern(String name);
}
}
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Iterative Condition
Trigger alert when the same property changed.
Pattern
.begin("first change").subtype(OfferChanged.class)
.followedBy("second change").subtype(OfferChanged.class)
.where(new IterativeCondition<OfferChanged>() {
@Override
public boolean filter(OfferChanged value, Context<OfferChanged> ctx) {
return ctx.getEventsForPattern("first change").iterator().next()
.property().equals(value.property());
}
});
PL Flood PL
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Complex Example
Alert when a user constantly decreases value of the
property
-12.000€
-14.000€
-24.000€
-100.000€
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Complex Example - Implementation
Alert when a user changed value by more than 200% of
previous average change
Pattern
.begin("change").subtype(ValueChanged.class)
.oneOrMore()
.followedBy("alerting change").subtype(ValueChanged.class)
.where(new IterativeCondition<OfferChanged>() {
@Override
public boolean filter(OfferChanged value, Context<OfferChanged> ctx) {
double averageChange = countAverage(ctx.getEventsForPattern("change"));
return value.change > 2 * averageChange;
}
});
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
FlinkCEP & Asian Telco
■ +15 subscriber-oriented triggers to implement
● e.g. when a subscriber registers in a roaming and then
spends X USD in a roaming
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Summary
■ Shortest possible feedback loop
■ Seamless integration with Flink ecosystem
■ Complex patterns
● Dynamic length
● Conditions based on calculations
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
How does it works underneath?
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventStream
Order handling
1 5 4 2
PatternOperator
ElementsQueue
1 2 4 5
NFA
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventStream
Order handling
1 5 4 82
W=5
PatternOperator
ElementsQueue
1 2 4 5
W=5
NFA
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventStream
Order handling
1 5 4 82
W=5
PatternOperator
ElementsQueue
1 2 4 5
W=5
NFA
MatchesStream
A B
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventStream
Order handling - late elements
1 5 4 8 32
W=5
PatternOperator
ElementsQueue
1 2 4 5
W=5
NFA
MatchesStream
A B
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventStream
Order handling - late elements
1 5 4 8 32
W=5
PatternOperator
ElementsQueue
1 2 4 5
W=5
NFA
MatchesStream
A B
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Nondeterministic Finite Automaton
■ Graph where:
● Vertices = States
● Edges = Transitions
■ IGNORE - event not consumed
■ TAKE - event consumed
■ PROCEED - event analyzed in the target state
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Example of NFA
Pattern
.begin(“A”)
.followedByAny(“B”).optional()
.next(“C”)
.followedBy(“D”)
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
Pattern
.begin(“A”)
.followedByAny(“B”).optional()
.next(“C”)
.followedBy(“D”)
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
A
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A
A
B?
A
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
A B
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
A B
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
A B
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A
A
B?
A
B
A
C
B?
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
A B C
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A B? C D
TAKE TAKE
TAKE
PROCEED
IGNORE IGNORE IGNORE
TAKE
A B C
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A
A
B?
A
B
A
C
B?
D
B?
D
A
C
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
EventsStream
Example of NFA
A
A
B?
A
B
A
C
B?
D
B?
D
A
C D
Match: A, C, D
B?
Match: A, B, C, D
A
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2
© Copyright. All rights reserved. Not to be reproduced without prior written consent.
Shared Buffer - how it works
MiddleStart End
S1
S2
M1
M2
M3
E1
E2
1
2
1.0
1.0.0
1.0.0.0
2.0
1.0.0.0.0
1.0.0.0.1
2.0.0
Events order
S1 M1 M2 S2 M3 E1 E2

More Related Content

Similar to FlinkCEP Library - Dawid Wysakowicz, GetInData (WHUG)

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTech
Antya Dev
 
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
GITS Indonesia
 
Assessing the Reliability of a Human Estimator
Assessing the Reliability of a Human EstimatorAssessing the Reliability of a Human Estimator
Assessing the Reliability of a Human Estimator
Tim Menzies
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
Danilo Sato
 
JavaScript Refactoring
JavaScript RefactoringJavaScript Refactoring
JavaScript Refactoring
Krzysztof Szafranek
 
Naked Performance With Clojure
Naked Performance With ClojureNaked Performance With Clojure
Naked Performance With Clojure
Metosin Oy
 
Agile Machine Learning for Real-time Recommender Systems
Agile Machine Learning for Real-time Recommender SystemsAgile Machine Learning for Real-time Recommender Systems
Agile Machine Learning for Real-time Recommender Systems
Johann Schleier-Smith
 
JavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern ImplementationJavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern Implementation
davejohnson
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
Matt Raible
 
Hangman for the Masses Showcase of Web Tech
Hangman for the Masses Showcase of Web TechHangman for the Masses Showcase of Web Tech
Hangman for the Masses Showcase of Web Tech
Olmo F. Maldonado
 
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
Scalable Event Processing with WSO2CEP @  WSO2Con2015euScalable Event Processing with WSO2CEP @  WSO2Con2015eu
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
Sriskandarajah Suhothayan
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
Verein FM Konferenz
 
How we sleep well at night using Hystrix at Finn.no
How we sleep well at night using Hystrix at Finn.noHow we sleep well at night using Hystrix at Finn.no
How we sleep well at night using Hystrix at Finn.no
Henning Spjelkavik
 
Handling Exceptions In C &amp; C++ [Part B] Ver 2
Handling Exceptions In C &amp; C++ [Part B] Ver 2Handling Exceptions In C &amp; C++ [Part B] Ver 2
Handling Exceptions In C &amp; C++ [Part B] Ver 2
ppd1961
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuri
TIS Inc.
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Fwdays
 
Building Hermetic Systems (without Docker)
Building Hermetic Systems (without Docker)Building Hermetic Systems (without Docker)
Building Hermetic Systems (without Docker)
William Farrell
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
James Stone
 
Backbone the Good Parts
Backbone the Good PartsBackbone the Good Parts
Backbone the Good Parts
Renan Carvalho
 
JavaScript_introduction_upload.pdf
JavaScript_introduction_upload.pdfJavaScript_introduction_upload.pdf
JavaScript_introduction_upload.pdf
Kongu Engineering College, Perundurai, Erode
 

Similar to FlinkCEP Library - Dawid Wysakowicz, GetInData (WHUG) (20)

Adopting F# at SBTech
Adopting F# at SBTechAdopting F# at SBTech
Adopting F# at SBTech
 
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
Gits class #22: [ONLINE] Analyze Your User's Activities Using BigQuery and Da...
 
Assessing the Reliability of a Human Estimator
Assessing the Reliability of a Human EstimatorAssessing the Reliability of a Human Estimator
Assessing the Reliability of a Human Estimator
 
Refactoring at Large
Refactoring at LargeRefactoring at Large
Refactoring at Large
 
JavaScript Refactoring
JavaScript RefactoringJavaScript Refactoring
JavaScript Refactoring
 
Naked Performance With Clojure
Naked Performance With ClojureNaked Performance With Clojure
Naked Performance With Clojure
 
Agile Machine Learning for Real-time Recommender Systems
Agile Machine Learning for Real-time Recommender SystemsAgile Machine Learning for Real-time Recommender Systems
Agile Machine Learning for Real-time Recommender Systems
 
JavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern ImplementationJavaScript and DOM Pattern Implementation
JavaScript and DOM Pattern Implementation
 
Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017Front End Development for Back End Developers - UberConf 2017
Front End Development for Back End Developers - UberConf 2017
 
Hangman for the Masses Showcase of Web Tech
Hangman for the Masses Showcase of Web TechHangman for the Masses Showcase of Web Tech
Hangman for the Masses Showcase of Web Tech
 
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
Scalable Event Processing with WSO2CEP @  WSO2Con2015euScalable Event Processing with WSO2CEP @  WSO2Con2015eu
Scalable Event Processing with WSO2CEP @ WSO2Con2015eu
 
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menannoFMK2019 being an optimist in a pessimistic world by vincenzo menanno
FMK2019 being an optimist in a pessimistic world by vincenzo menanno
 
How we sleep well at night using Hystrix at Finn.no
How we sleep well at night using Hystrix at Finn.noHow we sleep well at night using Hystrix at Finn.no
How we sleep well at night using Hystrix at Finn.no
 
Handling Exceptions In C &amp; C++ [Part B] Ver 2
Handling Exceptions In C &amp; C++ [Part B] Ver 2Handling Exceptions In C &amp; C++ [Part B] Ver 2
Handling Exceptions In C &amp; C++ [Part B] Ver 2
 
Preparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuriPreparing for distributed system failures using akka #ScalaMatsuri
Preparing for distributed system failures using akka #ScalaMatsuri
 
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
Andrii Dembitskyi "Events in our applications Event bus and distributed systems"
 
Building Hermetic Systems (without Docker)
Building Hermetic Systems (without Docker)Building Hermetic Systems (without Docker)
Building Hermetic Systems (without Docker)
 
Turku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-componentsTurku loves-storybook-styleguidist-styled-components
Turku loves-storybook-styleguidist-styled-components
 
Backbone the Good Parts
Backbone the Good PartsBackbone the Good Parts
Backbone the Good Parts
 
JavaScript_introduction_upload.pdf
JavaScript_introduction_upload.pdfJavaScript_introduction_upload.pdf
JavaScript_introduction_upload.pdf
 

More from GetInData

Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdfEnhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
GetInData
 
How do we work with customers on Big Data / ML / Analytics Projects using Scr...
How do we work with customers on Big Data / ML / Analytics Projects using Scr...How do we work with customers on Big Data / ML / Analytics Projects using Scr...
How do we work with customers on Big Data / ML / Analytics Projects using Scr...
GetInData
 
Data-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
Data-Driven Fast Track: Introduction to data-drivenness with Piotr MenclewiczData-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
Data-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
GetInData
 
How NOT to win a Kaggle competition
How NOT to win a Kaggle competitionHow NOT to win a Kaggle competition
How NOT to win a Kaggle competition
GetInData
 
How to become good Developer in Scrum Team?
How to become good Developer in Scrum Team? How to become good Developer in Scrum Team?
How to become good Developer in Scrum Team?
GetInData
 
OpenLineage & Airflow - data lineage has never been easier
OpenLineage & Airflow - data lineage has never been easierOpenLineage & Airflow - data lineage has never been easier
OpenLineage & Airflow - data lineage has never been easier
GetInData
 
Benefits of a Homemade ML Platform
Benefits of a Homemade ML PlatformBenefits of a Homemade ML Platform
Benefits of a Homemade ML Platform
GetInData
 
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInDataModel serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
GetInData
 
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
GetInData
 
MLOps implemented - how we combine the cloud & open-source to boost data scie...
MLOps implemented - how we combine the cloud & open-source to boost data scie...MLOps implemented - how we combine the cloud & open-source to boost data scie...
MLOps implemented - how we combine the cloud & open-source to boost data scie...
GetInData
 
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
GetInData
 
Feast + Amundsen Integration - Mariusz Strzelecki, GetInData
Feast + Amundsen Integration - Mariusz Strzelecki, GetInDataFeast + Amundsen Integration - Mariusz Strzelecki, GetInData
Feast + Amundsen Integration - Mariusz Strzelecki, GetInData
GetInData
 
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
GetInData
 
Big data trends - Krzysztof Zarzycki, GetInData
Big data trends - Krzysztof Zarzycki, GetInDataBig data trends - Krzysztof Zarzycki, GetInData
Big data trends - Krzysztof Zarzycki, GetInData
GetInData
 
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
GetInData
 
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
GetInData
 
Monitoring in Big Data Platform - Albert Lewandowski, GetInData
Monitoring in Big Data Platform - Albert Lewandowski, GetInDataMonitoring in Big Data Platform - Albert Lewandowski, GetInData
Monitoring in Big Data Platform - Albert Lewandowski, GetInData
GetInData
 
Complex event processing platform handling millions of users - Krzysztof Zarz...
Complex event processing platform handling millions of users - Krzysztof Zarz...Complex event processing platform handling millions of users - Krzysztof Zarz...
Complex event processing platform handling millions of users - Krzysztof Zarz...
GetInData
 
Predicting Startup Market Trends based on the news and social media - Albert ...
Predicting Startup Market Trends based on the news and social media - Albert ...Predicting Startup Market Trends based on the news and social media - Albert ...
Predicting Startup Market Trends based on the news and social media - Albert ...
GetInData
 
Managing Big Data projects in a constantly changing environment - Rafał Zalew...
Managing Big Data projects in a constantly changing environment - Rafał Zalew...Managing Big Data projects in a constantly changing environment - Rafał Zalew...
Managing Big Data projects in a constantly changing environment - Rafał Zalew...
GetInData
 

More from GetInData (20)

Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdfEnhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
Enhanced Enterprise Intelligence with your personal AI Data Copilot.pdf
 
How do we work with customers on Big Data / ML / Analytics Projects using Scr...
How do we work with customers on Big Data / ML / Analytics Projects using Scr...How do we work with customers on Big Data / ML / Analytics Projects using Scr...
How do we work with customers on Big Data / ML / Analytics Projects using Scr...
 
Data-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
Data-Driven Fast Track: Introduction to data-drivenness with Piotr MenclewiczData-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
Data-Driven Fast Track: Introduction to data-drivenness with Piotr Menclewicz
 
How NOT to win a Kaggle competition
How NOT to win a Kaggle competitionHow NOT to win a Kaggle competition
How NOT to win a Kaggle competition
 
How to become good Developer in Scrum Team?
How to become good Developer in Scrum Team? How to become good Developer in Scrum Team?
How to become good Developer in Scrum Team?
 
OpenLineage & Airflow - data lineage has never been easier
OpenLineage & Airflow - data lineage has never been easierOpenLineage & Airflow - data lineage has never been easier
OpenLineage & Airflow - data lineage has never been easier
 
Benefits of a Homemade ML Platform
Benefits of a Homemade ML PlatformBenefits of a Homemade ML Platform
Benefits of a Homemade ML Platform
 
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInDataModel serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
Model serving made easy using Kedro pipelines - Mariusz Strzelecki, GetInData
 
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
Creating Real-Time Data Streaming powered by SQL on Kubernetes - Albert Lewan...
 
MLOps implemented - how we combine the cloud & open-source to boost data scie...
MLOps implemented - how we combine the cloud & open-source to boost data scie...MLOps implemented - how we combine the cloud & open-source to boost data scie...
MLOps implemented - how we combine the cloud & open-source to boost data scie...
 
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
Best Practices for ETL with Apache NiFi on Kubernetes - Albert Lewandowski, G...
 
Feast + Amundsen Integration - Mariusz Strzelecki, GetInData
Feast + Amundsen Integration - Mariusz Strzelecki, GetInDataFeast + Amundsen Integration - Mariusz Strzelecki, GetInData
Feast + Amundsen Integration - Mariusz Strzelecki, GetInData
 
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...Kubernetes and real-time analytics - how to connect these two worlds with Apa...
Kubernetes and real-time analytics - how to connect these two worlds with Apa...
 
Big data trends - Krzysztof Zarzycki, GetInData
Big data trends - Krzysztof Zarzycki, GetInDataBig data trends - Krzysztof Zarzycki, GetInData
Big data trends - Krzysztof Zarzycki, GetInData
 
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
Functioning incessantly of Data Science Platform with Kubeflow - Albert Lewan...
 
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
Analytics 101 - How to build a data-driven organisation? - Rafał Małanij, Get...
 
Monitoring in Big Data Platform - Albert Lewandowski, GetInData
Monitoring in Big Data Platform - Albert Lewandowski, GetInDataMonitoring in Big Data Platform - Albert Lewandowski, GetInData
Monitoring in Big Data Platform - Albert Lewandowski, GetInData
 
Complex event processing platform handling millions of users - Krzysztof Zarz...
Complex event processing platform handling millions of users - Krzysztof Zarz...Complex event processing platform handling millions of users - Krzysztof Zarz...
Complex event processing platform handling millions of users - Krzysztof Zarz...
 
Predicting Startup Market Trends based on the news and social media - Albert ...
Predicting Startup Market Trends based on the news and social media - Albert ...Predicting Startup Market Trends based on the news and social media - Albert ...
Predicting Startup Market Trends based on the news and social media - Albert ...
 
Managing Big Data projects in a constantly changing environment - Rafał Zalew...
Managing Big Data projects in a constantly changing environment - Rafał Zalew...Managing Big Data projects in a constantly changing environment - Rafał Zalew...
Managing Big Data projects in a constantly changing environment - Rafał Zalew...
 

Recently uploaded

UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
Kari Kakkonen
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
ControlCase
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
Uni Systems S.M.S.A.
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
Alan Dix
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Paige Cruz
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
Alex Pruden
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
Kumud Singh
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
Neo4j
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
Neo4j
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
sonjaschweigert1
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
Alpen-Adria-Universität
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
KatiaHIMEUR1
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
Neo4j
 

Recently uploaded (20)

UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
DevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA ConnectDevOps and Testing slides at DASA Connect
DevOps and Testing slides at DASA Connect
 
PCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase TeamPCI PIN Basics Webinar from the Controlcase Team
PCI PIN Basics Webinar from the Controlcase Team
 
Microsoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdfMicrosoft - Power Platform_G.Aspiotis.pdf
Microsoft - Power Platform_G.Aspiotis.pdf
 
Epistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI supportEpistemic Interaction - tuning interfaces to provide information for AI support
Epistemic Interaction - tuning interfaces to provide information for AI support
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdfObservability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
Observability Concepts EVERY Developer Should Know -- DeveloperWeek Europe.pdf
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex ProofszkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
zkStudyClub - Reef: Fast Succinct Non-Interactive Zero-Knowledge Regex Proofs
 
Mind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AIMind map of terminologies used in context of Generative AI
Mind map of terminologies used in context of Generative AI
 
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
GraphSummit Singapore | The Future of Agility: Supercharging Digital Transfor...
 
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
GraphSummit Singapore | Neo4j Product Vision & Roadmap - Q2 2024
 
A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...A tale of scale & speed: How the US Navy is enabling software delivery from l...
A tale of scale & speed: How the US Navy is enabling software delivery from l...
 
Video Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the FutureVideo Streaming: Then, Now, and in the Future
Video Streaming: Then, Now, and in the Future
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !Securing your Kubernetes cluster_ a step-by-step guide to success !
Securing your Kubernetes cluster_ a step-by-step guide to success !
 
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024GraphSummit Singapore | The Art of the  Possible with Graph - Q2 2024
GraphSummit Singapore | The Art of the Possible with Graph - Q2 2024
 

FlinkCEP Library - Dawid Wysakowicz, GetInData (WHUG)

  • 1. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Looking for Patterns - FlinkCEP Library _D. Wysakowicz_
  • 2. © Copyright. All rights reserved. Not to be reproduced without prior written consent. About me ■ Data Engineer at GetInData ■ Apache Flink Committer ■ Involved in Flink CEP library development Dawid Wysakowicz @OneMoreCoder
  • 3. © Copyright. All rights reserved. Not to be reproduced without prior written consent. That moment when party goes wrong.
  • 4. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Were there any signs? Any Patterns? That moment when party goes wrong.
  • 5. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Image source: “Continuous Analytics: Stream Query Processing in Practice”, Michael J Franklin, Professor, UC Berkley, Dec 2009 and http://www.slideshare.net/JoshBaer/shortening-the-feedback-loop-big-data-spain-external
  • 6. © Copyright. All rights reserved. Not to be reproduced without prior written consent.
  • 7. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Buying Home Insurance Online Property Info Offer Accept General Terms of Contract PaymentScope Change Info Change
  • 8. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Buying Home Insurance Online Property Info Offer Accept Exit Scope Change Info Change General Terms of Contract Payment
  • 9. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Simple Example - Matching Payments Notify whenever a payment for accepted offer arrives
  • 10. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Create Pattern /* create pattern sequence*/ Pattern<Event, ?> pattern = Pattern<Event> .begin("offer accepted") .subtype(OfferAccepted.class) .followedBy("payment received") .subtype(PaymentReceived.class) .within(Time.hours(48));
  • 11. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Apply Pattern /* create pattern sequence*/ Pattern<Event, ?> pattern = Pattern<Event> .begin("offer accepted") .subtype(OfferAccepted.class) .followedBy("payment received") .subtype(PaymentReceived.class) .within(Time.hours(48)); /* convert match sequence into alerts */ DataStream<Alert> alerts = CEP.pattern(stream, pattern)
  • 12. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Select Matches /* create pattern sequence*/ Pattern<Event, ?> pattern = Pattern<Event> .begin("offer accepted") .subtype(OfferAccepted.class) .followedBy("payment received") .subtype(PaymentReceived.class) .within(Time.hours(48)); /* convert match sequence into alerts */ DataStream<Alert> alerts = CEP.pattern(stream, pattern) .select(new PatternSelectFunction<Event, Alert>() { @Override public Alert select(Map<String, List<Event>> match) throws Exception { return createAlert(match); } });
  • 13. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Handle Results /* create pattern sequence*/ Pattern<Event, ?> pattern = Pattern<Event> .begin("offer accepted") .subtype(OfferAccepted.class) .followedBy("payment received") .subtype(PaymentReceived.class) .within(Time.hours(48)); /* convert match sequence into alerts */ DataStream<Alert> alerts = CEP.pattern(stream, pattern) .select(new PatternSelectFunction<Event, Alert>() { @Override public Alert select(Map<String, List<Event>> match) throws Exception { return createAlert(match); } }); /* write out results */ alerts.addSink(...);
  • 14. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Seamless Integration - Standard Pipeline DataStream Source e.g. DataStream Sink e.g. DataStream Transformations
  • 15. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Seamless Integration - CEP Library DataStream Source e.g. DataStream Sink e.g. DataStream Transformations CEP DataStream Pattern DataStream Stream of matches
  • 16. © Copyright. All rights reserved. Not to be reproduced without prior written consent. CEP Resulting Matches CEP DataStream Pattern A -> B -> C C2C1B2B1A DataStream Stream of matches A, B1, C1 A, B2, C1 A, B1, C2 A, B2, C2
  • 17. © Copyright. All rights reserved. Not to be reproduced without prior written consent. CEP Timeouted Matches CEP DataStream Pattern A -> B -> C within 5 seconds C2(t=7)B2(t=4)B1(t=2)A(t = 1) DataStream Stream of timeouted matches W=6 ?
  • 18. © Copyright. All rights reserved. Not to be reproduced without prior written consent. CEP Timeouted Matches CEP DataStream Pattern A -> B -> C within 5 seconds C2(t=7)B2(t=4)B1(t=2)A(t = 1) DataStream Stream of timeouted matches A A, B1 A, B2 W=6
  • 19. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Pattern Sequence Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .followedBy("next") .subtype(Event.class) .where(...) .where(...)
  • 20. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Patterns Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .followedBy("next") .subtype(Event.class) .where(...) .where(...) Basic building blocks
  • 21. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Conditions Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .followedBy("next") .subtype(Event.class) .where(...) .where(...) Basic building blocks Condition specification
  • 22. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Time Restrictions Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .followedBy("next") .subtype(Event.class) .where(...) .where(...) .within(Time.seconds(3)) Basic building blocks Condition specification Time restrictions
  • 23. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Time Restrictions Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .followedBy("next") .subtype(Event.class) .where(...) .where(...) .within(Time.seconds(3)) Basic building blocks Condition specification Time restrictions NOTE: The time restriction is a global property. This is a period in which either whole match is generated or partial matches are timeouted.
  • 24. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next Consuming Strategy
  • 25. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity Consuming Strategy
  • 26. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity ■ Skip till any Consuming Strategy
  • 27. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity ■ Skip till any ■ Not follow Consuming Strategy
  • 28. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity ■ Skip till any Consuming Strategy ■ Not follow
  • 29. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity ■ Skip till any ■ Not follow ■ Not next Consuming Strategy
  • 30. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Skip till next ■ Strict continuity ■ Skip till any Consuming Strategy ■ Not follow ■ Not next
  • 31. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Consuming Strategy ■ Skip till next ■ Strict continuity ■ Skip till any ■ Not follow ■ Not next
  • 32. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Looping Example How many offer changes before accepting? ... ?
  • 33. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Pattern Specification Pattern .begin("start") .subtype(Event.class) .where(...) .or(...) .times(3) .followedBy("next") .subtype(Event.class) .where(...) .where(...) .oneOrMore().optional() .within(Time.seconds(3)) Quantifier application Basic building blocks Condition specification Time restrictions
  • 34. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Quantifiers ■ Singleton pattern ■ Complex pattern ● Times (count) ● Looping pattern
  • 35. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Quantifiers ■ Singleton pattern ■ Complex pattern ● Times (count) ● Looping pattern ■ Optional pattern ● singleton -> optional ● times -> no or exactly n times ● oneOrMore -> zeroOrMore
  • 36. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Complex Patterns - Consuming Strategies ? Pattern .begin("offer").subtype(Offer.class)
  • 37. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ? Pattern .begin("offer").subtype(Offer.class) .followedByAny("changes").subtype(OfferChanged.class) Complex Patterns - Consuming Strategies
  • 38. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ? Pattern .begin("offer").subtype(Offer.class) .followedByAny("changes").subtype(OfferChanged.class) .oneOrMore() .consecutive() Complex Patterns - Consuming Strategies
  • 39. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ? Pattern .begin("offer").subtype(Offer.class) .followedByAny("changes").subtype(OfferChanged.class) .oneOrMore() .consecutive() .followedBy(“accepted”).subtype(OfferAccepted.class) Complex Patterns - Consuming Strategies
  • 40. © Copyright. All rights reserved. Not to be reproduced without prior written consent. ■ Consuming strategy - before first element ■ Inner consuming strategy - between events matched in the Pattern Complex Patterns - Consuming Strategies
  • 41. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Iterative Condition Trigger alert when the same property changed. PL Flood PL
  • 42. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Iterative Condition public abstract class IterativeCondition<T> implements Function, Serializable { public abstract boolean filter(T value, Context<T> ctx) throws Exception; /** * @return An {@link Iterable} over the already accepted elements * for a given pattern. Elements are iterated in the order they were * inserted in the pattern. * * @param name The name of the pattern. */ public interface Context<T> extends Serializable { Iterable<T> getEventsForPattern(String name); } }
  • 43. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Iterative Condition Trigger alert when the same property changed. Pattern .begin("first change").subtype(OfferChanged.class) .followedBy("second change").subtype(OfferChanged.class) .where(new IterativeCondition<OfferChanged>() { @Override public boolean filter(OfferChanged value, Context<OfferChanged> ctx) { return ctx.getEventsForPattern("first change").iterator().next() .property().equals(value.property()); } }); PL Flood PL
  • 44. © Copyright. All rights reserved. Not to be reproduced without prior written consent.
  • 45. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Complex Example Alert when a user constantly decreases value of the property -12.000€ -14.000€ -24.000€ -100.000€
  • 46. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Complex Example - Implementation Alert when a user changed value by more than 200% of previous average change Pattern .begin("change").subtype(ValueChanged.class) .oneOrMore() .followedBy("alerting change").subtype(ValueChanged.class) .where(new IterativeCondition<OfferChanged>() { @Override public boolean filter(OfferChanged value, Context<OfferChanged> ctx) { double averageChange = countAverage(ctx.getEventsForPattern("change")); return value.change > 2 * averageChange; } });
  • 47. © Copyright. All rights reserved. Not to be reproduced without prior written consent. FlinkCEP & Asian Telco ■ +15 subscriber-oriented triggers to implement ● e.g. when a subscriber registers in a roaming and then spends X USD in a roaming
  • 48. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Summary ■ Shortest possible feedback loop ■ Seamless integration with Flink ecosystem ■ Complex patterns ● Dynamic length ● Conditions based on calculations
  • 49. © Copyright. All rights reserved. Not to be reproduced without prior written consent. How does it works underneath?
  • 50. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventStream Order handling 1 5 4 2 PatternOperator ElementsQueue 1 2 4 5 NFA
  • 51. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventStream Order handling 1 5 4 82 W=5 PatternOperator ElementsQueue 1 2 4 5 W=5 NFA
  • 52. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventStream Order handling 1 5 4 82 W=5 PatternOperator ElementsQueue 1 2 4 5 W=5 NFA MatchesStream A B
  • 53. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventStream Order handling - late elements 1 5 4 8 32 W=5 PatternOperator ElementsQueue 1 2 4 5 W=5 NFA MatchesStream A B
  • 54. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventStream Order handling - late elements 1 5 4 8 32 W=5 PatternOperator ElementsQueue 1 2 4 5 W=5 NFA MatchesStream A B
  • 55. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Nondeterministic Finite Automaton ■ Graph where: ● Vertices = States ● Edges = Transitions ■ IGNORE - event not consumed ■ TAKE - event consumed ■ PROCEED - event analyzed in the target state
  • 56. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Example of NFA Pattern .begin(“A”) .followedByAny(“B”).optional() .next(“C”) .followedBy(“D”)
  • 57. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE Pattern .begin(“A”) .followedByAny(“B”).optional() .next(“C”) .followedBy(“D”)
  • 58. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE
  • 59. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE A
  • 60. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A A B? A
  • 61. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream A B Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE
  • 62. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream A B Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE
  • 63. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE A B
  • 64. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A A B? A B A C B?
  • 65. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE A B C
  • 66. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A B? C D TAKE TAKE TAKE PROCEED IGNORE IGNORE IGNORE TAKE A B C
  • 67. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A A B? A B A C B? D B? D A C
  • 68. © Copyright. All rights reserved. Not to be reproduced without prior written consent. EventsStream Example of NFA A A B? A B A C B? D B? D A C D Match: A, C, D B? Match: A, B, C, D A
  • 69. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 70. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 71. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 72. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 73. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 74. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 75. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 76. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 77. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 78. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 79. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 80. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 81. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 82. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Shared Buffer - how it works MiddleStart End S1 S2 M1 M2 M3 E1 E2 1 2 1.0 1.0.0 1.0.0.0 2.0 1.0.0.0.0 1.0.0.0.1 2.0.0 Events order S1 M1 M2 S2 M3 E1 E2
  • 83. © Copyright. All rights reserved. Not to be reproduced without prior written consent. Summary ■ Shortest possible feedback loop ■ Seamless integration with Flink ecosystem ■ Complex patterns ● Dynamic length ● Conditions based on calculations