If you have a dedicated topicPartition for delayed messages, you can pause <https://static.javadoc.io/org.apache.kafka/kafka-clients/2.2.0/org/apache/kafka/clients/consumer/KafkaConsumer.html#pause-java.util.Collection-> that partition for 15 min to avoid blocking the polling thread.
On Thu, May 23, 2019 at 12:16 PM Adrien Ruffie <adrye...@gmail.com> wrote: > Thank a lot ! That's what I thought, out of the box ... but it's clearly > logic > I will take your solution in the consumer, but I will refactor my Java code > part, because, it's a spring message listener with annotation. So, I > think, I couldn't do it simply with spring. > > thank again, > > best regards > Adrian > > Le mer. 22 mai 2019 à 23:23, Jonathan Santilli <jonathansanti...@gmail.com > > > a écrit : > > > Maybe you could: > > > > 1.- Disable auto.commit on the consumer side. > > 2.- Consume messages, one by one in each poll. > > 3.- Check the record timestamp > > a.- If the timestamp is >= desired window (time slot), process it and > > commit offset > > b.- If the timestamp is < desired window (time slot), do not process > it > > and do not commit offset, in the next poll the consumer will get the > > message again. > > > > Hope that helps, > > -- > > Jonathan > > > > > > > > > > On Wed, May 22, 2019 at 9:25 PM Peter Bukowinski <pmb...@gmail.com> > wrote: > > > > > I’d suggest using separate topics for messages that require delay and > > ones > > > that do not. If you are limited to a single topic, then I’d use some > > other > > > metadata to differentiate messages that require delayed processing from > > > ones that do not. If you do not want to block the polling thread, > you’ll > > > need to route messages into a buffer of some sort to process them > > > asynchronously. > > > > > > — > > > Peter > > > > > > > On May 22, 2019, at 1:10 PM, Pavel Molchanov < > > > pavel.molcha...@infodesk.com> wrote: > > > > > > > > This solution will block receiving polling thread for 15 minutes. Not > > > good. > > > > > > > > What should we do if a topic has messages that should be processed > > > > immediately and delayed messages at the same time? > > > > > > > > *Pavel Molchanov* > > > > > > > > > > > > > > > > On Wed, May 22, 2019 at 2:41 PM Peter Bukowinski <pmb...@gmail.com> > > > wrote: > > > > > > > >> There is no out-of-the-box way to tell a consumer to not consume an > > > offset > > > >> until it is x minutes old. Your best bet is encode the creation time > > > into > > > >> the message themselves and add some processing logic into your > > consumer. > > > >> Let’s assume your topic has a single partition or your partitions > are > > > keyed > > > >> to guarantee message order. Your consumer could work like this in > > > >> pseudo-code: > > > >> > > > >> consumer loop: > > > >> consume message > > > >> if (current time - message.timestamp) >= 15 minutes > > > >> process message > > > >> else > > > >> sleep 15 minutes - (current time - message.timestamp) > > > >> process message > > > >> > > > >> Since the messages enter the topic in the order they were published, > > > >> pausing on the current offset should never cause a bottleneck on the > > > later > > > >> messages. If you fall behind, the greater than or equal to logic > will > > > >> prevent your consumer from pausing until it has caught up to your > > > desired > > > >> delay. > > > >> > > > >> This is a simplified scenario that may or may not map to your > > production > > > >> use case, though. > > > >> > > > >> — > > > >> Peter > > > >> > > > >> > > > >>> On May 22, 2019, at 11:12 AM, Pavel Molchanov < > > > >> pavel.molcha...@infodesk.com> wrote: > > > >>> > > > >>> Andrien, > > > >>> > > > >>> Thank you for asking this question! I have the same problem and > > wanted > > > to > > > >>> ask the same question. I hope that someone will answer soon. > > > >>> > > > >>> *Pavel Molchanov* > > > >>> > > > >>> > > > >>> > > > >>> On Wed, May 22, 2019 at 9:54 AM Adrien Ruffie <adrye...@gmail.com> > > > >> wrote: > > > >>> > > > >>>> Hello all, > > > >>>> > > > >>>> I have a specific need and I don't know if a generic solution > exist > > > ... > > > >>>> maybe you can enlighten me > > > >>>> > > > >>>> I need to delay each sended message about 15 mins. > > > >>>> Example > > > >>>> Message with offset 1 created at 2:41PM by the producer and > received > > > by > > > >> the > > > >>>> consumer at 2:56PM > > > >>>> Message with offset 2 created at 2:46PM by the producer and > received > > > by > > > >> the > > > >>>> consumer at 3:01PM > > > >>>> Message with offset 3 created at 2:46PM by the producer and > received > > > by > > > >> the > > > >>>> consumer at 3:01PM > > > >>>> Message with offset 4 created at 3:01PM by the producer and > received > > > by > > > >> the > > > >>>> consumer at 3:16PM > > > >>>> and so forth ... > > > >>>> > > > >>>> any option, mechanism, producer/consumer implementations already > > > exist ? > > > >>>> > > > >>>> Thank a lot and best regards > > > >>>> > > > >>>> Adrian > > > >>>> > > > >> > > > >> > > > > > > > > > > -- > > Santilli Jonathan > > >