SlideShare a Scribd company logo
1 of 60
Download to read offline
Flinkspector
Taming the Squirrel
Alexander Kolb
otto group BI
@lofifnc
Alexander Kolb

Otto Group BI
@lofifnc
Alexander Kolb - 2016 - otto group
Agenda
• Introduction
• Testing Apache Flink Applications
• Flinkspector
• Concept
• Input
• Expectations
• Execution
• Conclusion
• Outlook
Alexander Kolb - 2016 - otto group
Introduction
Alexander Kolb - 2016 - otto group
• Multichannel Retail
• Financial Services
• Services
• 30 countries
• 123 companies
Alexander Kolb - 2016 - otto group
Problem
• Transparency
• Traceability
• Reproducibility
Alexander Kolb - 2016 - otto group
Solutions
• Visualisation
• Datalineage graph / Message tracing
• Unit Testing
Alexander Kolb - 2016 - otto group
Testing Apache Flink
Applications
Alexander Kolb - 2016 - otto group
Apache Flink Application
final StreamExecutionEnvironment env =
StreamExecutionEnvironment.getExecutionEnvironment();



DataStream<String> text = env.socketTextStream("localhost", 9999);





DataStream<Tuple2<String, Integer>> words =
text.flatMap(new WordCount.LineSplitter());





DataStream<Tuple2<String, Integer>> aWords =
words.filter(new StartsWithAFilter());





DataStream<Tuple2<String, Integer>> counts =
aWords.keyBy(0).timeWindow(Time.of(2, TimeUnit.MINUTES)).sum(1);



counts.print();



env.execute("Wordcount Example");
Alexander Kolb - 2016 - otto group
User Defined Functions
public final class StartsWithAFilter

implements FilterFunction<Tuple2<String,Integer>> {


@Override

public boolean filter(Tuple2<String, Integer> t)
throws Exception {

return t.f0.startsWith("a");

}

}
Alexander Kolb - 2016 - otto group
User Defined Functions


@Test

public void testAFilter() throws Exception {

StartsWithAFilter filter = new StartsWithAFilter();



Assert.assertEquals(true,
filter.filter(Tuple2.of("aTest",1)));

Assert.assertEquals(false,
filter.filter(Tuple2.of("bTest",1)));

}
Alexander Kolb - 2016 - otto group
Stream Transformations
public static DataStream<Tuple2<String,Integer>>

countAWords(DataStream<Tuple2<String,Integer>> aWords) {

return aWords

.keyBy(0)

.timeWindow(Time.of(2, TimeUnit.MINUTES))

.sum(1);

}
Alexander Kolb - 2016 - otto group
Stream Transformations
@Test

public void aWordCountTest() {

StreamExecutionEnvironment env =
StreamExecutionEnvironment.createLocalEnvironment();

env.setParallelism(1);



DataStream<Tuple2<String, Integer>> words =
env.fromCollection(Arrays.asList(

Tuple2.of("a1", 1),

Tuple2.of("a2", 1),

Tuple2.of("a1", 1)

));



DataStream<Tuple2<String, Integer>> results =
SocketTextStreamWordCount.countAWords(words);



Iterator<Tuple2<String, Integer>> output =
DataStreamUtils.collect(results);





Assert.assertEquals(output.next(), Tuple2.of("a1", 1));

Assert.assertEquals(output.next(), Tuple2.of("a2", 2));

Assert.assertEquals(output.hasNext(), false);

}
Alexander Kolb - 2016 - otto group
Flinkspector
Alexander Kolb - 2016 - otto group
Concept
1. Specify input.
2. Aquire data stream from the input specification.
3. Define expectations for the resulting data stream.
4. Apply the expectations to the produced data stream.
Alexander Kolb - 2016 - otto group
TestStreamEnvironment
Runtime
Subscriber
Test Source Input
Filter
KeyedWindowReducer
Concept
Verifier
Test Sink Publisher
Trigger
(default)
paired
Alexander Kolb - 2016 - otto group
Expectations
Alexander Kolb - 2016 - otto group
Input
EventTimeInput<Tuple2<String,Integer>> input =

EventTimeInputBuilder.startWith(Tuple2.of("a1", 1))

.emit(Tuple2.of("a2", 1), after(1, minutes))

.emit(Tuple2.of("a3", 1), before(1, seconds), times(2))
.emit(Tuple3.of(“a4”, 1), intoWindow(4, seconds))

.repeatAll(after(1, minutes), times(3));
Alexander Kolb - 2016 - otto group
List Based
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




(4,1,2,3,3,5)
(4,1,2,3,3,5)
(4,1,2,3,3,5)
Alexander Kolb - 2016 - otto group
List Based
(4,1,2,3,3,5)
(4,1,2,3,3,5)
(4,1,2,3,3,5)
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




Alexander Kolb - 2016 - otto group
List Based
(4,1,2,3,3,5)
(4,1,2,3,3,5)
(4,1,2,3,3,5)
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




Alexander Kolb - 2016 - otto group
List Based
(4,1,2,3,3,5)
(4,1,2,3,3)
(4,1,2,3,3,5)
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




Alexander Kolb - 2016 - otto group
List Based
(4,1,2,3,3,5)
(4,1,2,3,3)
(4,1,2,3,3,5)
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




Alexander Kolb - 2016 - otto group
List Based
(4,1,2,3,3,5)
(4,1,2,3,3)
(4,1,2,3,5)
ExpectedRecords.create(asList(1,2,3,4));




ExpectedRecords.create(asList(1,2,3,4))

.refine().only();




ExpectedRecords.create(asList(1,2,3,4))

.refine().sameFrequency();




Alexander Kolb - 2016 - otto group
List Based
ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(notStrict).all();




ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(strict).from(1);
List(4,1,2,3,3,5)
List(5,2,3,4,1)
Alexander Kolb - 2016 - otto group
List Based
List(4,1,2,3,3,5)
List(5,2,3,4,1)
ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(notStrict).all();




ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(1,2,3,3,5,4)
List(5,2,3,4,1)
ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(notStrict).all();




ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(1,2,3,3,5,4)
List(5,2,3,4,1)
ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(notStrict).all();




ExpectedRecords.create(asList(1,2,3,4))

