Seems like we are implementing per message timers. Not aware of any log pub sub that does that expect rocketmq , not sure how performant that is. https://github.com/apache/rocketmq/blob/2b692c912d18c0f9889fd73358581bcccf37bbbe/store/src/main/java/org/apache/rocketmq/store/schedule/ScheduleMessageService.java
Seems simpler to just have delay on a topic level. The cursor for client subscriptions can make messages available after a delay. I don't know if we can achieve significant throughput with so many active timers. On Sat, Mar 2, 2019 at 2:49 AM Sijie Guo <guosi...@gmail.com> wrote: > I am trying to draw a conclusion on this email thread. > > > Maybe some way to plug to the broker some logic without > interfering with its core? > > In our business fixed delay at consumer level regardless of any producer > > configuration is a big win due to easy implementation and usage. > > Based on Ezequiel's last comment, if we are able to find a way to plug a > new "fixed delay" dispatcher without touching other dispatcher logic, is > that a good approach for the community to proceed on this direction? > > - Sijie > > > On Wed, Feb 20, 2019 at 8:26 AM 李鹏辉gmail <codelipeng...@gmail.com> wrote: > > > Sorry for hear that DLQ causes GC. > > > > Agree with discussed before, Dispatcher is a performance sensitive piece > > of code. > > If we make changes on the dispatcher, we must pay attention to memory > > overhead and blocking. > > > > I prefer fixed delayed message solution(aka delayed time level). User > > can define multi topics with deferent delay.Topic is still a FIFO model. > > > > Improve user experience by packaging client API, topics can be created > > automatically, User can customize the delay level. > > > > In our scene, This can already meet most of the needs. Currently depends > > on DLQ feature. We know from the user where the experience is not very > > good. > > User need to maintain the message expired. > > > > So, If we can avoid complexity of use and do not impose a performance > > burden > > on message dispatching. I prefer implement it on broker side(broker do > not > > need to sorting messages by time, just need to check the tail message > > can be dispatch, i don’t think this will cause dispatching performance > > problem). > > > > For more complicated delayed messages(e.g. arbitrary delayed delivery). > > I don’t think pulsar need to support such complicated scene(after we > > discussed before). > > In our scene, we have more complicated message requirement(e.g. delay > > message can be > > paused, stoped, and re-run. e.g. cron messages). > > > > However these case is not very widely used. > > > > - Penghui > > > > > > > 在 2019年2月20日,06:37,Sebastián Schepens > > <sebastian.schep...@mercadolibre.com.INVALID> 写道: > > > > > > Hi, > > > I am really not into any details of the proposed implementation, but > was > > > just wondering, has anyone had a look at how Uber implemented this in > > > Cherami? Cherami seems very similar to Pulsar, its storage system also > > > seems very similar to bookkeeper. They seem to implement delayed queues > > by > > > storing the time as part of the key in rocksdb and using sorted > > iterators, > > > could this be done in Pulsar as well? > > > > > > Cheers, > > > Sebastian > > > > > > On Tue, Feb 19, 2019 at 6:02 PM Dave Fisher <dave2w...@comcast.net> > > wrote: > > > > > >> Hi - > > >> > > >> Well, it does, but can this be implemented without building a > > delayQueue? > > >> It seems to me that a delayQueue both breaks resiliency if the broker > > goes > > >> down and would certainly add overhead. Perhaps my idea to discard > > responses > > >> that are too new and then retrieve once they are out of the delayed > > >> timeframe would be simpler? > > >> > > >> Again I am somewhat naive to the details. I’m not sure that the path > > >> through the code is kept to an absolute minimum when you have a > Consumer > > >> with a nonzero delay? > > >> > > >> Regards, > > >> Dave > > >> > > >>> On Feb 19, 2019, at 12:39 PM, Ezequiel Lovelle < > > >> ezequiellove...@gmail.com> wrote: > > >>> > > >>> Hi Dave! > > >>> > > >>>> I wonder if clients can add an optional argument to the broker call > > when > > >>> pulling events. The argument would be the amount of delay. Any > messages > > >>> younger than the delay are not returned by the broker. > > >>> > > >>> This is exactly what https://github.com/apache/pulsar/pull/3155 does > > :). > > >>> We still need to decide if we want to add this feature at client side > > or > > >>> broker side, the pull request does it on the broker. > > >>> > > >>> -- > > >>> *Ezequiel Lovelle* > > >>> > > >>> > > >>> On Tue, 19 Feb 2019 at 17:06, Dave Fisher <dave2w...@comcast.net> > > wrote: > > >>> > > >>>> Hi - > > >>>> > > >>>> My thoughts here may be completely useless but I wonder if clients > can > > >> add > > >>>> an optional argument to the broker call when pulling events. The > > >> argument > > >>>> would be the amount of delay. Any messages younger than the delay > are > > >> not > > >>>> returned by the broker. > > >>>> > > >>>> Regards, > > >>>> Dave > > >>>> > > >>>>> On Feb 19, 2019, at 11:47 AM, Ezequiel Lovelle < > > >>>> ezequiellove...@gmail.com> wrote: > > >>>>> > > >>>>>> The recent changes made to support DLQ caused major problems with > > >>>> garbage > > >>>>> collection > > >>>>> > > >>>>> If garbage collection is a big concern maybe we could add some > config > > >>>>> parameter on the broker to disable the usage of this feature and > > return > > >>>>> BrokerMetadataException in this situation, giving the power to the > > >>>>> administrator whether to offer this feature or not. > > >>>>> > > >>>>>> is it acceptable to do it at broker side? > > >>>>> > > >>>>> I think this is the big question that needs to be answered. > > >>>>> > > >>>>>> can we just have a separated dispatcher for fixed delayed > > >> subscription? > > >>>>> > > >>>>> I will try to do a completely new approach, simpler, and more > > isolated > > >>>>> from broker logic. Maybe some way to plug to the broker some logic > > >>>> without > > >>>>> interfering with its core? > > >>>>> > > >>>>> In our business fixed delay at consumer level regardless of any > > >> producer > > >>>>> configuration is a big win due to easy implementation and usage. > > >>>>> > > >>>>> -- > > >>>>> *Ezequiel Lovelle* > > >>>>> > > >>>>> > > >>>>> On Wed, 13 Feb 2019 at 23:25, Sijie Guo <guosi...@gmail.com> > wrote: > > >>>>> > > >>>>>> Agreed that dispatcher is a performance sensitive piece of code. > > Feel > > >>>> bad > > >>>>>> to hear that DLQ causes GC. Are there any issues tracking those > > items > > >>>> you > > >>>>>> guys identified with DLQ changes? > > >>>>>> > > >>>>>>> How is this different from a subscription running behind? > > >>>>>> > > >>>>>> As far as I understand form the discussion at #3155, I don't think > > >>>> there is > > >>>>>> a fundamental difference from a backlogged subscriber. > > >>>>>> The discussion point will mainly be - if a delayed subscription > can > > be > > >>>>>> implemented with a simpler approach at broker side without > changing > > >>>> other > > >>>>>> dispatcher logic, > > >>>>>> is it acceptable to do it at broker side? So we don't have to > > >>>> reimplement > > >>>>>> the same mechanism at different language clients. I think that's > the > > >>>> same > > >>>>>> tradeoff we were discussing for generic delayed messages. > > >>>>>> > > >>>>>> My thought would be - can we just have a separated dispatcher for > > >> fixed > > >>>>>> delayed subscription? The logic can be ISOLATED from other normal > > >>>>>> dispatchers. if users don't enable delayed subscription, they will > > not > > >>>>>> exercise that dispatcher. This can be a good direction to explore > > for > > >>>>>> future changes that are related to dispatchers. > > >>>>>> > > >>>>>> - Sijie > > >>>>>> > > >>>>>> > > >>>>>> On Thu, Feb 14, 2019 at 8:43 AM Joe F <joefranc...@gmail.com> > > wrote: > > >>>>>> > > >>>>>>> Delayed subscription is simpler, and probably worth doing in the > > >> broker > > >>>>>> IF > > >>>>>>> done right. > > >>>>>>> > > >>>>>>> How is this different from a subscription running behind? Why > does > > >>>>>>> supporting that require this complex a change in the dispatcher, > > when > > >>>> we > > >>>>>>> already support backlogged subscribers? > > >>>>>>> > > >>>>>>> I am extremely wary of changes in the dispatcher. The recent > > changes > > >>>> made > > >>>>>>> to support DLQ caused major problems with garbage collection, > > broker > > >>>>>>> failure and service interruptions for us. Even though we ARE NOT > > >> using > > >>>>>> the > > >>>>>>> DLQ feature. Not a pleasant experience. > > >>>>>>> > > >>>>>>> This is a very performance sensitive piece of code, and it should > > be > > >>>>>>> treated as such. > > >>>>>>> > > >>>>>>> Joe > > >>>>>>> > > >>>>>>> > > >>>>>>> > > >>>>>>> On Wed, Feb 13, 2019 at 3:58 PM Sijie Guo <guosi...@gmail.com> > > >> wrote: > > >>>>>>> > > >>>>>>>> Hi all, > > >>>>>>>> > > >>>>>>>> I am going to wrap up the discussion regarding delayed delivery > > use > > >>>>>>> cases. > > >>>>>>>> > > >>>>>>>> For arbitrary delayed delivery, there are a few +1s to doing > > PIP-26 > > >> in > > >>>>>>>> functions. I am assuming that we will go down this path, unless > > >> there > > >>>>>> are > > >>>>>>>> other proposals. > > >>>>>>>> > > >>>>>>>> However there is a use case Lovelle pointed out about "Fixed > > Delayed > > >>>>>>>> Message". More specifically it is > > >>>>>>>> https://github.com/apache/pulsar/pull/3155 > > >>>>>>>> (The caption in #3155 is a bit misleading). IMO it is a "delayed > > >>>>>>>> subscription", basically all messages in the subscription is > > delayed > > >>>> to > > >>>>>>>> dispatch in a given time interval. The consensus of this feature > > is > > >>>> not > > >>>>>>> yet > > >>>>>>>> achieved. Basically, there will be two approaches for this: > > >>>>>>>> > > >>>>>>>> a) DONT treat "fixed delayed message" as a different case. Just > > use > > >>>> the > > >>>>>>>> same approach as in PIP-26. > > >>>>>>>> b) treat "fixed delayed message" as a different case, e.g. we > can > > >>>>>> better > > >>>>>>>> call it "delayed subscription" or whatever can distinguish it > from > > >>>>>>> general > > >>>>>>>> arbitrary delayed delivery. Use the approach proposed/discussed > in > > >>>>>> #3155. > > >>>>>>>> > > >>>>>>>> I would like the community to discuss this and also come to an > > >>>>>> agreement. > > >>>>>>>> So Lovelle can move forward with the approach agreed by the > > >> community. > > >>>>>>>> > > >>>>>>>> Thanks, > > >>>>>>>> Sijie > > >>>>>>>> > > >>>>>>>> On Tue, Jan 29, 2019 at 6:30 AM Ezequiel Lovelle < > > >>>>>>>> ezequiellove...@gmail.com> > > >>>>>>>> wrote: > > >>>>>>>> > > >>>>>>>>> "I agree, but that is *not what #3155 tries to achieve." > > >>>>>>>>> > > >>>>>>>>> This typo made this phrase nonsense, sorry! > > >>>>>>>>> > > >>>>>>>>> On Mon, 28 Jan 2019, 16:44 Ezequiel Lovelle < > > >>>>>> ezequiellove...@gmail.com > > >>>>>>>>> wrote: > > >>>>>>>>> > > >>>>>>>>>>> What exactly is the delayed delivery use case? > > >>>>>>>>>> > > >>>>>>>>>> This is helpful on systems relaying on pulsar for persistent > > >>>>>>> guarantees > > >>>>>>>>>> and using it for synchronization or some sort of checks, but > on > > >>>>>> such > > >>>>>>>>>> systems is common to have some overhead committing data on > > >>>>>> persistent > > >>>>>>>>>> storage maybe due to buffered mechanism or distributing the > data > > >>>>>>> across > > >>>>>>>>>> the network before being available. > > >>>>>>>>>> > > >>>>>>>>>> Surely would be more use cases I don't came across right now. > > >>>>>>>>>> > > >>>>>>>>>>> Random insertion and deletion is not what FIFO queues like > > Pulsar > > >>>>>>> are > > >>>>>>>>>> designed for. > > >>>>>>>>>> > > >>>>>>>>>> I agree, but that is now what #3155 tries to achieve. #3155 is > > >>>>>> just a > > >>>>>>>>>> fixed delay for all message in a consumer, that's the reason > > that > > >>>>>> the > > >>>>>>>>>> implementation of #3155 is quite trivial. > > >>>>>>>>>> > > >>>>>>>>>> +1 from me for doing PIP-26 in functions. > > >>>>>>>>>> > > >>>>>>>>>> -- > > >>>>>>>>>> *Ezequiel Lovelle* > > >>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>>> On Sat, 26 Jan 2019 at 09:57, Yuva raj <uvar...@gmail.com> > > wrote: > > >>>>>>>>>> > > >>>>>>>>>>> Considering the way pulsar is built +1 for doing PIP-26 in > > >>>>>>> functions. > > >>>>>>>> I > > >>>>>>>>> am > > >>>>>>>>>>> more of thinking in a way like publish it pulsar we will make > > it > > >>>>>>>>> available > > >>>>>>>>>>> in a different queuing system if you need priority and delay > > >>>>>>> messages > > >>>>>>>>>>> support. Pulsar functions would go enough for this kind of > use > > >>>>>>> cases. > > >>>>>>>>>>> > > >>>>>>>>>>> On Fri, 25 Jan 2019 at 22:29, Ivan Kelly <iv...@apache.org> > > >>>>>> wrote: > > >>>>>>>>>>> > > >>>>>>>>>>>>> Correct. PIP-26 can be implemented in Functions. I believe > > the > > >>>>>>>> last > > >>>>>>>>>>>>> discussion in PIP-26 thread kind of agree on functions > > >>>>>> approach. > > >>>>>>>>>>>>> If the community is okay with PIP-26 in functions, I think > > >>>>>> that > > >>>>>>> is > > >>>>>>>>>>>> probably > > >>>>>>>>>>>>> a good approach to start. > > >>>>>>>>>>>> > > >>>>>>>>>>>> +1 for doing it in functions. > > >>>>>>>>>>>> > > >>>>>>>>>>>> -Ivan > > >>>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> > > >>>>>>>>>>> -- > > >>>>>>>>>>> *Thanks* > > >>>>>>>>>>> > > >>>>>>>>>>> *Yuvaraj L* > > >>>>>>>>>>> > > >>>>>>>>>> > > >>>>>>>>> > > >>>>>>>> > > >>>>>>> > > >>>>>> > > >>>> > > >>>> > > >> > > >> > > > > > -- -Ali