Hi Jun ,

In the case mentioned below , in 0.7 if send (in SyncProducer) call is
complete without any exception does that mean message
has successfully reached the broker .

from the code i see this
  private def send(send: BoundedByteBufferSend) {
..............

      try {
        send.writeCompletely(channel)
      } catch {
        case e : java.io.IOException =>
          // no way to tell if write succeeded. Disconnect and re-throw
exception to let client handle retry
          disconnect()
          throw e
        case e2 =>
          throw e2
      }

Is there a way to know if the last offset has changed or not from Producer
side to make sure we do not send the new message again?

-rks

On Mon, Jun 25, 2012 at 8:52 PM, Jun Rao <jun...@gmail.com> wrote:

> Tarun,
>
> In 0.7, there is no producer side ack.
>
> In 0.8, sync producer will wait for an ack and is blocking. If the ack is
> lost because a broker is down, sync producer will timeout and it's up to
> the caller to decide what to do. If the caller chooses to resend, it's
> possible for duplicated messages to show up in the broker.
>
> Thanks,
>
> Jun
>
> On Mon, Jun 25, 2012 at 8:12 AM, Tarun Kumar <agrawal.taru...@gmail.com
> >wrote:
>
> > Hi,
> >
> > I have a couple of questions related to Sync Producer.
> >
> > 1. From what i know (please correct me if i am wrong), Sync producer send
> > is a blocking call. Until acknowledgement is received from broker, next
> > message is not sent by producer.
> >
> > 2. what if ack is lost. Is there any kind of timeout till when producer
> > waits for ack. If yes, does it try to resend same message?
> > If yes, duplicate message might reach to broker (due to previous
> message's
> > ack timeout). How does kafka avoids that?
> >
> > 3. What are different possibilities of duplicate messages being stored at
> > broker?
> >
> > Thanks,
> > Tarun
> >
>

Reply via email to