.refine().inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(1,2,3,4,1)
MatcherBuilder
only
sameFrequency
order




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
List(1,2,3,4,1)
MatcherBuilder
only
sameFrequency
order
Alexander Kolb - 2016 - otto group
List Based
List(1,2,3,4,1)
MatcherBuilder
only
sameFrequency
order




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(1,2,3,4,1)
MatcherBuilder
only
sameFrequency
order




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(2,3,4,1)
MatcherBuilder
only
sameFrequency
order




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
List Based
List(2,3,4,1)
MatcherBuilder
only
sameFrequency
order




ExpectedRecords.create(asList(1,2,3,4))

.refine()
.only()
.sameFrequency()
.inOrder(strict).from(1);
Alexander Kolb - 2016 - otto group
Assertion Based
new MatchTuples<Tuple2<String,Integer>>("word","count")

.assertThat("word", startsWith("a"))

.assertThat("count", greaterThan(3))

.onEachRecord();
Alexander Kolb - 2016 - otto group
Assertion Based
new MatchTuples<Tuple2<String,Integer>>("word","count")

.assertThat("word", startsWith("a"))

.assertThat("count", greaterThan(3))

.oneOfThem()

.onEachRecord();
Alexander Kolb - 2016 - otto group
Assertion Based
.assertThat(A,…)
.assertThat(B,…)
.assertThat(C,…)
.eachOfThem()
.onAnyRecord()
A B C
Alexander Kolb - 2016 - otto group
Assertion Based
A B C
.assertThat(A,…)
.assertThat(B,…)
.assertThat(C,…)
.eachOfThem()
.onAnyRecord()
Alexander Kolb - 2016 - otto group
Assertion Based
.assertThat(A,…)
.assertThat(B,…)
.eachOfThem()
.onAnyRecord()
A B C
Alexander Kolb - 2016 - otto group
Assertion Based
.assertThat(A,…)
.assertThat(B,…)
.assertThat(C,…)
.eachOfThem()
.onAnyRecord()
A B C
Alexander Kolb - 2016 - otto group
Assertion Based
.assertThat(A,…)
.assertThat(A,…)
.assertThat(A,…)
.atLeastNOfThem(2)
.onEach()
A B C
Alexander Kolb - 2016 - otto group
Assertion Based
.assertThat(A,…)
.assertThat(B,…)
.assertThat(C,…)
.atExactlyNOfThem(2)
.onEach()
A B C
Alexander Kolb - 2016 - otto group
Assertion Based
public class Each<T> extends UntilCombineMatcher<T> {



public Each(Iterable<Matcher<? super T>> matchers) {

super(matchers);

}



@Override

public String prefix() {

return "each of";

}



@Override

public boolean validWhen(int matches, int possibleMatches) {

return matches == possibleMatches;

}



@Factory

public static <T> Each<T> each(Iterable<Matcher<? super T>> matchers) {

return new Each<T>(matchers);

}

}
Alexander Kolb - 2016 - otto group
TestStreamEnvironment
Runtime
Subscriber
Test Source Input
Filter
KeyedWindowReducer
Execution
Verifier
Test Sink Publisher
Trigger
(default)
paired
Alexander Kolb - 2016 - otto group
Execution
Test SourceInput
Filter
KeyedWindowReducer
Test Sink Publisher
Test Source Input
Filter
KeyedWindowReducer
Test Sink Publisher
1
1
1
1
2
2
2
2
LocalCluster
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
Alexander Kolb - 2016 - otto group
Execution
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
Timeout
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
Timeout
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
Timeout
Alexander Kolb - 2016 - otto group
LocalCluster
TSI1
F
KWR
TSiP1
1
1
TSI2
2
F
2
KWR
1
1
2
TSiP2
2
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
Timeout
CLOSE 1
CLOSE 2
Alexander Kolb - 2016 - otto group
TSI1
F
KWR
TSiP1
1
1
TSI2
2
F
2
KWR
1
1
2
TSiP2
2
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
LocalCluster
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
TimeoutTimeout
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
TimeoutTimeout
Alexander Kolb - 2016 - otto group
Execution
TestStreamEnvironment
Runtime
Subscriber
Verifier Trigger
(default)
LocalCluster
TS I1
F
KWR
TSi P1
1
1
TS I2
2
F
2
KWR
1
1
2
TSi P2
2
TimeoutTimeout
Alexander Kolb - 2016 - otto group
Conclusion
Alexander Kolb - 2016 - otto group
Conclusion
• Small and concise test cases.
• Extensible dedicated runtime.
• Integration into existing test
platforms.

• ProcessingTimeWindows.
• Input specification too
expansive.

Alexander Kolb - 2016 - otto group
Outlook
Alexander Kolb - 2016 - otto group
Outlook
• Scala (Test) support.
• Symbolic testing integration.
• System tests on the actual cluster.
Alexander Kolb - 2016 - otto group
https://github.com/ottogroup/flink-spector
Alexander Kolb - 2016 - otto group
ottogroup.com
WE ARE
HIRING!

More Related Content

What's hot

The need for speed uk fest
The need for speed uk festThe need for speed uk fest
The need for speed uk festdawoe
 
Hypermedia-driven Web Services with Spring Data REST
Hypermedia-driven Web Services with Spring Data RESTHypermedia-driven Web Services with Spring Data REST
Hypermedia-driven Web Services with Spring Data RESTSofiia Vynnytska
 
Educational slides by venay magen
Educational slides by venay magenEducational slides by venay magen
Educational slides by venay magenvenaymagen19
 
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_nightトークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_nightKenji Tanaka
 
Correctness and Performance of Apache Spark SQL
Correctness and Performance of Apache Spark SQLCorrectness and Performance of Apache Spark SQL
Correctness and Performance of Apache Spark SQLNicolas Poggi
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksErik Hatcher
 
Python: the coolest is yet to come
Python: the coolest is yet to comePython: the coolest is yet to come
Python: the coolest is yet to comePablo Enfedaque
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr DevelopersErik Hatcher
 
Data Processing with Cascading Java API on Apache Hadoop
Data Processing with Cascading Java API on Apache HadoopData Processing with Cascading Java API on Apache Hadoop
Data Processing with Cascading Java API on Apache HadoopHikmat Dhamee
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conferenceErik Hatcher
 
