Thanks Igal for the detailed explanantion. I know that this was only a demo, I just wanted to reason a bit on the pros and cons of sending data to an UI from Flink.
Best, Flavio Il Ven 1 Nov 2019, 12:21 Igal Shilman <i...@ververica.com> ha scritto: > Hi Flavio, let me try to clarify: > > The intention of this example is to demonstrate how > different entities (drivers, passengers, etc') participates in a protocol > (ride matching). For that we have the stateful functions application, and a > standalone java application that just generates the events to trigger the > simulation (i.e. a passenger requests a ride would be an event that the > simulator emits). > The visualization aspect of this example is not a part of what we are > trying to demonstrate but rather, an out-of-band peek into the live system > (websocket that duplicates the events directly to the UI) which we thought > is a nice addition to the example that visualizes how cars are moving on > the grid :-) > > If your goal is to create a scalable visualization of car locations, then > I guess your suggestion to break the grid into distinct geo-regions can > work. For that you would need: > 1. An additional egress backed by a Kafka topic. > 2. Modify the driver function to send location changes to that egress, > where you'd use the region id (geohash with a resolution to your liking) as > key [1]. > 3. At the consuming side subscribe to the partition that holds the region > of interest. > > But, realistically speaking for this kind of a visualization you would be > better off consuming from the locations update topic (from-driver topic) > and populating an optimized geo-indexed store, > and querying it directly. > > I hope this clarifies things, > Igal > > [1] > https://github.com/ververica/stateful-functions/blob/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-functions/src/main/java/com/ververica/statefun/examples/ridesharing/KafkaSpecs.java#L121 > > On Thu, Oct 31, 2019 at 6:21 PM Flavio Pompermaier <pomperma...@okkam.it> > wrote: > >> Thanks Igal, this is more or less what I was expecting..this implies that >> ALL events are received on the UI side. >> I was concerned about the tradeoffs of this choice: when I zoom on the >> map I could simply ignore messages outside the boundaries (but I still >> spend many cpu resource in the reading of useless messages). >> >> In the case of a worldwide company (eg uber or simolar) it's probably better >> to create a topic per geographical arean..but also in this case then the UI >> should know when to attach or detach from queue topics when it reach a >> section of the map served by different topics..in another case I could just >> have too many events also in the single map section (let's think about some >> big city with many user). >> >> Is there any talk at FF ir someone else that faced those issues too? >> >> Il Gio 31 Ott 2019, 17:44 Igal Shilman <i...@ververica.com> ha scritto: >> >>> For that particular example, the simulator [1] is responsible for >>> simulating physical drivers and passengers that interact with their >>> corresponding >>> stateful functions [2]. >>> The interaction between the simulator and the stateful functions is >>> happening via four Kafka topics: >>> * to-driver - messages that are sent from the physical drivers (the >>> simulator [1]) to the stateful functions. The messages always carry a >>> driver-id which acts as a routing key (I think that this is what you mean >>> by correlation id) to a specific driver stateful function (FnDriver) >>> * from-driver - messages that are sent from a stateful function with a >>> specific driver id to the simulator >>> * to-passenger - symmetric to to-driver >>> * from-passenger - symmetric to from-driver. >>> The ingress and egress definition are specified here [3], and you may >>> want to checkout how to router is defined as well [4][5]. >>> >>> In addition the simulator is also feeding the UI directly by duplicating >>> the messages to a web socket (see [6]) >>> >>> I hope this clarifies the examples. >>> >>> Igal. >>> >>> [1] >>> https://github.com/ververica/stateful-functions/tree/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-simulator/src/main/java/com/ververica/statefun/examples/ridesharing/simulator >>> [2] >>> https://github.com/ververica/stateful-functions/tree/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-functions >>> [3] >>> https://github.com/ververica/stateful-functions/blob/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-functions/src/main/java/com/ververica/statefun/examples/ridesharing/KafkaSpecs.java#L43 >>> [4] >>> https://github.com/ververica/stateful-functions/blob/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-functions/src/main/java/com/ververica/statefun/examples/ridesharing/Module.java#L33 >>> [5] >>> https://github.com/ververica/stateful-functions/blob/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-functions/src/main/java/com/ververica/statefun/examples/ridesharing/InboundDriverRouter.java#L26 >>> [6] >>> https://github.com/ververica/stateful-functions/blob/master/stateful-functions-examples/stateful-functions-ridesharing-example/stateful-functions-ridesharing-example-simulator/src/main/java/com/ververica/statefun/examples/ridesharing/simulator/simulation/Driver.java#L70 >>> >>> On Thu, Oct 31, 2019 at 4:15 PM Flavio Pompermaier <pomperma...@okkam.it> >>> wrote: >>> >>>> Yes, I'm interested in how to read data from a UI..which egress should >>>> I use? If we use a kafka queue, how to filter data received in the topic? >>>> Should I use a correlation id or use a new topic per user? >>>> >>>> Il Gio 31 Ott 2019, 16:08 Igal Shilman <i...@ververica.com> ha scritto: >>>> >>>>> Hi Flavio, >>>>> >>>>> We haven't included the UI source code just yet, we've only used it >>>>> for demos and talks. >>>>> >>>>> The reason is that (1) we didn't put a lot of effort and time there >>>>> (2) didn't check the time to go through the individual dependencies and >>>>> licences. >>>>> But we will add that very soon. >>>>> >>>>> Would having the UI code there would improve your understanding? or is >>>>> there another reason? >>>>> >>>>> Thanks, >>>>> Igal >>>>> >>>>> On Thu, Oct 31, 2019 at 5:44 AM Flavio Pompermaier < >>>>> pomperma...@okkam.it> wrote: >>>>> >>>>>> Hi Vino, >>>>>> I already checked that code but I can't find the UI part :( >>>>>> >>>>>> On Thu, Oct 31, 2019 at 12:32 PM vino yang <yanghua1...@gmail.com> >>>>>> wrote: >>>>>> >>>>>>> Hi Flavio, >>>>>>> >>>>>>> Please see this link.[1] >>>>>>> >>>>>>> Best, >>>>>>> Vino >>>>>>> >>>>>>> [1]: >>>>>>> https://github.com/ververica/stateful-functions/tree/master/stateful-functions-examples/stateful-functions-ridesharing-example >>>>>>> >>>>>>> Flavio Pompermaier <pomperma...@okkam.it> 于2019年10月31日周四 下午4:53写道: >>>>>>> >>>>>>>> Hi to all, >>>>>>>> yould it be possible to provide also the source code of the UI part >>>>>>>> of the ride sharing example? It would be interesting to me how the UI >>>>>>>> is >>>>>>>> reading the data from the Kafka egress. >>>>>>>> >>>>>>>> Best, >>>>>>>> Flavio >>>>>>>> >>>>>>> >>>>>>