ok, I'm convinced and will go with new callback object per send request.

On Mon, Oct 5, 2015 at 5:50 PM, Guozhang Wang <wangg...@gmail.com> wrote:

> I with with Ewen here. If users want to access the ProducerRecord info in
> the callback they can create their callbacks to include those info and pay
> their own costs as for object construction / etc; the RecordBatch is
> considered internal in Producer and not exposed to users by design.
>
> Guozhang
>
> On Mon, Oct 5, 2015 at 11:28 AM, Jiangjie Qin <j...@linkedin.com.invalid>
> wrote:
>
> > Gwen,
> >
> > It looks there are two requirements here:
> > 1. Know which message failed.
> > 2. Know which record batch failed. i.e. which messages fail together.
> >
> > The current callback interface can easily support (1) - user can simply
> > construct here own callback which store the message in it. Do you mean we
> > want (2) as well? RecordBatch seems an internal data structure to
> producer,
> > I am not sure what is the motivation to expose it in callback, can you
> > elaborate a little bit?
> >
> > Thanks,
> >
> > Jiangjie (Becket) Qin
> >
> > On Mon, Oct 5, 2015 at 10:20 AM, Mayuresh Gharat <
> > gharatmayures...@gmail.com
> > > wrote:
> >
> > > +1 Ewen.
> > > Currently the while creating the RecordBatch we extract the key and
> value
> > > and add it to the batch.  At a very high level, we will have to extract
> > the
> > > key and Value (minimum atleast) from each record in the RecordBatch,
> > create
> > > a wrapper with the exception,the key and the value and add it to the
> > > callback.
> > >
> > > This can be done I think.
> > >
> > > Thanks,
> > >
> > > Mayuresh
> > >
> > > On Sun, Oct 4, 2015 at 8:53 PM, Ewen Cheslack-Postava <
> e...@confluent.io
> > >
> > > wrote:
> > >
> > > > Anything from the context of the initial send request that is
> included
> > in
> > > > the callback is for convenience -- the only things you *need* to have
> > in
> > > > the callback are the result values (exception/metadata). You can
> always
> > > > capture that information when you construct the callback. A similar
> > issue
> > > > came up with ConsumerRebalanceListener in the new consumer, which
> > > > previously had the Consumer object as its first parameter.
> > > >
> > > > The obvious drawback is that this approach requires allocating a
> > separate
> > > > callback object for each Producer.send() call, unlike the
> > > > ConsumerRebalanceListener example where the Consumer is the same for
> > all
> > > > callbacks from the same consumer. I don't think this is really an
> > issue,
> > > > and in a lot of cases just works naturally by marking the
> > ProducerRecord
> > > as
> > > > final if you need it (or any other relevant data). The cost of the
> > > > allocation/GC doesn't seem substantial. I can imagine coming up with
> a
> > > > microbenchmark where the cost is relatively large, but is it ever in
> > > > practice?
> > > >
> > > > With regards to your specific proposal, I don't think the callback
> > should
> > > > include the RecordBatch. If anything it should only get the
> > > ProducerRecord.
> > > > Not only is RecordBatch internal (and in the internals package so
> it's
> > > very
> > > > clear), but I think it exposes implementation details that shouldn't
> > > > necessarily appear in the API. If we wanted to do that, we'd need
> need
> > to
> > > > carry the ProducerRecord through with the batch. Right now, if I
> recall
> > > > correctly, it is dropped during the send() since send() just extracts
> > the
> > > > data it needs as it adds it to the RecordAccumulator.
> > > >
> > > > -Ewen
> > > >
> > > >
> > > >
> > > > On Fri, Oct 2, 2015 at 9:32 PM, Gwen Shapira <g...@confluent.io>
> > wrote:
> > > >
> > > > > Hi,
> > > > >
> > > > > Currently the callback of Producer gets either Metadata (partition
> +
> > > > > offset) or Exception.
> > > > > In case of an exception, it doesn't get any information other than
> > the
> > > > > exception. Which means that if I want to write failures to a "dead
> > > letter
> > > > > queue" of some kind, I have to wait on the Future.
> > > > >
> > > > > I'd like to add RecordBatch to onComplete, so in case of errors we
> > can
> > > do
> > > > > something with those records.
> > > > >
> > > > > Questions:
> > > > > 1. Does it seem necessary to anyone else? What do all of you do
> when
> > > the
> > > > > callback receives an exception?
> > > > > 2. Any thoughts on how to add a parameter without causing
> > compatibility
> > > > > issues? I think it will require a new interface (in addition to
> > > > Callback),
> > > > > but hope there's a better way.
> > > > >
> > > > > Gwen
> > > > >
> > > >
> > > >
> > > >
> > > > --
> > > > Thanks,
> > > > Ewen
> > > >
> > >
> > >
> > >
> > > --
> > > -Regards,
> > > Mayuresh R. Gharat
> > > (862) 250-7125
> > >
> >
>
>
>
> --
> -- Guozhang
>

Reply via email to