Apache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystemApache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystemDuyhai Doan
 
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...Red Hat Developers
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Lucidworks
 
Administering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud ClustersAdministering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud Clusterslucenerevolution
 
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...Lucidworks
 
Artem Storozhuk "Building SQL firewall: insights from developers"
Artem Storozhuk "Building SQL firewall: insights from developers"Artem Storozhuk "Building SQL firewall: insights from developers"
Artem Storozhuk "Building SQL firewall: insights from developers"Fwdays
 

What's hot (20)

The need for speed uk fest
The need for speed uk festThe need for speed uk fest
The need for speed uk fest
 
Hypermedia-driven Web Services with Spring Data REST
Hypermedia-driven Web Services with Spring Data RESTHypermedia-driven Web Services with Spring Data REST
Hypermedia-driven Web Services with Spring Data REST
 
Educational slides by venay magen
Educational slides by venay magenEducational slides by venay magen
Educational slides by venay magen
 
Load Data Fast!
Load Data Fast!Load Data Fast!
Load Data Fast!
 
#ajn3.lt.marblejenka
#ajn3.lt.marblejenka#ajn3.lt.marblejenka
#ajn3.lt.marblejenka
 
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_nightトークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
トークンリフレッシュ処理を含むAPIClientのテスト #hakata_test_night
 
Correctness and Performance of Apache Spark SQL
Correctness and Performance of Apache Spark SQLCorrectness and Performance of Apache Spark SQL
Correctness and Performance of Apache Spark SQL
 
Solr Indexing and Analysis Tricks
Solr Indexing and Analysis TricksSolr Indexing and Analysis Tricks
Solr Indexing and Analysis Tricks
 
Recursive Query Throwdown
Recursive Query ThrowdownRecursive Query Throwdown
Recursive Query Throwdown
 
Python: the coolest is yet to come
Python: the coolest is yet to comePython: the coolest is yet to come
Python: the coolest is yet to come
 
Lucene for Solr Developers
Lucene for Solr DevelopersLucene for Solr Developers
Lucene for Solr Developers
 
Data Processing with Cascading Java API on Apache Hadoop
Data Processing with Cascading Java API on Apache HadoopData Processing with Cascading Java API on Apache Hadoop
Data Processing with Cascading Java API on Apache Hadoop
 
Solr Black Belt Pre-conference
Solr Black Belt Pre-conferenceSolr Black Belt Pre-conference
Solr Black Belt Pre-conference
 
Apache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystemApache zeppelin, the missing component for the big data ecosystem
Apache zeppelin, the missing component for the big data ecosystem
 
Introduction to solr
Introduction to solrIntroduction to solr
Introduction to solr
 
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...
Jupyter Notebooks for machine learning on Kubernetes & OpenShift | DevNation ...
 
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
Solr Troubleshooting - Treemap Approach: Presented by Alexandre Rafolovitch, ...
 
Administering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud ClustersAdministering and Monitoring SolrCloud Clusters
Administering and Monitoring SolrCloud Clusters
 
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
Faceting Optimizations for Solr: Presented by Toke Eskildsen, State & Univers...
 
Artem Storozhuk "Building SQL firewall: insights from developers"
Artem Storozhuk "Building SQL firewall: insights from developers"Artem Storozhuk "Building SQL firewall: insights from developers"
Artem Storozhuk "Building SQL firewall: insights from developers"
 

Viewers also liked

Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in Flink
Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in FlinkMaxim Fateev - Beyond the Watermark- On-Demand Backfilling in Flink
Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in FlinkFlink Forward
 
Trevor Grant - Apache Zeppelin - A friendlier way to Flink
Trevor Grant - Apache Zeppelin - A friendlier way to FlinkTrevor Grant - Apache Zeppelin - A friendlier way to Flink
Trevor Grant - Apache Zeppelin - A friendlier way to FlinkFlink Forward
 
Ted Dunning-Faster and Furiouser- Flink Drift
Ted Dunning-Faster and Furiouser- Flink DriftTed Dunning-Faster and Furiouser- Flink Drift
Ted Dunning-Faster and Furiouser- Flink DriftFlink Forward
 
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...Flink Forward
 
Julian Hyde - Streaming SQL
Julian Hyde - Streaming SQLJulian Hyde - Streaming SQL
Julian Hyde - Streaming SQLFlink Forward
 
Ted Dunning - Keynote: How Can We Take Flink Forward?
Ted Dunning -  Keynote: How Can We Take Flink Forward?Ted Dunning -  Keynote: How Can We Take Flink Forward?
Ted Dunning - Keynote: How Can We Take Flink Forward?Flink Forward
 
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkSanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkFlink Forward
 
Eron Wright - Flink Security Enhancements
Eron Wright - Flink Security EnhancementsEron Wright - Flink Security Enhancements
Eron Wright - Flink Security EnhancementsFlink Forward
 
Zoltán Zvara - Advanced visualization of Flink and Spark jobs

Zoltán Zvara - Advanced visualization of Flink and Spark jobs
Zoltán Zvara - Advanced visualization of Flink and Spark jobs

Zoltán Zvara - Advanced visualization of Flink and Spark jobs
Flink Forward
 
Aljoscha Krettek - The Future of Apache Flink
Aljoscha Krettek - The Future of Apache FlinkAljoscha Krettek - The Future of Apache Flink
Aljoscha Krettek - The Future of Apache FlinkFlink Forward
 
Jamie Grier - Robust Stream Processing with Apache Flink
Jamie Grier - Robust Stream Processing with Apache FlinkJamie Grier - Robust Stream Processing with Apache Flink
Jamie Grier - Robust Stream Processing with Apache FlinkFlink Forward
 
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...Flink Forward
 
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache BeamMalo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache BeamFlink Forward
 
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...Flink Forward
 
Stephan Ewen - Running Flink Everywhere
Stephan Ewen - Running Flink EverywhereStephan Ewen - Running Flink Everywhere
Stephan Ewen - Running Flink EverywhereFlink Forward
 
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...Flink Forward
 
Márton Balassi Streaming ML with Flink-
Márton Balassi Streaming ML with Flink- Márton Balassi Streaming ML with Flink-
Márton Balassi Streaming ML with Flink- Flink Forward
 
