Yeah guys, I'd like to second that. I'd really really love to get the
quality of these to the point where we could broadly solicit user input and
use them as a permanent document of the alternatives and rationale.

I know it is a little painful to have process, but I think we all saw what
happened to the previous clients as public interfaces so I really really
really want us to just be incredibly thoughtful and disciplined as we make
changes. I think we all want to avoid another "client rewrite".

To second Joe's question in a more specific way, I think an alternative I
don't see considered to give close() a bounded time is just to enforce the
request time on the client side, which will cause all requests to be failed
after the request timeout expires. This was the same behavior as for flush.
In the case where the user just wants to ensure close doesn't block forever
I think that may be sufficient?

So one alternative might be to just do that request timeout feature and add
a new producer config that is something like
  abort.on.failure=false
which causes the producer to hard exit if it can't send a request. Which I
think is closer to what you want, with this just being a way to implement
that behavior.

I'm not sure if this is better or worse, but we should be sure before we
make the change.

I also have a concern about
  producer.close(0, TimeUnit.MILLISECONDS)
not meaning close with a timeout of 0 ms.

I realize this exists in other java apis, but it is so confusing it even
confused us into having that recent producer bug because of course all the
other numbers mean "wait that long".

I'd propose
  close()--block until all completed
  close(0, TimeUnit.MILLISECONDS)--block for 0 ms
  close(5, TimeUnit.MILLISECONDS)--block for 5 ms
  close(-1, TimeUnit.MILLISECONDS)--error because blocking for negative ms
would mean completing in the past :-)

-Jay

On Wed, Mar 11, 2015 at 8:31 PM, Joe Stein <joe.st...@stealth.ly> wrote:

> Could the KIP confluence please have updated the discussion thread link,
> thanks... could you also remove the template boilerplate at the top "*This
> page is meant as a template ..*" so we can capture it for the release
> cleanly.
>
> Also I don't really/fully understand how this is different than
> flush(time); close() and why close has its own timeout also?
>
> Lastly, what is the forceClose flag? This isn't documented in the public
> interface so it isn't clear how to completely use the feature just by
> reading the KIP.
>
> ~ Joe Stein
> - - - - - - - - - - - - - - - - -
>
>   http://www.stealth.ly
> - - - - - - - - - - - - - - - - -
>
> On Wed, Mar 11, 2015 at 11:24 PM, Guozhang Wang <wangg...@gmail.com>
> wrote:
>
> > +1 (binding)
> >
> > On Wed, Mar 11, 2015 at 8:10 PM, Jiangjie Qin <j...@linkedin.com.invalid
> >
> > wrote:
> >
> > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-15+-+Add+a+close+method+with+a+timeout+in+the+producer
> > >
> > >
> >
> >
> > --
> > -- Guozhang
> >
>

Reply via email to