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 > > >