Stephan Ewen - Scaling to large State
Stephan Ewen - Scaling to large StateStephan Ewen - Scaling to large State
Stephan Ewen - Scaling to large StateFlink Forward
 
Flink Case Study: Amadeus
Flink Case Study: AmadeusFlink Case Study: Amadeus
Flink Case Study: AmadeusFlink Forward
 
Thomas Lamirault_Mohamed Amine Abdessemed -A brief history of time with Apac...
Thomas Lamirault_Mohamed Amine Abdessemed  -A brief history of time with Apac...Thomas Lamirault_Mohamed Amine Abdessemed  -A brief history of time with Apac...
Thomas Lamirault_Mohamed Amine Abdessemed -A brief history of time with Apac...Flink Forward
 

Viewers also liked (20)

Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in Flink
Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in FlinkMaxim Fateev - Beyond the Watermark- On-Demand Backfilling in Flink
Maxim Fateev - Beyond the Watermark- On-Demand Backfilling in Flink
 
Trevor Grant - Apache Zeppelin - A friendlier way to Flink
Trevor Grant - Apache Zeppelin - A friendlier way to FlinkTrevor Grant - Apache Zeppelin - A friendlier way to Flink
Trevor Grant - Apache Zeppelin - A friendlier way to Flink
 
Ted Dunning-Faster and Furiouser- Flink Drift
Ted Dunning-Faster and Furiouser- Flink DriftTed Dunning-Faster and Furiouser- Flink Drift
Ted Dunning-Faster and Furiouser- Flink Drift
 
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...
Ana M Martinez - AMIDST Toolbox- Scalable probabilistic machine learning with...
 
Julian Hyde - Streaming SQL
Julian Hyde - Streaming SQLJulian Hyde - Streaming SQL
Julian Hyde - Streaming SQL
 
Ted Dunning - Keynote: How Can We Take Flink Forward?
Ted Dunning -  Keynote: How Can We Take Flink Forward?Ted Dunning -  Keynote: How Can We Take Flink Forward?
Ted Dunning - Keynote: How Can We Take Flink Forward?
 
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with FlinkSanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
Sanjar Akhmedov - Joining Infinity – Windowless Stream Processing with Flink
 
Eron Wright - Flink Security Enhancements
Eron Wright - Flink Security EnhancementsEron Wright - Flink Security Enhancements
Eron Wright - Flink Security Enhancements
 
Zoltán Zvara - Advanced visualization of Flink and Spark jobs

Zoltán Zvara - Advanced visualization of Flink and Spark jobs
Zoltán Zvara - Advanced visualization of Flink and Spark jobs

Zoltán Zvara - Advanced visualization of Flink and Spark jobs

 
Aljoscha Krettek - The Future of Apache Flink
Aljoscha Krettek - The Future of Apache FlinkAljoscha Krettek - The Future of Apache Flink
Aljoscha Krettek - The Future of Apache Flink
 
Jamie Grier - Robust Stream Processing with Apache Flink
Jamie Grier - Robust Stream Processing with Apache FlinkJamie Grier - Robust Stream Processing with Apache Flink
Jamie Grier - Robust Stream Processing with Apache Flink
 
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...
Kostas Tzoumas_Stephan Ewen - Keynote -The maturing data streaming ecosystem ...
 
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache BeamMalo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
Malo Denielou - No shard left behind: Dynamic work rebalancing in Apache Beam
 
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...
Fabian Hueske_Till Rohrmann - Declarative stream processing with StreamSQL an...
 
Stephan Ewen - Running Flink Everywhere
Stephan Ewen - Running Flink EverywhereStephan Ewen - Running Flink Everywhere
Stephan Ewen - Running Flink Everywhere
 
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...
Robert Metzger - Connecting Apache Flink to the World - Reviewing the streami...
 
Márton Balassi Streaming ML with Flink-
Márton Balassi Streaming ML with Flink- Márton Balassi Streaming ML with Flink-
Márton Balassi Streaming ML with Flink-
 
Stephan Ewen - Scaling to large State
Stephan Ewen - Scaling to large StateStephan Ewen - Scaling to large State
Stephan Ewen - Scaling to large State
 
Flink Case Study: Amadeus
Flink Case Study: AmadeusFlink Case Study: Amadeus
Flink Case Study: Amadeus
 
Thomas Lamirault_Mohamed Amine Abdessemed -A brief history of time with Apac...
Thomas Lamirault_Mohamed Amine Abdessemed  -A brief history of time with Apac...Thomas Lamirault_Mohamed Amine Abdessemed  -A brief history of time with Apac...
Thomas Lamirault_Mohamed Amine Abdessemed -A brief history of time with Apac...
 

Similar to Taming the Squirrel with Flinkspector

A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLDatabricks
 
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...Databricks
 
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | Prometheus
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | PrometheusCreating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | Prometheus
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | PrometheusInfluxData
 
Shooting the Rapids: Getting the Best from Java 8 Streams
Shooting the Rapids: Getting the Best from Java 8 StreamsShooting the Rapids: Getting the Best from Java 8 Streams
Shooting the Rapids: Getting the Best from Java 8 StreamsMaurice Naftalin
 
Testing batch and streaming Spark applications
Testing batch and streaming Spark applicationsTesting batch and streaming Spark applications
Testing batch and streaming Spark applicationsŁukasz Gawron
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark ApplicationsFuture Processing
 
ShmooCon 2009 - (Re)Playing(Blind)Sql
ShmooCon 2009 - (Re)Playing(Blind)SqlShmooCon 2009 - (Re)Playing(Blind)Sql
ShmooCon 2009 - (Re)Playing(Blind)SqlChema Alonso
 
Productizing Structured Streaming Jobs
Productizing Structured Streaming JobsProductizing Structured Streaming Jobs
Productizing Structured Streaming JobsDatabricks
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomyDongmin Yu
 
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...Spark Summit
 
Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Petr Zapletal
 
Declarative benchmarking of cassandra and it's data models
Declarative benchmarking of cassandra and it's data modelsDeclarative benchmarking of cassandra and it's data models
Declarative benchmarking of cassandra and it's data modelsMonal Daxini
 
The Wonderful World of Apache Kafka
The Wonderful World of Apache KafkaThe Wonderful World of Apache Kafka
The Wonderful World of Apache KafkaHostedbyConfluent
 
