Hi Gyula, I have another question. So if i cache something on the operator, to keep it up to date, i will always need to add and connect another stream of changes to the operator ?
Is this right for every case ? Cheers On Wed, Aug 19, 2015 at 3:21 PM, Welly Tambunan <if05...@gmail.com> wrote: > 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/> > -- Welly Tambunan Triplelands http://weltam.wordpress.com http://www.triplelands.com <http://www.triplelands.com/blog/>