By application rebooting, do you mean you bounce the brokers?

Thanks,

Mayuresh

On Wed, May 13, 2015 at 4:06 AM, Mohit Gupta <success.mohit.gu...@gmail.com>
wrote:

> Thanks Jiangjie. This is helpful.
>
> Adding to what you have mentioned, I can think of one more scenario which
> may not be very rare.
> Say, the application is rebooted and the Kafka brokers registered in the
> producer are not reachable ( could be due to network issues or those
> brokers are actually down ).  Since, no metadata is available the send will
> block. Right?
>
> On Wed, May 13, 2015 at 10:51 AM, Jiangjie Qin <j...@linkedin.com.invalid>
> wrote:
>
> >
> > Application will not block on each metadata refresh or metadata is
> > expired.
> > Application will only be blocked when
> > 1. It sends the first message to a topic (only for that single message),
> or
> > 2. The topic has been deleted from broker thus refreshed metadata loses
> > the topic info (which is pretty rare).
> >
> > So I think the async here might mean a little bit different. It means
> when
> > you send first message to a topic, you wait till you know the topic
> exist,
> > after that point it is async.
> > It is very low chance that your application will block on send. If it is
> > then something probably really went wrong and needs immediate attention.
> >
> > Thanks.
> >
> > Jiangjie (Becket) Qin
> >
> > On 5/12/15, 5:08 PM, "Rendy Bambang Junior" <rendy.b.jun...@gmail.com>
> > wrote:
> >
> > >Thank you for the clarification.
> > >
> > >I think I agree with Mohit. Sometime blocking on logging is not
> acceptable
> > >by nature of application who uses kafka.
> > >
> > >Yes it is not blocking when metadata is still available. But application
> > >will be blocked once metada is expired.
> > >
> > >It might be handled by application, by implementing async call when do
> > >send() and manage buffer and async timeout internally, but it makes
> async
> > >feature in kafka producer has less meaning.
> > >
> > >Sorry if my understanding is incorrect.
> > >
> > >Rendy
> > >On May 13, 2015 6:59 AM, "Jiangjie Qin" <j...@linkedin.com.invalid>
> > wrote:
> > >
> > >> Send() will only block if the metadata is *not available* for the
> topic.
> > >> It won't block if metadata there is stale. The metadata refresh is
> async
> > >> to send(). However, if you send the message to a topic for the first
> > >>time,
> > >> send() will trigger a metadata refresh and block until it has metadata
> > >>for
> > >> that topic.
> > >>
> > >> Jiangjie (Becket) Qin
> > >>
> > >> On 5/12/15, 12:58 PM, "Magnus Edenhill" <mag...@edenhill.se> wrote:
> > >>
> > >> >I completely agree with Mohit, an application should not have to know
> > >>or
> > >> >care about
> > >> >producer implementation internals.
> > >> >Given a message and its delivery constraints (produce retry count and
> > >> >timeout) the producer
> > >> >should hide any temporal failures until the message is succesfully
> > >> >delivered, a permanent
> > >> >error is encountered or the constraints are hit.
> > >> >This should also include internal start up sequencing, such as
> metadata
> > >> >retrieval.
> > >> >
> > >> >
> > >> >
> > >> >2015-05-12 21:22 GMT+02:00 Mohit Gupta <
> success.mohit.gu...@gmail.com
> > >:
> > >> >
> > >> >> I could not follow the reasoning behind blocking the send method if
> > >>the
> > >> >> metadata is not up-to-date. Though, I see that it as per design, it
> > >> >> requires the metadata to batch the message into appropriate
> > >> >>topicPartition
> > >> >> queue. Also, if the metadata could not be updated in the specified
> > >> >> interval, it throws an exception and the message is not queued to
> be
> > >> >> retried once the brokers are up.
> > >> >>
> > >> >> Should it not be that messages are buffered in another queue (
> up-to
> > >>a
> > >> >> limit ) if the brokers are down and retried later?
> > >> >> Is it not a general use case to require producer to be asynchronous
> > >>in
> > >> >>all
> > >> >> the scenarios?
> > >> >>
> > >> >>
> > >> >> On Tue, May 12, 2015 at 10:54 PM, Mayuresh Gharat <
> > >> >> gharatmayures...@gmail.com> wrote:
> > >> >>
> > >> >> > The way it works I suppose is that, the producer will do
> > >> >>fetchMetadata,
> > >> >> if
> > >> >> > the last fetched metadata is stale (the refresh interval has
> > >>expired)
> > >> >>or
> > >> >> if
> > >> >> > it is not able to send data to a particular broker in its current
> > >> >> metadata
> > >> >> > (This might happen in some cases like if the leader moves).
> > >> >> >
> > >> >> > It cannot produce without having the right metadata.
> > >> >> >
> > >> >> > Thanks,
> > >> >> >
> > >> >> > Mayuresh
> > >> >> >
> > >> >> > On Tue, May 12, 2015 at 10:09 AM, Jiangjie Qin
> > >> >><j...@linkedin.com.invalid
> > >> >> >
> > >> >> > wrote:
> > >> >> >
> > >> >> > > That¹s right. Send() will first try to get metadata of a topic,
> > >>that
> > >> >> is a
> > >> >> > > blocking operation.
> > >> >> > >
> > >> >> > > On 5/12/15, 2:48 AM, "Rendy Bambang Junior"
> > >> >><rendy.b.jun...@gmail.com>
> > >> >> > > wrote:
> > >> >> > >
> > >> >> > > >Hi, sorry if my understanding is incorrect.
> > >> >> > > >
> > >> >> > > >I am integrating kafka producer with application, when i try
> to
> > >> >> shutdown
> > >> >> > > >all kafka broker (preparing for prod env) I notice that 'send'
> > >> >>method
> > >> >> is
> > >> >> > > >blocking.
> > >> >> > > >
> > >> >> > > >Is new producer fetch metadata not async?
> > >> >> > > >
> > >> >> > > >Rendy
> > >> >> > >
> > >> >> > >
> > >> >> >
> > >> >> >
> > >> >> > --
> > >> >> > -Regards,
> > >> >> > Mayuresh R. Gharat
> > >> >> > (862) 250-7125
> > >> >> >
> > >> >>
> > >> >>
> > >> >>
> > >> >> --
> > >> >> Best Regards,
> > >> >>
> > >> >> Mohit Gupta
> > >> >>
> > >>
> > >>
> >
> >
>
>
> --
> Best Regards,
>
> Mohit Gupta
>



-- 
-Regards,
Mayuresh R. Gharat
(862) 250-7125

Reply via email to