Distributed Real-Time Stream Processing: Why and How 2.0
Distributed Real-Time Stream Processing:  Why and How 2.0Distributed Real-Time Stream Processing:  Why and How 2.0
Distributed Real-Time Stream Processing: Why and How 2.0Petr Zapletal
 
Reducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisReducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisSebastiano Panichella
 
Analyse your SEO Data with R and Kibana
Analyse your SEO Data with R and KibanaAnalyse your SEO Data with R and Kibana
Analyse your SEO Data with R and KibanaVincent Terrasi
 
Introduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalIntroduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalM Malai
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerMydbops
 

Similar to Taming the Squirrel with Flinkspector (20)

A Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQLA Deep Dive into Query Execution Engine of Spark SQL
A Deep Dive into Query Execution Engine of Spark SQL
 
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
Correctness and Performance of Apache Spark SQL with Bogdan Ghit and Nicolas ...
 
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | Prometheus
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | PrometheusCreating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | Prometheus
Creating the PromQL Transpiler for Flux by Julius Volz, Co-Founder | Prometheus
 
Shooting the Rapids: Getting the Best from Java 8 Streams
Shooting the Rapids: Getting the Best from Java 8 StreamsShooting the Rapids: Getting the Best from Java 8 Streams
Shooting the Rapids: Getting the Best from Java 8 Streams
 
Testing batch and streaming Spark applications
Testing batch and streaming Spark applicationsTesting batch and streaming Spark applications
Testing batch and streaming Spark applications
 
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
[QE 2018] Łukasz Gawron – Testing Batch and Streaming Spark Applications
 
Solr @ Etsy - Apache Lucene Eurocon
Solr @ Etsy - Apache Lucene EuroconSolr @ Etsy - Apache Lucene Eurocon
Solr @ Etsy - Apache Lucene Eurocon
 
ShmooCon 2009 - (Re)Playing(Blind)Sql
ShmooCon 2009 - (Re)Playing(Blind)SqlShmooCon 2009 - (Re)Playing(Blind)Sql
ShmooCon 2009 - (Re)Playing(Blind)Sql
 
Productizing Structured Streaming Jobs
Productizing Structured Streaming JobsProductizing Structured Streaming Jobs
Productizing Structured Streaming Jobs
 
Presto anatomy
Presto anatomyPresto anatomy
Presto anatomy
 
Java Language fundamental
Java Language fundamentalJava Language fundamental
Java Language fundamental
 
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...
Distributed Real-Time Stream Processing: Why and How: Spark Summit East talk ...
 
Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017Distributed Stream Processing - Spark Summit East 2017
Distributed Stream Processing - Spark Summit East 2017
 
Declarative benchmarking of cassandra and it's data models
Declarative benchmarking of cassandra and it's data modelsDeclarative benchmarking of cassandra and it's data models
Declarative benchmarking of cassandra and it's data models
 
The Wonderful World of Apache Kafka
The Wonderful World of Apache KafkaThe Wonderful World of Apache Kafka
The Wonderful World of Apache Kafka
 
Distributed Real-Time Stream Processing: Why and How 2.0
Distributed Real-Time Stream Processing:  Why and How 2.0Distributed Real-Time Stream Processing:  Why and How 2.0
Distributed Real-Time Stream Processing: Why and How 2.0
 
Reducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code AnalysisReducing Redundancies in Multi-Revision Code Analysis
Reducing Redundancies in Multi-Revision Code Analysis
 
Analyse your SEO Data with R and Kibana
Analyse your SEO Data with R and KibanaAnalyse your SEO Data with R and Kibana
Analyse your SEO Data with R and Kibana
 
Introduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-finalIntroduction to-mongo db-execution-plan-optimizer-final
Introduction to-mongo db-execution-plan-optimizer-final
 
Introduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizerIntroduction to Mongodb execution plan and optimizer
Introduction to Mongodb execution plan and optimizer
 

More from Flink Forward

Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Building a fully managed stream processing platform on Flink at scale for Lin...
Building a fully managed stream processing platform on Flink at scale for Lin...Flink Forward
 
Evening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkEvening out the uneven: dealing with skew in Flink
Evening out the uneven: dealing with skew in FlinkFlink Forward
 
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...
“Alexa, be quiet!”: End-to-end near-real time model building and evaluation i...Flink Forward
 
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...
Introducing BinarySortedMultiMap - A new Flink state primitive to boost your ...Flink Forward
 
Introducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorIntroducing the Apache Flink Kubernetes Operator
Introducing the Apache Flink Kubernetes OperatorFlink Forward
 
Autoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeAutoscaling Flink with Reactive Mode
Autoscaling Flink with Reactive ModeFlink Forward
 
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...
Dynamically Scaling Data Streams across Multiple Kafka Clusters with Zero Fli...Flink Forward
 
One sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async SinkOne sink to rule them all: Introducing the new Async Sink
One sink to rule them all: Introducing the new Async SinkFlink Forward
 
Tuning Apache Kafka Connectors for Flink.pptx
Tuning Apache Kafka Connectors for Flink.pptxTuning Apache Kafka Connectors for Flink.pptx
Tuning Apache Kafka Connectors for Flink.pptxFlink Forward
 
Flink powered stream processing platform at Pinterest
Flink powered stream processing platform at PinterestFlink powered stream processing platform at Pinterest
Flink powered stream processing platform at PinterestFlink Forward
 
Apache Flink in the Cloud-Native Era
Apache Flink in the Cloud-Native EraApache Flink in the Cloud-Native Era
Apache Flink in the Cloud-Native EraFlink Forward
 
Where is my bottleneck? Performance troubleshooting in Flink
Where is my bottleneck? Performance troubleshooting in FlinkWhere is my bottleneck? Performance troubleshooting in Flink
Where is my bottleneck? Performance troubleshooting in FlinkFlink Forward
 
Using the New Apache Flink Kubernetes Operator in a Production Deployment
Using the New Apache Flink Kubernetes Operator in a Production DeploymentUsing the New Apache Flink Kubernetes Operator in a Production Deployment
Using the New Apache Flink Kubernetes Operator in a Production DeploymentFlink Forward
 
