Hi Gyula, That's really helpful. The docs is improving so much since the last time (0.9).
Thanks a lot ! Cheers On Wed, Aug 19, 2015 at 3:07 PM, Gyula Fóra <gyula.f...@gmail.com> wrote: > Hey, > > If it is always better to check the events against a more up-to-date model > (even if the events we are checking arrived before the update) then it is > fine to keep the model outside of the system. > > In this case we need to make sure that we can push the updates to the > external system consistently. If you are using the PersistentKafkaSource > for instance it can happen that some messages are replayed in case of > failure. In this case you need to make sure that you remove duplicate > updates or have idempotent updates. > > You can read about the checkpoint mechanism in the Flink website: > https://ci.apache.org/projects/flink/flink-docs-master/internals/stream_checkpointing.html > > Cheers, > Gyula > > On Wed, Aug 19, 2015 at 9:56 AM Welly Tambunan <if05...@gmail.com> wrote: > >> Thanks Gyula, >> >> Another question i have.. >> >> > ... while external model updates would be *tricky *to keep consistent. >> Is that still the case if the Operator treat the external model as >> read-only ? We create another stream that will update the external model >> separately. >> >> Could you please elaborate more about this one ? >> >> Cheers >> >> On Wed, Aug 19, 2015 at 2:52 PM, Gyula Fóra <gyula.f...@gmail.com> wrote: >> >>> In that case I would apply a map to wrap in some common type, like a n >>> Either<t1,t2> before the union. >>> >>> And then in the coflatmap you can unwrap it. >>> On Wed, Aug 19, 2015 at 9:50 AM Welly Tambunan <if05...@gmail.com> >>> wrote: >>> >>>> Hi Gyula, >>>> >>>> Thanks. >>>> >>>> However update1 and update2 have a different type. Based on my >>>> understanding, i don't think we can use union. How can we handle this one ? >>>> >>>> We like to create our event strongly type to get the domain language >>>> captured. >>>> >>>> >>>> Cheers >>>> >>>> On Wed, Aug 19, 2015 at 2:37 PM, Gyula Fóra <gyula.f...@gmail.com> >>>> wrote: >>>> >>>>> Hey, >>>>> >>>>> One input of your co-flatmap would be model updates and the other >>>>> input would be events to check against the model if I understand >>>>> correctly. >>>>> >>>>> This means that if your model updates come from more than one stream >>>>> you need to union them into a single stream before connecting them with >>>>> the >>>>> event stream and applying the coatmap. >>>>> >>>>> DataStream updates1 = .... >>>>> DataStream updates2 = .... >>>>> DataStream events = .... >>>>> >>>>> events.connect(updates1.union(updates2).broadcast()).flatMap(...) >>>>> >>>>> Does this answer your question? >>>>> >>>>> Gyula >>>>> >>>>> >>>>> On Wednesday, August 19, 2015, Welly Tambunan <if05...@gmail.com> >>>>> wrote: >>>>> >>>>>> Hi Gyula, >>>>>> >>>>>> Thanks for your response. >>>>>> >>>>>> However the model can received multiple event for update. How can we >>>>>> do that with co-flatmap as i can see the connect API only received single >>>>>> datastream ? >>>>>> >>>>>> >>>>>> > ... while external model updates would be tricky to keep >>>>>> consistent. >>>>>> Is that still the case if the Operator treat the external model as >>>>>> read-only ? We create another stream that will update the external model >>>>>> separately. >>>>>> >>>>>> Cheers >>>>>> >>>>>> On Wed, Aug 19, 2015 at 2:05 PM, Gyula Fóra <gyf...@apache.org> >>>>>> wrote: >>>>>> >>>>>>> Hey! >>>>>>> >>>>>>> I think it is safe to say that the best approach in this case is >>>>>>> creating a co-flatmap that will receive updates on one input. The events >>>>>>> should probably be broadcasted in this case so you can check in >>>>>>> parallel. >>>>>>> >>>>>>> This approach can be used effectively with Flink's checkpoint >>>>>>> mechanism, while external model updates would be tricky to keep >>>>>>> consistent. >>>>>>> >>>>>>> Cheers, >>>>>>> Gyula >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On Wed, Aug 19, 2015 at 8:44 AM Welly Tambunan <if05...@gmail.com> >>>>>>> wrote: >>>>>>> >>>>>>>> Hi All, >>>>>>>> >>>>>>>> We have a streaming computation that required to validate the data >>>>>>>> stream against the model provided by the user. >>>>>>>> >>>>>>>> Right now what I have done is to load the model into flink operator >>>>>>>> and then validate against it. However the model can be updated and >>>>>>>> changed >>>>>>>> frequently. Fortunately we always publish this event to RabbitMQ. >>>>>>>> >>>>>>>> I think we can >>>>>>>> >>>>>>>> >>>>>>>> 1. Create RabbitMq listener for model changed event from inside >>>>>>>> the operator, then update the model if event arrived. >>>>>>>> >>>>>>>> But i think this will create race condition if not handle >>>>>>>> correctly and it seems odd to keep this >>>>>>>> >>>>>>>> 2. We can move the model into external in external memory cache >>>>>>>> storage and keep the model up to date using flink. So the operator >>>>>>>> will >>>>>>>> retrieve that from memory cache >>>>>>>> >>>>>>>> 3. Create two stream and using co operator for managing the >>>>>>>> shared state. >>>>>>>> >>>>>>>> >>>>>>>> What is your suggestion on keeping the state up to date from >>>>>>>> external event ? Is there some kind of best practice for maintaining >>>>>>>> model >>>>>>>> up to date on streaming operator ? >>>>>>>> >>>>>>>> Thanks a lot >>>>>>>> >>>>>>>> >>>>>>>> Cheers >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> Welly Tambunan >>>>>>>> Triplelands >>>>>>>> >>>>>>>> http://weltam.wordpress.com >>>>>>>> http://www.triplelands.com <http://www.triplelands.com/blog/> >>>>>>>> >>>>>>> >>>>>> >>>>>> >>>>>> -- >>>>>> Welly Tambunan >>>>>> Triplelands >>>>>> >>>>>> http://weltam.wordpress.com >>>>>> http://www.triplelands.com <http://www.triplelands.com/blog/> >>>>>> >>>>> >>>> >>>> >>>> -- >>>> Welly Tambunan >>>> Triplelands >>>> >>>> http://weltam.wordpress.com >>>> http://www.triplelands.com <http://www.triplelands.com/blog/> >>>> >>> >> >> >> -- >> Welly Tambunan >> Triplelands >> >> http://weltam.wordpress.com >> http://www.triplelands.com <http://www.triplelands.com/blog/> >> > -- Welly Tambunan Triplelands http://weltam.wordpress.com http://www.triplelands.com <http://www.triplelands.com/blog/>