Re: New Producer Async - Metadata Fetch Timeout

2015-05-13 Thread Mohit Gupta
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


Re: New Producer Async - Metadata Fetch Timeout

2015-05-13 Thread Jiangjie Qin
Isn’t the producer part of the application? The metadata is stored in
memory. If the application rebooted (process restarted), all the metadata
will be gone.

Jiangjie (Becket) Qin

On 5/13/15, 9:54 AM, Mohit Gupta success.mohit.gu...@gmail.com wrote:

I meant the producer. ( i.e. application using the producer api to push
messages into kafka ) .

On Wed, May 13, 2015 at 10:20 PM, Mayuresh Gharat 
gharatmayures...@gmail.com wrote:

 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.

Re: New Producer Async - Metadata Fetch Timeout

2015-05-13 Thread Mayuresh Gharat
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 

Re: New Producer Async - Metadata Fetch Timeout

2015-05-13 Thread Mohit Gupta
I meant the producer. ( i.e. application using the producer api to push
messages into kafka ) .

On Wed, May 13, 2015 at 10:20 PM, Mayuresh Gharat 
gharatmayures...@gmail.com wrote:

 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
 

Re: New Producer Async - Metadata Fetch Timeout

2015-05-12 Thread Mayuresh Gharat
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


Re: New Producer Async - Metadata Fetch Timeout

2015-05-12 Thread Mohit Gupta
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


Re: New Producer Async - Metadata Fetch Timeout

2015-05-12 Thread Jiangjie Qin
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



Re: New Producer Async - Metadata Fetch Timeout

2015-05-12 Thread Jiangjie Qin
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