The Current State of Table API in 2022
The Current State of Table API in 2022The Current State of Table API in 2022
The Current State of Table API in 2022Flink Forward
 
Flink SQL on Pulsar made easy
Flink SQL on Pulsar made easyFlink SQL on Pulsar made easy
Flink SQL on Pulsar made easyFlink Forward
 
Dynamic Rule-based Real-time Market Data Alerts
Dynamic Rule-based Real-time Market Data AlertsDynamic Rule-based Real-time Market Data Alerts
Dynamic Rule-based Real-time Market Data AlertsFlink Forward
 
Exactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and PinotExactly-Once Financial Data Processing at Scale with Flink and Pinot
Exactly-Once Financial Data Processing at Scale with Flink and PinotFlink Forward
 
Processing Semantically-Ordered Streams in Financial Services
Processing Semantically-Ordered Streams in Financial ServicesProcessing Semantically-Ordered Streams in Financial Services
Processing Semantically-Ordered Streams in Financial ServicesFlink Forward
 
Tame the small files problem and optimize data layout for streaming ingestion...
Tame the small files problem and optimize data layout for streaming ingestion...Tame the small files problem and optimize data layout for streaming ingestion...
Tame the small files problem and optimize data layout for streaming ingestion...Flink Forward
 
Batch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & IcebergBatch Processing at Scale with Flink & Iceberg
Batch Processing at Scale with Flink & IcebergFlink Forward
 

More from Flink Forward (20)

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

Recently uploaded

Predictive Analysis for Loan Default Presentation : Data Analysis Project PPT
Predictive Analysis for Loan Default  Presentation : Data Analysis Project PPTPredictive Analysis for Loan Default  Presentation : Data Analysis Project PPT
Predictive Analysis for Loan Default Presentation : Data Analysis Project PPTBoston Institute of Analytics
 
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...limedy534
 
DBA Basics: Getting Started with Performance Tuning.pdf
DBA Basics: Getting Started with Performance Tuning.pdfDBA Basics: Getting Started with Performance Tuning.pdf
DBA Basics: Getting Started with Performance Tuning.pdfJohn Sterrett
 
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档208367051
 
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...ssuserf63bd7
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...Florian Roscheck
 
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理e4aez8ss
 
Easter Eggs From Star Wars and in cars 1 and 2
Easter Eggs From Star Wars and in cars 1 and 2Easter Eggs From Star Wars and in cars 1 and 2
Easter Eggs From Star Wars and in cars 1 and 217djon017
 
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDINTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDRafezzaman
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdfHuman37
 
Machine learning classification ppt.ppt
Machine learning classification  ppt.pptMachine learning classification  ppt.ppt
Machine learning classification ppt.pptamreenkhanum0307
 
Identifying Appropriate Test Statistics Involving Population Mean
Identifying Appropriate Test Statistics Involving Population MeanIdentifying Appropriate Test Statistics Involving Population Mean
Identifying Appropriate Test Statistics Involving Population MeanMYRABACSAFRA2
 
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Jack DiGiovanna
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一fhwihughh
 
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSINGmarianagonzalez07
 
RadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfRadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfgstagge
 
While-For-loop in python used in college
While-For-loop in python used in collegeWhile-For-loop in python used in college
While-For-loop in python used in collegessuser7a7cd61
 
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...Amil Baba Dawood bangali
 
Learn How Data Science Changes Our World
Learn How Data Science Changes Our WorldLearn How Data Science Changes Our World
Learn How Data Science Changes Our WorldEduminds Learning
 
RABBIT: A CLI tool for identifying bots based on their GitHub events.
RABBIT: A CLI tool for identifying bots based on their GitHub events.RABBIT: A CLI tool for identifying bots based on their GitHub events.
RABBIT: A CLI tool for identifying bots based on their GitHub events.natarajan8993
 

Recently uploaded (20)

Predictive Analysis for Loan Default Presentation : Data Analysis Project PPT
Predictive Analysis for Loan Default  Presentation : Data Analysis Project PPTPredictive Analysis for Loan Default  Presentation : Data Analysis Project PPT
Predictive Analysis for Loan Default Presentation : Data Analysis Project PPT
 
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
Effects of Smartphone Addiction on the Academic Performances of Grades 9 to 1...
 
DBA Basics: Getting Started with Performance Tuning.pdf
DBA Basics: Getting Started with Performance Tuning.pdfDBA Basics: Getting Started with Performance Tuning.pdf
DBA Basics: Getting Started with Performance Tuning.pdf
 
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档
原版1:1定制南十字星大学毕业证(SCU毕业证)#文凭成绩单#真实留信学历认证永久存档
 
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...
Statistics, Data Analysis, and Decision Modeling, 5th edition by James R. Eva...
 
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...From idea to production in a day – Leveraging Azure ML and Streamlit to build...
From idea to production in a day – Leveraging Azure ML and Streamlit to build...
 
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
科罗拉多大学波尔得分校毕业证学位证成绩单-可办理
 
Easter Eggs From Star Wars and in cars 1 and 2
Easter Eggs From Star Wars and in cars 1 and 2Easter Eggs From Star Wars and in cars 1 and 2
Easter Eggs From Star Wars and in cars 1 and 2
 
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTDINTERNSHIP ON PURBASHA COMPOSITE TEX LTD
INTERNSHIP ON PURBASHA COMPOSITE TEX LTD
 
20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf20240419 - Measurecamp Amsterdam - SAM.pdf
20240419 - Measurecamp Amsterdam - SAM.pdf
 
Machine learning classification ppt.ppt
Machine learning classification  ppt.pptMachine learning classification  ppt.ppt
Machine learning classification ppt.ppt
 
Identifying Appropriate Test Statistics Involving Population Mean
Identifying Appropriate Test Statistics Involving Population MeanIdentifying Appropriate Test Statistics Involving Population Mean
Identifying Appropriate Test Statistics Involving Population Mean
 
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
Building on a FAIRly Strong Foundation to Connect Academic Research to Transl...
 
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
办理学位证纽约大学毕业证(NYU毕业证书)原版一比一
 
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
2006_GasProcessing_HB (1).pdf HYDROCARBON PROCESSING
 
RadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdfRadioAdProWritingCinderellabyButleri.pdf
RadioAdProWritingCinderellabyButleri.pdf
 
