About processing time and timestamps: The timestamp is either set in the source of in an in-between TimestampAssigner that can be used with DataStream.assignTimestampsAndWatermarks(). However, the timestamp in the element is normally not a "processing-time timestamp". I think it might make sense to split the functionality for the evictors into two parts: one that implicitly sets a timestamp and one that uses these timestamps. It could look like this:
DataStream<T> input = ... // this makes the current processing time explicit in the tuples: DataStream<Tuple2<Long, T>> withTimestamps = input.map(new ReifyProcessingTIme<T>()); withTimestamps .keyBy(...) .window(..) .evictor(new ProcessingTimeEvictor<T>()) .apply(...) where ProcessingTimeEvictor looks like this: class ProcessingTimeEvictor<T> extends Evictor<Tuple2<Long, T>> { void evictBefore(Iterable<Tuple2<Long, T>>, ...); void evictAfter ... } This would make everything that is happening explicit in the type signatures and explicit for the user. Cheers, Aljoscha On Thu, 28 Jul 2016 at 18:32 Aljoscha Krettek <aljos...@apache.org> wrote: > Hi, > in fact, changing it to Iterable<IN> would simplify things because then we > would not have to duplicate code for the EvictingWindowOperator any more. > It could be a very thin subclass of WindowOperator. > > Cheers, > Aljoscha > > On Wed, 27 Jul 2016 at 03:56 Vishnu Viswanath < > vishnu.viswanat...@gmail.com> wrote: > >> Hi Aljoscha, >> >> Regarding your concern - to not expose the StreamRecord in the Evictor, >> were you able to find any alternative? >> >> I tried to make the methods take Iterable<IN> input similar to the >> WindowFunction, but that didn't work since we have to clear the state and >> add the elements back to the state (to fix the bug mentioned in the >> previous mail) >> >> If you think the interface that accepts Iterable<StreamRecord<T>> >> elements is >> good enough, I have the changes ready. >> >> Thanks, >> Vishnu >> >> On Mon, Jul 25, 2016 at 7:48 AM, Aljoscha Krettek <aljos...@apache.org> >> wrote: >> >> > Hi, >> > the elements are currently not being removed from the buffers. That's a >> bug >> > that we could fix while adding the new Evictor interface. >> > >> > Cheers, >> > Aljoscha >> > >> > On Mon, 25 Jul 2016 at 13:00 Radu Tudoran <radu.tudo...@huawei.com> >> wrote: >> > >> > > Hi Aljoscha, >> > > >> > > Can you point us to the way it is handled now. Is there anything else >> for >> > > the removing of elements other than the skip in >> EvictingWindowOperator. >> > Is >> > > there something as it was before version 1.x where you had an explicit >> > > remove from window buffers? >> > > >> > > Dr. Radu Tudoran >> > > Research Engineer - Big Data Expert >> > > IT R&D Division >> > > >> > > >> > > HUAWEI TECHNOLOGIES Duesseldorf GmbH >> > > European Research Center >> > > Riesstrasse 25, 80992 München >> > > >> > > E-mail: radu.tudo...@huawei.com >> > > Mobile: +49 15209084330 >> > > Telephone: +49 891588344173 >> > > >> > > HUAWEI TECHNOLOGIES Duesseldorf GmbH >> > > Hansaallee 205, 40549 Düsseldorf, Germany, www.huawei.com >> > > Registered Office: Düsseldorf, Register Court Düsseldorf, HRB 56063, >> > > Managing Director: Bo PENG, Wanzhou MENG, Lifang CHEN >> > > Sitz der Gesellschaft: Düsseldorf, Amtsgericht Düsseldorf, HRB 56063, >> > > Geschäftsführer: Bo PENG, Wanzhou MENG, Lifang CHEN >> > > This e-mail and its attachments contain confidential information from >> > > HUAWEI, which is intended only for the person or entity whose address >> is >> > > listed above. Any use of the information contained herein in any way >> > > (including, but not limited to, total or partial disclosure, >> > reproduction, >> > > or dissemination) by persons other than the intended recipient(s) is >> > > prohibited. If you receive this e-mail in error, please notify the >> sender >> > > by phone or email immediately and delete it! >> > > >> > > >> > > -----Original Message----- >> > > From: Aljoscha Krettek [mailto:aljos...@apache.org] >> > > Sent: Monday, July 25, 2016 11:45 AM >> > > To: dev@flink.apache.org >> > > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink >> > > >> > > Hi, >> > > I think there is not yet a clear specification for how the actual >> removal >> > > of elements from the buffer will work. I think naively one can do: >> > > >> > > Iterable<E> currentElements = state.get() >> > > evictor.evict(currentElements); // this will remove some stuff from >> > there, >> > > or mark for removal >> > > >> > > state.clear() >> > > // the Iterable does not loop over the removed/marked elements >> > > for (E element : currentElements) { >> > > state.add(element) >> > > } >> > > >> > > This is very costly but the only way I see of doing this right now >> with >> > > every state backend. >> > > >> > > Cheers, >> > > Aljoscha >> > > >> > > On Mon, 25 Jul 2016 at 09:46 Radu Tudoran <radu.tudo...@huawei.com> >> > wrote: >> > > >> > > > Hi, >> > > > >> > > > Thanks for the clarification. Can someone point to where the events >> are >> > > > removed from buffers - I am trying to understand the new logic of >> > > handling >> > > > the eviction in this new API. Thanks >> > > > >> > > > >> > > > >> > > > -----Original Message----- >> > > > From: Vishnu Viswanath [mailto:vishnu.viswanat...@gmail.com] >> > > > Sent: Saturday, July 23, 2016 3:04 AM >> > > > To: Dev >> > > > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink >> > > > >> > > > Hi Radu, >> > > > >> > > > - Yes we can remove elements from the iterator. >> > > > - Right now the EvictingWindowOperator just skips the elements from >> the >> > > > Iterable before passing to the window function(Yes this has to be >> > changed >> > > > in the new API) >> > > > - Regarding how the last question on how elements are being removed >> > from >> > > > the window buffer. I am not sure how it is working right now, but >> when >> > > > trying out the new API that I am working on, I did find a bug where >> the >> > > > evicted elements are not actually removed from the State. I have >> added >> > a >> > > > fix for that. (You can see a mail regarding that in this mail >> chain) >> > > > >> > > > Thanks, >> > > > Vishnu >> > > > >> > > > On Fri, Jul 22, 2016 at 1:03 PM, Radu Tudoran < >> radu.tudo...@huawei.com >> > > >> > > > wrote: >> > > > >> > > > > Hi, >> > > > > >> > > > > Overall I believe that the interfaces and the proposal is good. I >> > have >> > > > the >> > > > > following question though: can you delete via the iterator >> > > > > (Iterable<StreamRecord<T>> elements) the elements? >> > > > > >> > > > > I tried to look over the code where the eviction happens (I did >> not >> > do >> > > > > these since version 0.10...looks very different now :) )...the >> only >> > > > > reference I found was the EvictingWindowOperator which at the >> > > > > fireOrContinue has a "skip" based on the number of elements >> returned >> > > from >> > > > > the evictor...and these are not put in the collection to be given >> to >> > > the >> > > > > user function to be applied. I think these will also need to be >> > changed >> > > > to >> > > > > adjust to the "any operator from anywhere in the window buffer". >> > > > > Also - as we are on this topic - can someone explain how these >> > elements >> > > > > that are not consider anymore for the user function are actually >> > > deleted >> > > > > from the window buffer?..i did not manage to find this.. some >> > reference >> > > > to >> > > > > classes/code where this happens would be useful >> > > > > >> > > > > >> > > > > Dr. Radu Tudoran >> > > > > Research Engineer - Big Data Expert >> > > > > IT R&D Division >> > > > > >> > > > > >> > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH >> > > > > European Research Center >> > > > > Riesstrasse 25, 80992 München >> > > > > >> > > > > E-mail: radu.tudo...@huawei.com >> > > > > Mobile: +49 15209084330 >> > > > > Telephone: +49 891588344173 >> > > > > >> > > > > HUAWEI TECHNOLOGIES Duesseldorf GmbH >> > > > > Hansaallee 205, 40549 Düsseldorf, Germany, www.huawei.com >> > > > > Registered Office: Düsseldorf, Register Court Düsseldorf, HRB >> 56063, >> > > > > Managing Director: Bo PENG, Wanzhou MENG, Lifang CHEN >> > > > > Sitz der Gesellschaft: Düsseldorf, Amtsgericht Düsseldorf, HRB >> 56063, >> > > > > Geschäftsführer: Bo PENG, Wanzhou MENG, Lifang CHEN >> > > > > This e-mail and its attachments contain confidential information >> from >> > > > > HUAWEI, which is intended only for the person or entity whose >> address >> > > is >> > > > > listed above. Any use of the information contained herein in any >> way >> > > > > (including, but not limited to, total or partial disclosure, >> > > > reproduction, >> > > > > or dissemination) by persons other than the intended recipient(s) >> is >> > > > > prohibited. If you receive this e-mail in error, please notify the >> > > sender >> > > > > by phone or email immediately and delete it! >> > > > > >> > > > > >> > > > > -----Original Message----- >> > > > > From: Vishnu Viswanath [mailto:vishnu.viswanat...@gmail.com] >> > > > > Sent: Friday, July 22, 2016 12:43 PM >> > > > > To: Dev >> > > > > Subject: Re: [DISCUSS][FLIP-4] Enhance Window Evictor in Flink >> > > > > >> > > > > Hi, >> > > > > >> > > > > I have created a FLIP page for this enhancement >> > > > > >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/FLINK/FLIP-4+%3A+Enhance+Window+Evictor >> > > > > >> > > > > Thanks, >> > > > > Vishnu >> > > > > >> > > > > On Thu, Jul 21, 2016 at 6:53 AM, Vishnu Viswanath < >> > > > > vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > > > > > Thanks Aljoscha. >> > > > > > >> > > > > > On Thu, Jul 21, 2016 at 4:46 AM, Aljoscha Krettek < >> > > aljos...@apache.org >> > > > > >> > > > > > wrote: >> > > > > > >> > > > > >> Hi, >> > > > > >> this, in fact, seems to be a bug. There should be something >> like >> > > > > >> windowState.clear(); >> > > > > >> for (IN element: projectedContents) { >> > > > > >> windowState.add(element); >> > > > > >> } >> > > > > >> >> > > > > >> after passing the elements to the window function. >> > > > > >> >> > > > > >> This is very inefficient but the only way I see of doing it >> right >> > > now. >> > > > > >> >> > > > > >> Cheers, >> > > > > >> Aljoscha >> > > > > >> >> > > > > >> >> > > > > >> On Thu, 21 Jul 2016 at 01:32 Vishnu Viswanath < >> > > > > >> vishnu.viswanat...@gmail.com> >> > > > > >> wrote: >> > > > > >> >> > > > > >> > Hi, >> > > > > >> > >> > > > > >> > When we use RocksDB as state backend, how does the backend >> state >> > > get >> > > > > >> > updated after some elements are evicted from the window? >> > > > > >> > I don't see any update call being made to remove the element >> > from >> > > > the >> > > > > >> state >> > > > > >> > stored in RocksDB. >> > > > > >> > >> > > > > >> > It looks like the RocksDBListState is only having get() and >> > add() >> > > > > >> methods >> > > > > >> > since it is an AppendingState, but that causes the evicted >> > > elements >> > > > to >> > > > > >> come >> > > > > >> > back when the trigger is fired next time. (It works fine >> when I >> > > use >> > > > > >> > MemoryStateBackend) >> > > > > >> > >> > > > > >> > Is this expected behavior or am I missing something. >> > > > > >> > >> > > > > >> > Thanks, >> > > > > >> > Vishnu >> > > > > >> > >> > > > > >> > On Mon, Jul 18, 2016 at 7:15 AM, Vishnu Viswanath < >> > > > > >> > vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > >> > > > > >> > > Hi Aljoscha, >> > > > > >> > > >> > > > > >> > > Thanks! Yes, I have the create page option now in wiki. >> > > > > >> > > >> > > > > >> > > Regards, >> > > > > >> > > Vishnu Viswanath, >> > > > > >> > > >> > > > > >> > > On Mon, Jul 18, 2016 at 6:34 AM, Aljoscha Krettek < >> > > > > >> aljos...@apache.org> >> > > > > >> > > wrote: >> > > > > >> > > >> > > > > >> > >> @Radu, addition of more window types and sorting should be >> > part >> > > > of >> > > > > >> > another >> > > > > >> > >> design proposal. This is interesting stuff but I think we >> > > should >> > > > > keep >> > > > > >> > >> issues separated because things can get complicated very >> > > quickly. >> > > > > >> > >> >> > > > > >> > >> On Mon, 18 Jul 2016 at 12:32 Aljoscha Krettek < >> > > > aljos...@apache.org >> > > > > > >> > > > > >> > >> wrote: >> > > > > >> > >> >> > > > > >> > >> > Hi, >> > > > > >> > >> > about TimeEvictor, yes, I think there should be specific >> > > > evictors >> > > > > >> for >> > > > > >> > >> > processing time and event time. Also, the current time >> > should >> > > > be >> > > > > >> > >> > retrievable from the EvictorContext. >> > > > > >> > >> > >> > > > > >> > >> > For the wiki you will need permissions. This was >> recently >> > > > changed >> > > > > >> > >> because >> > > > > >> > >> > there was too much spam. I gave you permission to add >> > pages. >> > > > Can >> > > > > >> you >> > > > > >> > >> please >> > > > > >> > >> > try and check if it works? >> > > > > >> > >> > >> > > > > >> > >> > Cheers, >> > > > > >> > >> > Aljoscha >> > > > > >> > >> > >> > > > > >> > >> > On Fri, 15 Jul 2016 at 13:28 Vishnu Viswanath < >> > > > > >> > >> > vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > >> > >> > > > > >> > >> >> Hi all, >> > > > > >> > >> >> >> > > > > >> > >> >> How do we create a FLIP page, is there any permission >> > setup >> > > > > >> > required? I >> > > > > >> > >> >> don't see any "Create" page(after logging in) option in >> > the >> > > > > >> header as >> > > > > >> > >> >> mentioned in >> > > > > >> > >> >> >> > > > > >> > >> >> >> > > > > >> > >> >> > > > > >> > >> > > > > >> >> > > > > >> > > > >> > > >> > >> https://cwiki.apache.org/confluence/display/FLINK/Flink+Improvement+Proposals >> > > > > >> > >> >> >> > > > > >> > >> >> >> > > > > >> > >> >> Thanks, >> > > > > >> > >> >> Vishnu >> > > > > >> > >> >> >> > > > > >> > >> >> On Wed, Jul 13, 2016 at 10:22 PM, Vishnu Viswanath < >> > > > > >> > >> >> vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > >> >> >> > > > > >> > >> >> > Hi Aljoscha, >> > > > > >> > >> >> > >> > > > > >> > >> >> > I agree, the user will know exactly that they are >> > creating >> > > > an >> > > > > >> > >> EventTime >> > > > > >> > >> >> > based evictor or ProcessingTime based evictor >> looking at >> > > the >> > > > > >> code. >> > > > > >> > >> >> > So do you think it will be ok to have multiple >> versions >> > of >> > > > > >> > >> TimeEvictor >> > > > > >> > >> >> > (one for event time and one for processing time) and >> > also >> > > a >> > > > > >> > >> DeltaEvcitor >> > > > > >> > >> >> > (again 2 versions- for event time and processing >> time) ? >> > > > > >> > >> >> > >> > > > > >> > >> >> > Please note that the existing behavior of >> > > > > >> TimeEvictor/DeltaEvictor >> > > > > >> > >> does >> > > > > >> > >> >> > not consider if it is EventTime or ProcessingTime >> > > > > >> > >> >> > e.g., in TimeEvictor the current time is considered >> as >> > the >> > > > > >> > timestamp >> > > > > >> > >> of >> > > > > >> > >> >> > the last element in the window >> > > > > >> > >> >> > >> > > > > >> > >> >> > *long currentTime = >> > > > > Iterables.getLast(elements).getTimestamp();* >> > > > > >> > >> >> > >> > > > > >> > >> >> > not the highest timestamp of all elements >> > > > > >> > >> >> > what I am trying to achieve is something like: >> > > > > >> > >> >> > >> > > > > >> > >> >> > *long currentTime;* >> > > > > >> > >> >> > * if (ctx.isEventTime()) {* >> > > > > >> > >> >> > * currentTime = getMaxTimestamp(elements);* >> > > > > >> > >> >> > * } else {* >> > > > > >> > >> >> > * currentTime = >> > > Iterables.getLast(elements).getTimestamp();* >> > > > > >> > >> >> > * }* >> > > > > >> > >> >> > >> > > > > >> > >> >> > Similarly, in DeltaEvictor the *`lastElement`* is >> > > > > >> > >> >> > *`Iterables.getLast(elements);`* and I am thinking we >> > > should >> > > > > >> > consider >> > > > > >> > >> >> the >> > > > > >> > >> >> > element with max timestamp as the last element >> instead >> > of >> > > > just >> > > > > >> > >> getting >> > > > > >> > >> >> the >> > > > > >> > >> >> > last inserted element as *`lastElement`* >> > > > > >> > >> >> > >> > > > > >> > >> >> > Do you think it is the right thing to do or leave the >> > > > behavior >> > > > > >> > >> Evictors >> > > > > >> > >> >> as >> > > > > >> > >> >> > is, w.r.t to choosing the last element? >> > > > > >> > >> >> > >> > > > > >> > >> >> > Thanks, >> > > > > >> > >> >> > Vishnu >> > > > > >> > >> >> > >> > > > > >> > >> >> > On Wed, Jul 13, 2016 at 11:07 AM, Aljoscha Krettek < >> > > > > >> > >> aljos...@apache.org >> > > > > >> > >> >> > >> > > > > >> > >> >> > wrote: >> > > > > >> > >> >> > >> > > > > >> > >> >> >> I still think it should be explicit in the class. >> For >> > > > > example, >> > > > > >> if >> > > > > >> > >> you >> > > > > >> > >> >> have >> > > > > >> > >> >> >> this code: >> > > > > >> > >> >> >> >> > > > > >> > >> >> >> input >> > > > > >> > >> >> >> .keyBy() >> > > > > >> > >> >> >> .window() >> > > > > >> > >> >> >> .trigger(EventTimeTrigger.create()) >> > > > > >> > >> >> >> .evictor(TimeTrigger.create()) >> > > > > >> > >> >> >> >> > > > > >> > >> >> >> the time behavior of the trigger is explicitly >> > specified >> > > > > while >> > > > > >> the >> > > > > >> > >> >> evictor >> > > > > >> > >> >> >> would dynamically adapt based on internal workings >> that >> > > the >> > > > > >> user >> > > > > >> > >> might >> > > > > >> > >> >> not >> > > > > >> > >> >> >> be aware of. Having the behavior explicit at the >> call >> > > site >> > > > is >> > > > > >> very >> > > > > >> > >> >> >> important, in my opinion. >> > > > > >> > >> >> >> >> > > > > >> > >> >> >> On Wed, 13 Jul 2016 at 16:28 Vishnu Viswanath < >> > > > > >> > >> >> >> vishnu.viswanat...@gmail.com> >> > > > > >> > >> >> >> wrote: >> > > > > >> > >> >> >> >> > > > > >> > >> >> >> > Hi, >> > > > > >> > >> >> >> > >> > > > > >> > >> >> >> > I was hoping to use the isEventTime method in the >> > > > > >> WindowAssigner >> > > > > >> > >> to >> > > > > >> > >> >> set >> > > > > >> > >> >> >> > that information in the EvictorContext. >> > > > > >> > >> >> >> > What do you think?. >> > > > > >> > >> >> >> > >> > > > > >> > >> >> >> > Thanks and Regards, >> > > > > >> > >> >> >> > Vishnu Viswanath, >> > > > > >> > >> >> >> > >> > > > > >> > >> >> >> > On Wed, Jul 13, 2016 at 10:09 AM, Aljoscha >> Krettek < >> > > > > >> > >> >> aljos...@apache.org >> > > > > >> > >> >> >> > >> > > > > >> > >> >> >> > wrote: >> > > > > >> > >> >> >> > >> > > > > >> > >> >> >> > > Hi, >> > > > > >> > >> >> >> > > I think the way to go here is to add both an >> > > > > >> EventTimeEvictor >> > > > > >> > >> and a >> > > > > >> > >> >> >> > > ProcessingTimeEvictor. The problem is that >> > > > "isEventTime" >> > > > > >> > cannot >> > > > > >> > >> >> >> really be >> > > > > >> > >> >> >> > > determined. That's also the reason why there is >> an >> > > > > >> > >> EventTimeTrigger >> > > > > >> > >> >> >> and a >> > > > > >> > >> >> >> > > ProcessingTimeTrigger. It was just an oversight >> > that >> > > > the >> > > > > >> > >> >> TimeEvictor >> > > > > >> > >> >> >> does >> > > > > >> > >> >> >> > > not also have these two versions. >> > > > > >> > >> >> >> > > >> > > > > >> > >> >> >> > > About EvictingWindowOperator, I think you can >> make >> > > the >> > > > > two >> > > > > >> > >> methods >> > > > > >> > >> >> >> > > non-final in WindowOperator, yes. >> > > > > >> > >> >> >> > > >> > > > > >> > >> >> >> > > Cheers, >> > > > > >> > >> >> >> > > Aljoscha >> > > > > >> > >> >> >> > > >> > > > > >> > >> >> >> > > On Wed, 13 Jul 2016 at 14:32 Vishnu Viswanath < >> > > > > >> > >> >> >> > > vishnu.viswanat...@gmail.com> >> > > > > >> > >> >> >> > > wrote: >> > > > > >> > >> >> >> > > >> > > > > >> > >> >> >> > > > Hi Aljoscha, >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > I am thinking of adding a method boolean >> > > > isEventTime(); >> > > > > >> in >> > > > > >> > the >> > > > > >> > >> >> >> > > > EvictorContext apart from >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > long getCurrentProcessingTime(); >> > > > > >> > >> >> >> > > > MetricGroup getMetricGroup(); >> > > > > >> > >> >> >> > > > long getCurrentWatermark(); >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > This method can be used to make the Evictor >> not >> > > > iterate >> > > > > >> > >> through >> > > > > >> > >> >> all >> > > > > >> > >> >> >> the >> > > > > >> > >> >> >> > > > elements in TimeEvictor. There will be a few >> > > changes >> > > > in >> > > > > >> the >> > > > > >> > >> >> existing >> > > > > >> > >> >> >> > > > behavior of TimeEvictor and DeltaEvictor (I >> have >> > > > > >> mentioned >> > > > > >> > >> this >> > > > > >> > >> >> in >> > > > > >> > >> >> >> the >> > > > > >> > >> >> >> > > > design doc) >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > Also, is there any specific reason why the >> open >> > and >> > > > > close >> > > > > >> > >> method >> > > > > >> > >> >> in >> > > > > >> > >> >> >> > > > WindowEvictor is made final? Since the >> > > EvictorContext >> > > > > >> will >> > > > > >> > be >> > > > > >> > >> in >> > > > > >> > >> >> the >> > > > > >> > >> >> >> > > > EvictingWindowOperator, I need to override the >> > open >> > > > and >> > > > > >> > close >> > > > > >> > >> in >> > > > > >> > >> >> >> > > > EvitingWindowOperator to make the reference of >> > > > > >> > EvictorContext >> > > > > >> > >> >> null. >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > Thanks and Regards, >> > > > > >> > >> >> >> > > > Vishnu Viswanath, >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > On Fri, Jul 8, 2016 at 7:40 PM, Vishnu >> Viswanath >> > < >> > > > > >> > >> >> >> > > > vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > >> >> >> > > > >> > > > > >> > >> >> >> > > > My thought process when asking if we can use >> > state >> > > > > >> backend >> > > > > >> > in >> > > > > >> > >> >> window >> > > > > >> > >> >> >> > > > > function was : can we add the elements to be >> > > > evicted >> > > > > >> into >> > > > > >> > >> some >> > > > > >> > >> >> >> state >> > > > > >> > >> >> >> > > and >> > > > > >> > >> >> >> > > > > allow the evictAfter to read it from some >> > context >> > > > and >> > > > > >> > >> remove it >> > > > > >> > >> >> >> from >> > > > > >> > >> >> >> > > the >> > > > > >> > >> >> >> > > > > window? >> > > > > >> > >> >> >> > > > > >> > > > > >> > >> >> >> > > > > >> > > > > >> > >> >> >> > > > > On Fri, Jul 8, 2016 at 7:30 PM, Vishnu >> > Viswanath >> > > < >> > > > > >> > >> >> >> > > > > vishnu.viswanat...@gmail.com> wrote: >> > > > > >> > >> >> >> > > > > >> > > > > >> > >> >> >> > > > >> Hi Aljoscha, >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> Thanks for the explanation, and sorry for >> late >> > > > reply >> > > > > >> was >> > > > > >> > >> busy >> > > > > >> > >> >> >> with >> > > > > >> > >> >> >> > > work. >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> I did think about this scenario, in fact >> in my >> > > > > >> previous >> > > > > >> > >> mail I >> > > > > >> > >> >> >> > thought >> > > > > >> > >> >> >> > > > of >> > > > > >> > >> >> >> > > > >> posting this question, then I understood >> that >> > > this >> > > > > >> > problem >> > > > > >> > >> >> will >> > > > > >> > >> >> >> be >> > > > > >> > >> >> >> > > > >> there which ever method we choose(Trigger >> > > looking >> > > > > for >> > > > > >> > >> pattern >> > > > > >> > >> >> or >> > > > > >> > >> >> >> > > Window >> > > > > >> > >> >> >> > > > >> looking for pattern). >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> I do have a pretty good watermark but my >> > concern >> > > > is >> > > > > >> that >> > > > > >> > it >> > > > > >> > >> >> >> changes >> > > > > >> > >> >> >> > > > based >> > > > > >> > >> >> >> > > > >> on the key of these messages(I don't know >> if >> > it >> > > is >> > > > > >> > >> possible, >> > > > > >> > >> >> >> haven't >> > > > > >> > >> >> >> > > > >> started coding that yet. May be you could >> tell >> > > > me). >> > > > > >> Even >> > > > > >> > if >> > > > > >> > >> >> it is >> > > > > >> > >> >> >> > yes >> > > > > >> > >> >> >> > > > some >> > > > > >> > >> >> >> > > > >> of these watermarks will be long(in days), >> > > which I >> > > > > >> don't >> > > > > >> > >> want >> > > > > >> > >> >> the >> > > > > >> > >> >> >> > > > trigger >> > > > > >> > >> >> >> > > > >> to wait that long. >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> It looks like it is not easy to have an >> > > evictAfter >> > > > > >> based >> > > > > >> > on >> > > > > >> > >> >> >> window >> > > > > >> > >> >> >> > > > >> function(without introducing coupling), but >> > can >> > > > the >> > > > > >> > current >> > > > > >> > >> >> >> window >> > > > > >> > >> >> >> > > apply >> > > > > >> > >> >> >> > > > >> function be modified to allow it to change >> the >> > > > > >> elements >> > > > > >> > in >> > > > > >> > >> it >> > > > > >> > >> >> - >> > > > > >> > >> >> >> may >> > > > > >> > >> >> >> > be >> > > > > >> > >> >> >> > > > >> using some state backend(I don't know how >> > > excatly >> > > > > the >> > > > > >> > >> >> internals >> > > > > >> > >> >> >> of >> > > > > >> > >> >> >> > > these >> > > > > >> > >> >> >> > > > >> work, so this might be a wrong question) >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> Thanks and Regards, >> > > > > >> > >> >> >> > > > >> Vishnu Viswanath, >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >> On Fri, Jul 8, 2016 at 10:20 AM, Aljoscha >> > > Krettek >> > > > < >> > > > > >> > >> >> >> > > aljos...@apache.org> >> > > > > >> > >> >> >> > > > >> wrote: >> > > > > >> > >> >> >> > > > >> >> > > > > >> > >> >> >> > > > >>> Hi Vishnu, >> > > > > >> > >> >> >> > > > >>> how long would these patterns be? The >> Trigger >> > > > would >> > > > > >> not >> > > > > >> > >> have >> > > > > >> > >> >> to >> > > > > >> > >> >> >> > sort >> > > > > >> > >> >> >> > > > the >> > > > > >> > >> >> >> > > > >>> elements for every new element but just >> > insert >> > > > the >> > > > > >> new >> > > > > >> > >> >> element >> > > > > >> > >> >> >> into >> > > > > >> > >> >> >> > > an >> > > > > >> > >> >> >> > > > >>> internal data structure. Only when it sees >> > that >> > > > the >> > > > > >> > >> >> watermark is >> > > > > >> > >> >> >> > > past a >> > > > > >> > >> >> >> > > > >>> certain point would it check whether the >> > > pattern >> > > > > >> matches >> > > > > >> > >> and >> > > > > >> > >> >> >> > actually >> > > > > >> > >> >> >> > > > >>> Trigger. >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> A general note regarding order and event >> > time: >> > > I >> > > > > >> think >> > > > > >> > >> >> relying >> > > > > >> > >> >> >> on >> > > > > >> > >> >> >> > > this >> > > > > >> > >> >> >> > > > >>> for >> > > > > >> > >> >> >> > > > >>> computation is very tricky unless the >> > watermark >> > > > is >> > > > > >> 100 % >> > > > > >> > >> >> >> correct or >> > > > > >> > >> >> >> > > you >> > > > > >> > >> >> >> > > > >>> completely discard elements that arrive >> after >> > > the >> > > > > >> > >> watermark, >> > > > > >> > >> >> >> i.e. >> > > > > >> > >> >> >> > > > >>> elements >> > > > > >> > >> >> >> > > > >>> that would break the promise of the >> watermark >> > > > that >> > > > > no >> > > > > >> > >> >> elements >> > > > > >> > >> >> >> with >> > > > > >> > >> >> >> > > an >> > > > > >> > >> >> >> > > > >>> earlier timestamp will ever arrive. The >> > reason >> > > > for >> > > > > >> this >> > > > > >> > is >> > > > > >> > >> >> that >> > > > > >> > >> >> >> > there >> > > > > >> > >> >> >> > > > >>> could >> > > > > >> > >> >> >> > > > >>> always enter new elements that end up >> between >> > > > > already >> > > > > >> > seen >> > > > > >> > >> >> >> > elements. >> > > > > >> > >> >> >> > > > For >> > > > > >> > >> >> >> > > > >>> example, let's say we have this sequence >> of >> > > > > elements >> > > > > >> > when >> > > > > >> > >> the >> > > > > >> > >> >> >> > trigger >> > > > > >> > >> >> >> > > > >>> fires: >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> a-b-a >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> This is the sequence that you are looking >> for >> > > and >> > > > > you >> > > > > >> > emit >> > > > > >> > >> >> some >> > > > > >> > >> >> >> > > result >> > > > > >> > >> >> >> > > > >>> from >> > > > > >> > >> >> >> > > > >>> the WindowFunction. Now, new elements >> arrive >> > > that >> > > > > >> fall >> > > > > >> > in >> > > > > >> > >> >> >> between >> > > > > >> > >> >> >> > the >> > > > > >> > >> >> >> > > > >>> elements we already have: >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> a-d-e-b-f-g-a >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> This is an updated, sorted view of the >> actual >> > > > > >> event-time >> > > > > >> > >> >> stream >> > > > > >> > >> >> >> and >> > > > > >> > >> >> >> > > we >> > > > > >> > >> >> >> > > > >>> didn't realize that the stream actually >> looks >> > > > like >> > > > > >> this >> > > > > >> > >> >> before. >> > > > > >> > >> >> >> > Does >> > > > > >> > >> >> >> > > > this >> > > > > >> > >> >> >> > > > >>> still match the original pattern or >> should we >> > > now >> > > > > >> > consider >> > > > > >> > >> >> this >> > > > > >> > >> >> >> as >> > > > > >> > >> >> >> > > > >>> non-matching? If no, then the earlier >> > > successful >> > > > > >> match >> > > > > >> > for >> > > > > >> > >> >> a-b-a >> > > > > >> > >> >> >> > was >> > > > > >> > >> >> >> > > > >>> wrong >> > > > > >> > >> >> >> > > > >>> and we should never have processed it but >> we >> > > > didn't >> > > > > >> know >> > > > > >> > >> at >> > > > > >> > >> >> the >> > > > > >> > >> >> >> > time. >> > > > > >> > >> >> >> > > > If >> > > > > >> > >> >> >> > > > >>> yes, then pattern matching like this can >> be >> > > done >> > > > in >> > > > > >> the >> > > > > >> > >> >> Trigger >> > > > > >> > >> >> >> by >> > > > > >> > >> >> >> > > > having >> > > > > >> > >> >> >> > > > >>> something like pattern slots: You don't >> have >> > to >> > > > > store >> > > > > >> > all >> > > > > >> > >> >> >> elements >> > > > > >> > >> >> >> > in >> > > > > >> > >> >> >> > > > the >> > > > > >> > >> >> >> > > > >>> Trigger, you just need to store possible >> > > > candidates >> > > > > >> that >> > > > > >> > >> >> could >> > > > > >> > >> >> >> > match >> > > > > >> > >> >> >> > > > the >> > > > > >> > >> >> >> > > > >>> pattern and ignore the other (in-between) >> > > > elements. >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> Cheers, >> > > > > >> > >> >> >> > > > >>> Aljoscha >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> On Fri, 8 Jul 2016 at 14:10 Vishnu >> Viswanath >> > < >> > > > > >> > >> >> >> > > > >>> vishnu.viswanat...@gmail.com> >> > > > > >> > >> >> >> > > > >>> wrote: >> > > > > >> > >> >> >> > > > >>> >> > > > > >> > >> >> >> > > > >>> > Hi Aljoscha, >> > > > > >> > >> >> >> > > > >>> > >> > > > > >> > >> >> >> > > > >>> > That is a good idea, trying to tie it >> back >> > to >> > > > the >> > > > > >> use >> > > > > >> > >> case, >> > > > > >> > >> >> >> > > > >>> > e.g., suppose trigger is looking for a >> > > pattern, >> > > > > >> a-b-a >> > > > > >> > >> and >> > > > > >> > >> >> >> when it >> > > > > >> > >> >> >> > > > sees >> > > > > >> > >> >> >> > > > >>> such >> > > > > >> > >> >> >> > > > >>> > a pattern, it will trigger the window >> and >> > it >> > > > > knows >> > > > > >> > that >> > > > > >> > >> now >> > > > > >> > >> >> >> the >> > > > > >> > >> >> >> > > > >>> Evictor is >> > > > > >> > >> >> >> > > > >>> > going to evict the element b, and >> trigger >> > > > updates >> > > > > >> its >> > > > > >> > >> >> state as >> > > > > >> > >> >> >> > a-a >> > > > > >> > >> >> >> > > > >>> (even >> > > > > >> > >> >> >> > > > >>> > before the window & evictor completes) >> and >> > > will >> > > > > be >> > > > > >> > >> looking >> > > > > >> > >> >> for >> > > > > >> > >> >> >> > the >> > > > > >> > >> >> >> > > > >>> rest of >> > > > > >> > >> >> >> > > > >>> > the pattern i.e., b-a. But I can think >> of 1 >> > > > > problem >> > > > > >> > >> here, >> > > > > >> > >> >> >> > > > >>> > >> > > > > >> > >> >> >> > > > >>> > - the events can arrive out of order, >> > > i.e., >> > > > > the >> > > > > >> > >> trigger >> > > > > >> > >> >> >> might >> > > > > >> > >> >> >> > be >> > > > > >> > >> >> >> > > > >>> seeing >> > > > > >> > >> >> >> > > > >>> > a pattern a-a-b but actual event >> time is >> > > > a-b-a >> > > > > >> then >> > > > > >> > >> >> trigger >> > > > > >> > >> >> >> > will >> > > > > >> > >> >> >> > > > >>> have to >> > > > > >> > >> >> >> > > > >>> > sort the elements in the window >> > everytime >> > > it >> > > > > >> sees >> > > > > >> > an >> > > > > >> > >> >> >> element. >> > > > > >> > >> >> >> > (I >> > > > > >> > >> >> >> > > > was >> > > > > >> > >> >> >> > > > >>> > planning to do this sorting in the >> > window, >> > > > > which >> > > > > >> > >> will be >> > > > > >> > >> >> >> less >> > > > > >> > >> >> >> > > > often >> > > > > >> > >> >> >> > > > >>> - >> > > > > >> > >> >> >> > > > >>> > only >> > > > > >> > >> >> >> > > > >>> > when the trigger fires) >> > > > > >> > >> >> >> > > > >>> > >> > > > > >> > >> >> >> > > > >>> > Thanks and Regards, >> > > > > >> > >> >> >> > > > >>> > Vishnu Viswanath, >> > > > > >> > >> >> >> > > > >>> > >> > > > > >> > >> >> >> > > > >>> > On Fri, Jul 8, 2016 at 6:04 AM, Aljoscha >> > > > Krettek >> > > > > < >> > > > > >> > >> >> >> > > > aljos...@apache.org> >> > > > > >> > >> >> >> > > > >>> > wrote: >> > > > > >> > >> >> >> > > > >>> > >> > > > > >> > >> >> >> > > > >>> > Hi, >> > > > > >> > >> >> >> > > > >>> > > come to think of it, the right place >> to >> > put >> > > > > such >> > > > > >> > >> checks >> > > > > >> > >> >> is >> > > > > >> > >> >> >> > > actually >> > > > > >> > >> >> >> > > > >>> the >> > > > > >> > >> >> >> > > > >>> > > Trigger. It would have to be a custom >> > > trigger >> > > > > >> that >> > > > > >> > >> >> observes >> > > > > >> > >> >> >> > time >> > > > > >> > >> >> >> > > > but >> > > > > >> > >> >> >> > > > >>> also >> > > > > >> > >> >> >> > > > >>> > > keeps some internal state machine to >> > decide >> > > > > when >> > > > > >> it >> > > > > >> > >> has >> > > > > >> > >> >> >> > observed >> > > > > >> > >> >> >> > > > the >> > > > > >> > >> >> >> > > > >>> > right >> > > > > >> > >> >> >> > > > >>> > > pattern in the window. Then the window >> > > > function >> > > > > >> > would >> > > > > >> > >> >> just >> > > > > >> > >> >> >> have >> > > > > >> > >> >> >> > > to >> > > > > >> > >> >> >> > > > >>> do the >> > > > > >> > >> >> >> > > > >>> > > processing and you have good >> separation >> > of >> > > > > >> concerns. >> > > > > >> > >> Does >> > > > > >> > >> >> >> that >> > > > > >> > >> >> >> > > make >> > > > > >> > >> >> >> > > > >>> > sense? >> > > > > >> > >> >> >> > > > >>> > > >> > > > > >> > >> >> >> > > > >>> > > I'm ignoring time and sorting by time >> for >> > > now >> > > > > >> > because >> > > > > >> > >> we >> > > > > >> > >> >> >> > probably >> > > > > >> > >> >> >> > > > >>> need >> > > > > >> > >> >> >> > > > >>> > > another design document for that. To >> me >> > it >> > > > > seems >> > > > > >> > like >> > > > > >> > >> a >> > > > > >> > >> >> >> bigger >> > > > > >> > >> >> >> > > > thing. >> > > > > >> > >> >> >> > > > >>> > > >> > > > > >> > >> >> >> > > > >>> > > Cheers, >> > > > > >> > >> >> >> > > > >>> > > Aljoscha >> > > > > >> > >> >> >> > > > >>> > > >> > > > > >> > >> >> >> > > > >>> > > On Thu, 7 Jul 2016 at 23:56 Vishnu >> > > Viswanath >> > > > < >> > > > > >> > >> >> >> > > > >>> > vishnu.viswanat...@gmail.com >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > wrote: >> > > > > >> > >> >> >> > > > >>> > > >> > > > > >> > >> >> >> > > > >>> > > > Hi, >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > Regarding the evictAfter function, >> that >> > > > > evicts >> > > > > >> > >> based on >> > > > > >> > >> >> >> some >> > > > > >> > >> >> >> > > > >>> decision >> > > > > >> > >> >> >> > > > >>> > > made >> > > > > >> > >> >> >> > > > >>> > > > by the window function: I think it >> > will >> > > be >> > > > > >> nice >> > > > > >> > if >> > > > > >> > >> we >> > > > > >> > >> >> can >> > > > > >> > >> >> >> > come >> > > > > >> > >> >> >> > > > up >> > > > > >> > >> >> >> > > > >>> with >> > > > > >> > >> >> >> > > > >>> > > > something that is LESS coupled, >> > because I >> > > > can >> > > > > >> > think >> > > > > >> > >> of >> > > > > >> > >> >> >> > several >> > > > > >> > >> >> >> > > > use >> > > > > >> > >> >> >> > > > >>> > cases >> > > > > >> > >> >> >> > > > >>> > > > that depend on it. >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > Especially in the case where there >> are >> > > late >> > > > > >> > arriving >> > > > > >> > >> >> >> > messages. >> > > > > >> > >> >> >> > > > Only >> > > > > >> > >> >> >> > > > >>> > after >> > > > > >> > >> >> >> > > > >>> > > > the window function is applied we >> could >> > > > tell >> > > > > >> what >> > > > > >> > >> to do >> > > > > >> > >> >> >> with >> > > > > >> > >> >> >> > > the >> > > > > >> > >> >> >> > > > >>> > elements >> > > > > >> > >> >> >> > > > >>> > > > in the window. You could apply your >> > > > business >> > > > > >> logic >> > > > > >> > >> >> there >> > > > > >> > >> >> >> to >> > > > > >> > >> >> >> > > > >>> determine >> > > > > >> > >> >> >> > > > >>> > if >> > > > > >> > >> >> >> > > > >>> > > > the window funciton was able to do >> what >> > > it >> > > > is >> > > > > >> > >> supposed >> > > > > >> > >> >> to >> > > > > >> > >> >> >> do, >> > > > > >> > >> >> >> > > if >> > > > > >> > >> >> >> > > > >>> yes >> > > > > >> > >> >> >> > > > >>> > > evict >> > > > > >> > >> >> >> > > > >>> > > > those elements, else(since the >> elements >> > > you >> > > > > are >> > > > > >> > >> looking >> > > > > >> > >> >> >> for >> > > > > >> > >> >> >> > > > haven't >> > > > > >> > >> >> >> > > > >>> > > arrived >> > > > > >> > >> >> >> > > > >>> > > > yet) wait and try again when the >> > trigger >> > > > gets >> > > > > >> > fired >> > > > > >> > >> >> next >> > > > > >> > >> >> >> > time. >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > Thanks and Regards, >> > > > > >> > >> >> >> > > > >>> > > > Vishnu Viswanath, >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > On Thu, Jul 7, 2016 at 9:19 AM, Radu >> > > > Tudoran >> > > > > < >> > > > > >> > >> >> >> > > > >>> radu.tudo...@huawei.com> >> > > > > >> > >> >> >> > > > >>> > > > wrote: >> > > > > >> > >> >> >> > > > >>> > > > >> > > > > >> > >> >> >> > > > >>> > > > > Hi, >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > @Aljoscha - I can understand the >> > reason >> > > > why >> > > > > >> you >> > > > > >> > >> are >> > > > > >> > >> >> >> > hesitant >> > > > > >> > >> >> >> > > to >> > > > > >> > >> >> >> > > > >>> > > introduce >> > > > > >> > >> >> >> > > > >>> > > > > "slower" windows such as the ones >> > that >> > > > > would >> > > > > >> > >> maintain >> > > > > >> > >> >> >> > sorted >> > > > > >> > >> >> >> > > > >>> items or >> > > > > >> > >> >> >> > > > >>> > > > > windows with bindings between the >> > > > different >> > > > > >> > >> entities >> > > > > >> > >> >> >> > > (evictor, >> > > > > >> > >> >> >> > > > >>> > trigger, >> > > > > >> > >> >> >> > > > >>> > > > > window, apply function). However, >> I >> > > think >> > > > > >> it's >> > > > > >> > >> >> possible >> > > > > >> > >> >> >> > just >> > > > > >> > >> >> >> > > to >> > > > > >> > >> >> >> > > > >>> > create >> > > > > >> > >> >> >> > > > >>> > > > more >> > > > > >> > >> >> >> > > > >>> > > > > types of windows. The existing >> ones >> > > > > >> > (timewindows, >> > > > > >> > >> >> global >> > > > > >> > >> >> >> > > > windows >> > > > > >> > >> >> >> > > > >>> ...) >> > > > > >> > >> >> >> > > > >>> > > can >> > > > > >> > >> >> >> > > > >>> > > > > remain, and just add some more >> > flavors >> > > of >> > > > > >> > windows >> > > > > >> > >> >> were >> > > > > >> > >> >> >> more >> > > > > >> > >> >> >> > > > >>> features >> > > > > >> > >> >> >> > > > >>> > > are >> > > > > >> > >> >> >> > > > >>> > > > > enabled or more functionality >> (e.g., >> > > > access >> > > > > >> to >> > > > > >> > the >> > > > > >> > >> >> each >> > > > > >> > >> >> >> > > element >> > > > > >> > >> >> >> > > > >>> in >> > > > > >> > >> >> >> > > > >>> > the >> > > > > >> > >> >> >> > > > >>> > > > > evictor ; possibility to delete or >> > mark >> > > > for >> > > > > >> > >> eviction >> > > > > >> > >> >> >> > elements >> > > > > >> > >> >> >> > > > in >> > > > > >> > >> >> >> > > > >>> the >> > > > > >> > >> >> >> > > > >>> > > > > function...) >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > Regarding the specific case of >> sorted >> > > > > >> windows, I >> > > > > >> > >> >> think >> > > > > >> > >> >> >> the >> > > > > >> > >> >> >> > N >> > > > > >> > >> >> >> > > > lon >> > > > > >> > >> >> >> > > > >>> N >> > > > > >> > >> >> >> > > > >>> > > > > complexity to sort (the worst >> case) >> > is >> > > > very >> > > > > >> > >> >> unlikely. In >> > > > > >> > >> >> >> > fact >> > > > > >> > >> >> >> > > > you >> > > > > >> > >> >> >> > > > >>> > have >> > > > > >> > >> >> >> > > > >>> > > > > almost sorted items/arrays. >> Moreover, >> > > if >> > > > > you >> > > > > >> > >> consider >> > > > > >> > >> >> >> that >> > > > > >> > >> >> >> > in >> > > > > >> > >> >> >> > > > >>> > > iteration X >> > > > > >> > >> >> >> > > > >>> > > > > all elements were sorted, then in >> > > > iteration >> > > > > >> X+1 >> > > > > >> > >> you >> > > > > >> > >> >> will >> > > > > >> > >> >> >> > need >> > > > > >> > >> >> >> > > > to >> > > > > >> > >> >> >> > > > >>> sort >> > > > > >> > >> >> >> > > > >>> > > > just >> > > > > >> > >> >> >> > > > >>> > > > > the newly arrived elements (M). I >> > would >> > > > > >> expect >> > > > > >> > >> that >> > > > > >> > >> >> this >> > > > > >> > >> >> >> > > > number M >> > > > > >> > >> >> >> > > > >>> > might >> > > > > >> > >> >> >> > > > >>> > > > be >> > > > > >> > >> >> >> > > > >>> > > > > significant smaller then N >> (elements >> > > that >> > > > > >> > exists). >> > > > > >> > >> >> Then >> > > > > >> > >> >> >> > using >> > > > > >> > >> >> >> > > > an >> > > > > >> > >> >> >> > > > >>> > > > insertion >> > > > > >> > >> >> >> > > > >>> > > > > sort for these new elements you >> would >> > > > have >> > > > > >> M * >> > > > > >> > N >> > > > > >> > >> >> >> > complexity >> > > > > >> > >> >> >> > > > and >> > > > > >> > >> >> >> > > > >>> if >> > > > > >> > >> >> >> > > > >>> > > M<< N >> > > > > >> > >> >> >> > > > >>> > > > > then the complexity is O(N). >> > > > Alternatively >> > > > > >> you >> > > > > >> > can >> > > > > >> > >> >> use a >> > > > > >> > >> >> >> > > binary >> > > > > >> > >> >> >> > > > >>> > search >> > > > > >> > >> >> >> > > > >>> > > > for >> > > > > >> > >> >> >> > > > >>> > > > > insertion and then you further >> reduce >> > > the >> > > > > >> > >> complexity >> > > > > >> > >> >> to >> > > > > >> > >> >> >> > > > O(logN). >> > > > > >> > >> >> >> > > > >>> > > > > If M is proportional to N then you >> > can >> > > > > sort M >> > > > > >> > and >> > > > > >> > >> use >> > > > > >> > >> >> >> merge >> > > > > >> > >> >> >> > > > sort >> > > > > >> > >> >> >> > > > >>> for >> > > > > >> > >> >> >> > > > >>> > > > > combining. >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > Dr. Radu Tudoran >> > > > > >> > >> >> >> > > > >>> > > > > Research Engineer - Big Data >> Expert >> > > > > >> > >> >> >> > > > >>> > > > > IT R&D Division >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > HUAWEI TECHNOLOGIES Duesseldorf >> GmbH >> > > > > >> > >> >> >> > > > >>> > > > > European Research Center >> > > > > >> > >> >> >> > > > >>> > > > > Riesstrasse 25, 80992 München >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > E-mail: radu.tudo...@huawei.com >> > > > > >> > >> >> >> > > > >>> > > > > Mobile: +49 15209084330 >> > > > > >> > >> >> >> > > > >>> > > > > Telephone: +49 891588344173 >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > HUAWEI TECHNOLOGIES Duesseldorf >> GmbH >> > > > > >> > >> >> >> > > > >>> > > > > Hansaallee 205, 40549 Düsseldorf, >> > > > Germany, >> > > > > >> > >> >> >> www.huawei.com >> > > > > >> > >> >> >> > > > >>> > > > > Registered Office: Düsseldorf, >> > Register >> > > > > Court >> > > > > >> > >> >> >> Düsseldorf, >> > > > > >> > >> >> >> > HRB >> > > > > >> > >> >> >> > > > >>> 56063, >> > > > > >> > >> >> >> > > > >>> > > > > Managing Director: Bo PENG, >> Wanzhou >> > > MENG, >> > > > > >> Lifang >> > > > > >> > >> CHEN >> > > > > >> > >> >> >> > > > >>> > > > > Sitz der Gesellschaft: Düsseldorf, >> > > > > >> Amtsgericht >> > > > > >> > >> >> >> Düsseldorf, >> > > > > >> > >> >> >> > > HRB >> > > > > >> > >> >> >> > > > >>> 56063, >> > > > > >> > >> >> >> > > > >>> > > > > Geschäftsführer: Bo PENG, Wanzhou >> > MENG, >> > > > > >> Lifang >> > > > > >> > >> CHEN >> > > > > >> > >> >> >> > > > >>> > > > > This e-mail and its attachments >> > contain >> > > > > >> > >> confidential >> > > > > >> > >> >> >> > > > information >> > > > > >> > >> >> >> > > > >>> from >> > > > > >> > >> >> >> > > > >>> > > > > HUAWEI, which is intended only for >> > the >> > > > > >> person or >> > > > > >> > >> >> entity >> > > > > >> > >> >> >> > whose >> > > > > >> > >> >> >> > > > >>> address >> > > > > >> > >> >> >> > > > >>> > > is >> > > > > >> > >> >> >> > > > >>> > > > > listed above. Any use of the >> > > information >> > > > > >> > contained >> > > > > >> > >> >> >> herein >> > > > > >> > >> >> >> > in >> > > > > >> > >> >> >> > > > any >> > > > > >> > >> >> >> > > > >>> way >> > > > > >> > >> >> >> > > > >>> > > > > (including, but not limited to, >> total >> > > or >> > > > > >> partial >> > > > > >> > >> >> >> > disclosure, >> > > > > >> > >> >> >> > > > >>> > > > reproduction, >> > > > > >> > >> >> >> > > > >>> > > > > or dissemination) by persons other >> > than >> > > > the >> > > > > >> > >> intended >> > > > > >> > >> >> >> > > > >>> recipient(s) is >> > > > > >> > >> >> >> > > > >>> > > > > prohibited. If you receive this >> > e-mail >> > > in >> > > > > >> error, >> > > > > >> > >> >> please >> > > > > >> > >> >> >> > > notify >> > > > > >> > >> >> >> > > > >>> the >> > > > > >> > >> >> >> > > > >>> > > sender >> > > > > >> > >> >> >> > > > >>> > > > > by phone or email immediately and >> > > delete >> > > > > it! >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > -----Original Message----- >> > > > > >> > >> >> >> > > > >>> > > > > From: 吕文龙(吕文龙) [mailto: >> > > > > >> > >> wenlong....@alibaba-inc.com] >> > > > > >> > >> >> >> > > > >>> > > > > Sent: Thursday, July 07, 2016 >> 11:59 >> > AM >> > > > > >> > >> >> >> > > > >>> > > > > To: dev@flink.apache.org >> > > > > >> > >> >> >> > > > >>> > > > > Subject: 答复: [DISCUSS] Enhance >> Window >> > > > > >> Evictor in >> > > > > >> > >> >> Flink >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > HI, >> > > > > >> > >> >> >> > > > >>> > > > > I think it is necessary to support >> > > sorted >> > > > > >> > window, >> > > > > >> > >> >> which >> > > > > >> > >> >> >> can >> > > > > >> > >> >> >> > > > avoid >> > > > > >> > >> >> >> > > > >>> > > > scanning >> > > > > >> > >> >> >> > > > >>> > > > > all the elements of window while >> > trying >> > > > to >> > > > > >> > >> evicting >> > > > > >> > >> >> >> > element, >> > > > > >> > >> >> >> > > > >>> which >> > > > > >> > >> >> >> > > > >>> > may >> > > > > >> > >> >> >> > > > >>> > > > cost >> > > > > >> > >> >> >> > > > >>> > > > > many IO operations, such as >> querying >> > > DBs >> > > > to >> > > > > >> get >> > > > > >> > >> >> elements >> > > > > >> > >> >> >> > from >> > > > > >> > >> >> >> > > > >>> state. >> > > > > >> > >> >> >> > > > >>> > > > > What's more, when an window >> > aggregation >> > > > > >> function >> > > > > >> > >> is >> > > > > >> > >> >> >> > > invertible, >> > > > > >> > >> >> >> > > > >>> such >> > > > > >> > >> >> >> > > > >>> > as >> > > > > >> > >> >> >> > > > >>> > > > > sum, which can be updated by >> adding >> > or >> > > > > >> removing >> > > > > >> > a >> > > > > >> > >> >> single >> > > > > >> > >> >> >> > > > record, >> > > > > >> > >> >> >> > > > >>> > window >> > > > > >> > >> >> >> > > > >>> > > > > results can be incrementally >> > > calculated. >> > > > In >> > > > > >> this >> > > > > >> > >> >> kind of >> > > > > >> > >> >> >> > > case, >> > > > > >> > >> >> >> > > > >>> we can >> > > > > >> > >> >> >> > > > >>> > > > > dramatically improve the >> performance >> > of >> > > > > >> window >> > > > > >> > >> >> >> aggregation, >> > > > > >> > >> >> >> > > if >> > > > > >> > >> >> >> > > > >>> > evictor >> > > > > >> > >> >> >> > > > >>> > > > can >> > > > > >> > >> >> >> > > > >>> > > > > trigger update of window >> aggregation >> > > > state >> > > > > by >> > > > > >> > some >> > > > > >> > >> >> >> > mechanism. >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > Best Wishes! >> > > > > >> > >> >> >> > > > >>> > > > > --- >> > > > > >> > >> >> >> > > > >>> > > > > wenlong.lwl >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > -----邮件原件----- >> > > > > >> > >> >> >> > > > >>> > > > > 发件人: Aljoscha Krettek [mailto: >> > > > > >> > aljos...@apache.org >> > > > > >> > >> ] >> > > > > >> > >> >> >> > > > >>> > > > > 发送时间: 2016年7月7日 17:32 >> > > > > >> > >> >> >> > > > >>> > > > > 收件人: dev@flink.apache.org >> > > > > >> > >> >> >> > > > >>> > > > > 主题: Re: [DISCUSS] Enhance Window >> > > Evictor >> > > > in >> > > > > >> > Flink >> > > > > >> > >> >> >> > > > >>> > > > > >> > > > > >> > >> >> >> > > > >>> > > > > Hi, >> > > > > >> > >> >> >> > > > >>> > > > > regarding "sorting the window by >> > event >> > > > > >> time": I >> > > > > >> > >> also >> > > > > >> > >> >> >> > > considered >> > > > > >> > >> >> >> > > > >>> this >> > > > > >> > >> >> >> > > > >>> > > but >> > > > > >> > >> >> >> > > > >>> > > > > in the end I don't think it's >> > > necessary. >> > > > > >> Sorting >> > > > > >> > >> is >> > > > > >> > >> >> >> rather >> > > > > >> > >> >> >> > > > >>> expensive >> > > > > >> > >> >> >> > > > >>> > > and >> > > > > >> > >> >> >> > > > >>> > > > > making decisions based on the >> order >> > of >> > > > > >> elements >> > > > > >> > >> can >> > > > > >> > >> >> be >> > > > > >> > >> >> >> > > tricky. >> > > > > >> > >> >> >> > > > An >> > > > > >> > >> >> >> > > > >>> > > extreme >> > > > > >> > >> >> >> > > > >>> > > > > example of why this can be >> > problematic >> > > is >> > > > > the >> > > > > >> > case >> > > > > >> > >> >> where >> > > > > >> > >> >> >> > all >> > > > > >> > >> >> >> > > > >>> elements >> > > > > >> > >> >> >> > > > >>> > > in >> > > > > >> > >> >> >> > > > >>> > > > > the window have the same >> timestamp. >> > > Now, >> > > > if >> > > > > >> you >> > > > > >> > >> >> decide >> > > > > >> > >> >> >> to >> > > > > >> > >> >> >> > > evict >> > > > > >> > >> >> >> > > > >>> the >> > > > > >> > >> >> >> > > > >>> > > > first 5 >> > > > > >> > >> >> >> > > > >>> > > > > elements based on timestamp order >> you >> > > > > >> basically >> > > > > >> > >> >> >> arbitrarily >> > > > > >> > >> >> >> > > > >>> evict 5 >> > > > > >> > >> >> >> > > > >>> > > > > elements. I think the better >> solution >> > > for >> > > > > >> doing >> > > > > >> > >> >> >> time-based >> > > > > >> > >> >> >> > > > >>> eviction >> > > > > >> > >> >> >> > > > >>> > is >> > > > > >> > >> >> >> > > > >>> > > to >> > > > > >> > >> >> >> > > > >>> > > > > do one pass over the elements to >> get >> > an >> > > > > >> overview >> > > > > >> > >> of >> > > > > >> > >> >> the >> > > > > >> > >> >> >> > > > timestamp >> > > > > >> > >> >> >> > > > >>> > > > > distribution, then do a second >> pass >> > and >> > > > > evict >> > > > > >> > >> >> elements >> > > > > >> > >> >> >> > based >> > > > > >> > >> >> >> > > on >> > > > > >> > >> >> >> > > > >>> what >> > > > > >> > >> >> >> > > > >>> > > was >> > > > > >> > >> >> >> > > > >>> > > > > learned in the first pass. This >> has >> > > > > >> complexity >> > > > > >> > 2*n >> > > > > >> > >> >> >> compared >> > > > > >> > >> >> >> > > to >> > > > > >> > >> >> > >