2016-03-30 43 views
2

Görünüş: (GlobalWindows#assignWindows içinde oluşturulan) GlobalWindow bir örneğini kullanarak neden bu örnekteNeden bir GlobalWindow örneği kullanılır? Bu <a href="https://github.com/apache/flink/blob/master/flink-examples/flink-examples-streaming/src/main/java/org/apache/flink/streaming/examples/windowing/SessionWindowing.java" rel="nofollow">example</a> de

// We create sessions for each id with max timeout of 3 time units 
DataStream<Tuple3<String, Long, Integer>> aggregated = source 
     .keyBy(0) 
     .window(GlobalWindows.create()) 
     .trigger(new SessionTrigger(3L)) 
     .sum(2); 

Biri bana açıklayabilir misiniz?

Ben FLINK anladığım kadarıyla olayların tümü a olayları ilişkilendirilmesi gereken yani denk ilişkilendirmek için Window örneklerini kullanarak çünkü Window(b) vb b olay için, a olay için kendi pencere ie Window(a) oluşturulmalıdır gelen herhangi bir olay kimlikleri için gibi görünüyor örneğin Window(a) ile. Bu durumda, Window(a) ile ilişkili tüm a olayları, pencere işlevine geçirilecek ve birlikte işlenecektir (bu örnekte, kimliğe göre gruplandırılmış olay sayısı yani, a, b, vs.), ancak bu örneği kullanarak görebilirsiniz. GlobalWindow'un bir örneği.

cevap

2

Flink öğesinin, aynı pencereye ait öğeleri birlikte gruplandırmak için Window örneklerini kullanması doğrudur. Bununla birlikte, daha önce bile, giriş akışı belirtilen anahtara göre gruplandırılır. Böylece dahili olarak Flink, her bir anahtar için bir pencere listesi ve ilişkili öğeleri saklar. Bu, aynı pencere örneğinde birden çok tuş arasında kullanılmasına izin verir.

içten bir List içinde Window ve Key elemanların her çifti için depolayan bir iç içe Map<Window, Map<Key, List<Element>> var, daha kesin olmak gerekirse.

Bu yaklaşımın yararı, pencereli mantığın anahtarlanmış bir akış üzerindeki ve anahtarlanmamış bir akış üzerindeki uygulamalarının farklı olmamasıdır. Son durum için anahtarı basitçe kukla bir değere ayarlarsınız.

+0

https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/windows.html adresinden, "Bir global pencere asistanı aynı tuşa sahip tüm elemanları aynı şekilde atar tek küresel pencere. ", yani 10 farklı anahtar varsa, 10 farklı global pencere oluşturur? –

+0

Semantik olarak her tuş için farklı bir pencereye sahip olacaksınız. Uygulama bilge, pencere örneği tüm anahtarlarda aynıdır. Bunun nedeni, pencere örneğinin pencere öğelerini benzersiz şekilde tanımlamak için anahtar değere sahip bir bileşik anahtar oluşturmasıdır. –

+0

Bu sadece küresel Windows içindir, değil mi? Zaman Pencereleri için, 10 farklı anahtar, uygulama perspektifinden bile 10 farklı zaman penceresi örneğine sahip olacak, doğru mu? Yanlış olduğumda lütfen beni düzeltin. –