While-For-loop in python used in college
While-For-loop in python used in collegeWhile-For-loop in python used in college
While-For-loop in python used in college
 
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...
NO1 Certified Black Magic Specialist Expert Amil baba in Lahore Islamabad Raw...
 
Learn How Data Science Changes Our World
Learn How Data Science Changes Our WorldLearn How Data Science Changes Our World
Learn How Data Science Changes Our World
 
RABBIT: A CLI tool for identifying bots based on their GitHub events.
RABBIT: A CLI tool for identifying bots based on their GitHub events.RABBIT: A CLI tool for identifying bots based on their GitHub events.
RABBIT: A CLI tool for identifying bots based on their GitHub events.
 

Taming the Squirrel with Flinkspector

  • 2. Alexander Kolb otto group BI @lofifnc Alexander Kolb
 Otto Group BI @lofifnc
  • 3. Alexander Kolb - 2016 - otto group Agenda • Introduction • Testing Apache Flink Applications • Flinkspector • Concept • Input • Expectations • Execution • Conclusion • Outlook
  • 4. Alexander Kolb - 2016 - otto group Introduction
  • 5. Alexander Kolb - 2016 - otto group • Multichannel Retail • Financial Services • Services • 30 countries • 123 companies
  • 6. Alexander Kolb - 2016 - otto group Problem • Transparency • Traceability • Reproducibility
  • 7. Alexander Kolb - 2016 - otto group Solutions • Visualisation • Datalineage graph / Message tracing • Unit Testing
  • 8. Alexander Kolb - 2016 - otto group Testing Apache Flink Applications
  • 9. Alexander Kolb - 2016 - otto group Apache Flink Application final StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
 
 DataStream<String> text = env.socketTextStream("localhost", 9999);
 
 
 DataStream<Tuple2<String, Integer>> words = text.flatMap(new WordCount.LineSplitter());
 
 
 DataStream<Tuple2<String, Integer>> aWords = words.filter(new StartsWithAFilter());
 
 
 DataStream<Tuple2<String, Integer>> counts = aWords.keyBy(0).timeWindow(Time.of(2, TimeUnit.MINUTES)).sum(1);
 
 counts.print();
 
 env.execute("Wordcount Example");
  • 10. Alexander Kolb - 2016 - otto group User Defined Functions public final class StartsWithAFilter
 implements FilterFunction<Tuple2<String,Integer>> { 
 @Override
 public boolean filter(Tuple2<String, Integer> t) throws Exception {
 return t.f0.startsWith("a");
 }
 }
  • 11. Alexander Kolb - 2016 - otto group User Defined Functions 
 @Test
 public void testAFilter() throws Exception {
 StartsWithAFilter filter = new StartsWithAFilter();
 
 Assert.assertEquals(true, filter.filter(Tuple2.of("aTest",1)));
 Assert.assertEquals(false, filter.filter(Tuple2.of("bTest",1)));
 }
  • 12. Alexander Kolb - 2016 - otto group Stream Transformations public static DataStream<Tuple2<String,Integer>>
 countAWords(DataStream<Tuple2<String,Integer>> aWords) {
 return aWords
 .keyBy(0)
 .timeWindow(Time.of(2, TimeUnit.MINUTES))
 .sum(1);
 }
  • 13. Alexander Kolb - 2016 - otto group Stream Transformations @Test
 public void aWordCountTest() {
 StreamExecutionEnvironment env = StreamExecutionEnvironment.createLocalEnvironment();
 env.setParallelism(1);
 
 DataStream<Tuple2<String, Integer>> words = env.fromCollection(Arrays.asList(
 Tuple2.of("a1", 1),
 Tuple2.of("a2", 1),
 Tuple2.of("a1", 1)
 ));
 
 DataStream<Tuple2<String, Integer>> results = SocketTextStreamWordCount.countAWords(words);
 
 Iterator<Tuple2<String, Integer>> output = DataStreamUtils.collect(results);
 
 
 Assert.assertEquals(output.next(), Tuple2.of("a1", 1));
 Assert.assertEquals(output.next(), Tuple2.of("a2", 2));
 Assert.assertEquals(output.hasNext(), false);
 }
  • 14. Alexander Kolb - 2016 - otto group Flinkspector
  • 15. Alexander Kolb - 2016 - otto group Concept 1. Specify input. 2. Aquire data stream from the input specification. 3. Define expectations for the resulting data stream. 4. Apply the expectations to the produced data stream.
  • 16. Alexander Kolb - 2016 - otto group TestStreamEnvironment Runtime Subscriber Test Source Input Filter KeyedWindowReducer Concept Verifier Test Sink Publisher Trigger (default) paired
  • 17. Alexander Kolb - 2016 - otto group Expectations
  • 18. Alexander Kolb - 2016 - otto group Input EventTimeInput<Tuple2<String,Integer>> input =
 EventTimeInputBuilder.startWith(Tuple2.of("a1", 1))
 .emit(Tuple2.of("a2", 1), after(1, minutes))
 .emit(Tuple2.of("a3", 1), before(1, seconds), times(2)) .emit(Tuple3.of(“a4”, 1), intoWindow(4, seconds))
 .repeatAll(after(1, minutes), times(3));
  • 19. Alexander Kolb - 2016 - otto group List Based ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 
 (4,1,2,3,3,5) (4,1,2,3,3,5) (4,1,2,3,3,5)
  • 20. Alexander Kolb - 2016 - otto group List Based (4,1,2,3,3,5) (4,1,2,3,3,5) (4,1,2,3,3,5) ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 

  • 21. Alexander Kolb - 2016 - otto group List Based (4,1,2,3,3,5) (4,1,2,3,3,5) (4,1,2,3,3,5) ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 

  • 22. Alexander Kolb - 2016 - otto group List Based (4,1,2,3,3,5) (4,1,2,3,3) (4,1,2,3,3,5) ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 

  • 23. Alexander Kolb - 2016 - otto group List Based (4,1,2,3,3,5) (4,1,2,3,3) (4,1,2,3,3,5) ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 

  • 24. Alexander Kolb - 2016 - otto group List Based (4,1,2,3,3,5) (4,1,2,3,3) (4,1,2,3,5) ExpectedRecords.create(asList(1,2,3,4)); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().only(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().sameFrequency(); 
 

  • 25. Alexander Kolb - 2016 - otto group List Based ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(notStrict).all(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(strict).from(1); List(4,1,2,3,3,5) List(5,2,3,4,1)
  • 26. Alexander Kolb - 2016 - otto group List Based List(4,1,2,3,3,5) List(5,2,3,4,1) ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(notStrict).all(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(strict).from(1);
  • 27. Alexander Kolb - 2016 - otto group List Based List(1,2,3,3,5,4) List(5,2,3,4,1) ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(notStrict).all(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(strict).from(1);
  • 28. Alexander Kolb - 2016 - otto group List Based List(1,2,3,3,5,4) List(5,2,3,4,1) ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(notStrict).all(); 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine().inOrder(strict).from(1);
  • 29. Alexander Kolb - 2016 - otto group List Based List(1,2,3,4,1) MatcherBuilder only sameFrequency order 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1);
  • 30. Alexander Kolb - 2016 - otto group List Based 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1); List(1,2,3,4,1) MatcherBuilder only sameFrequency order
  • 31. Alexander Kolb - 2016 - otto group List Based List(1,2,3,4,1) MatcherBuilder only sameFrequency order 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1);
  • 32. Alexander Kolb - 2016 - otto group List Based List(1,2,3,4,1) MatcherBuilder only sameFrequency order 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1);
  • 33. Alexander Kolb - 2016 - otto group List Based List(2,3,4,1) MatcherBuilder only sameFrequency order 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1);
  • 34. Alexander Kolb - 2016 - otto group List Based List(2,3,4,1) MatcherBuilder only sameFrequency order 
 
 ExpectedRecords.create(asList(1,2,3,4))
 .refine() .only() .sameFrequency() .inOrder(strict).from(1);
  • 35. Alexander Kolb - 2016 - otto group Assertion Based new MatchTuples<Tuple2<String,Integer>>("word","count")
 .assertThat("word", startsWith("a"))
 .assertThat("count", greaterThan(3))
 .onEachRecord();
  • 36. Alexander Kolb - 2016 - otto group Assertion Based new MatchTuples<Tuple2<String,Integer>>("word","count")
 .assertThat("word", startsWith("a"))
 .assertThat("count", greaterThan(3))
 .oneOfThem()
 .onEachRecord();
  • 37. Alexander Kolb - 2016 - otto group Assertion Based .assertThat(A,…) .assertThat(B,…) .assertThat(C,…) .eachOfThem() .onAnyRecord() A B C
  • 38. Alexander Kolb - 2016 - otto group Assertion Based A B C .assertThat(A,…) .assertThat(B,…) .assertThat(C,…) .eachOfThem() .onAnyRecord()
  • 39. Alexander Kolb - 2016 - otto group Assertion Based .assertThat(A,…) .assertThat(B,…) .eachOfThem() .onAnyRecord() A B C
  • 40. Alexander Kolb - 2016 - otto group Assertion Based .assertThat(A,…) .assertThat(B,…) .assertThat(C,…) .eachOfThem() .onAnyRecord() A B C
  • 41. Alexander Kolb - 2016 - otto group Assertion Based .assertThat(A,…) .assertThat(A,…) .assertThat(A,…) .atLeastNOfThem(2) .onEach() A B C
  • 42. Alexander Kolb - 2016 - otto group Assertion Based .assertThat(A,…) .assertThat(B,…) .assertThat(C,…) .atExactlyNOfThem(2) .onEach() A B C
  • 43. Alexander Kolb - 2016 - otto group Assertion Based public class Each<T> extends UntilCombineMatcher<T> {
 
 public Each(Iterable<Matcher<? super T>> matchers) {
 super(matchers);
 }
 
 @Override
 public String prefix() {
 return "each of";
 }
 
 @Override
 public boolean validWhen(int matches, int possibleMatches) {
 return matches == possibleMatches;
 }
 
 @Factory
 public static <T> Each<T> each(Iterable<Matcher<? super T>> matchers) {
 return new Each<T>(matchers);
 }
 }
  • 44. Alexander Kolb - 2016 - otto group TestStreamEnvironment Runtime Subscriber Test Source Input Filter KeyedWindowReducer Execution Verifier Test Sink Publisher Trigger (default) paired
  • 45. Alexander Kolb - 2016 - otto group Execution Test SourceInput Filter KeyedWindowReducer Test Sink Publisher Test Source Input Filter KeyedWindowReducer Test Sink Publisher 1 1 1 1 2 2 2 2 LocalCluster TestStreamEnvironment Runtime Subscriber Verifier Trigger (default)
  • 46. Alexander Kolb - 2016 - otto group Execution LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) Timeout
  • 47. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 Timeout
  • 48. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 Timeout
  • 49. Alexander Kolb - 2016 - otto group LocalCluster TSI1 F KWR TSiP1 1 1 TSI2 2 F 2 KWR 1 1 2 TSiP2 2 Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) Timeout CLOSE 1 CLOSE 2
  • 50. Alexander Kolb - 2016 - otto group TSI1 F KWR TSiP1 1 1 TSI2 2 F 2 KWR 1 1 2 TSiP2 2 Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) LocalCluster
  • 51. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 TimeoutTimeout
  • 52. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2
  • 53. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 TimeoutTimeout
  • 54. Alexander Kolb - 2016 - otto group Execution TestStreamEnvironment Runtime Subscriber Verifier Trigger (default) LocalCluster TS I1 F KWR TSi P1 1 1 TS I2 2 F 2 KWR 1 1 2 TSi P2 2 TimeoutTimeout
  • 55. Alexander Kolb - 2016 - otto group Conclusion
  • 56. Alexander Kolb - 2016 - otto group Conclusion • Small and concise test cases. • Extensible dedicated runtime. • Integration into existing test platforms.
 • ProcessingTimeWindows. • Input specification too expansive.

  • 57. Alexander Kolb - 2016 - otto group Outlook
  • 58. Alexander Kolb - 2016 - otto group Outlook • Scala (Test) support. • Symbolic testing integration. • System tests on the actual cluster.
  • 59. Alexander Kolb - 2016 - otto group https://github.com/ottogroup/flink-spector
  • 60. Alexander Kolb - 2016 - otto group ottogroup.com WE ARE HIRING!