3) I think this is fine.
4) Hmm, error-message-only may NOT be better than blocking, as with the
code written with close(>=0), it will likely to just pollute the logs with
repeating errors until someone gets notified. How about
error-message-and-close(-1), i.e. record the error and force shutdown?

On Thu, Mar 12, 2015 at 11:50 AM, Jiangjie Qin <j...@linkedin.com.invalid>
wrote:

> Hey Guozhang,
>
> Thanks for the comments. I updated the page as suggested.
> For 3), that’s right, I put this in java doc. Do you think we need to
> reject value other than -1?
> For 4), I think user will notice this easily because the thread will block
> and producer is not going to shutdown. About using close(-1) quietly in
> sender thread when close() is called, my concern is that user might not be
> aware of that. Maybe we can put an error messages if user call close() in
> sender thread?
>
> Thanks,
>
> Jiangjie (Becket) Qin
>
> On 3/12/15, 5:13 AM, "Guozhang Wang" <wangg...@gmail.com> wrote:
>
> >Hi Becket,
> >
> >Some comments on the wiki page:
> >
> >1. There are a few typos, for example "multivations", "wiithin".
> >
> >2. I think the main motivation could just be "current close() needs to
> >block on flushing all buffered data, however there are scenarios in which
> >producers would like to close without blocking on flushing data, or even
> >close immediately and make sure any buffered data are dropped instead of
> >sending out." You can probably give some examples for such scenarios.
> >
> >3. close(-1, TimeUnit.MILLISECONDS) => from the implementation it seems
> >any
> >negative value has the same semantics.
> >
> >4. In sender thread only close(-1, TimeUnit.MILLISECONDS) should be called
> >=> this is not programmatically enforced. Shall we just try to enforce it
> >via, for example, checking if caller thread is the IO thread, and if yes
> >just use close(-1)?
> >
> >5. Proposed Changes => it seems you only talked about the close(-1) case,
> >how about close(>=0)?
> >
> >Guozhang
> >
> >On Thu, Mar 12, 2015 at 1:49 AM, Jiangjie Qin <j...@linkedin.com.invalid>
> >wrote:
> >
> >> Hey Joe & Jay,
> >>
> >> Thanks for the comments on the voting thread. Since it seems we probably
> >> will have more discussion on this, I am just replying from the
> >>discussion
> >> thread here.
> >> I’ve updated the KIP page to make it less like half-baked, apologize for
> >> the rush...
> >>
> >> The contract in current KIP is:
> >>   1. close() - wait until all requests either are sent or reach request
> >> timeout.
> >>   2. close(-1, TimeUnit.MILLISECONDS) - close immediately
> >>   3. close(0, TimeUnit.MILLISECONDS) - equivalent to close(), i.e. Wait
> >> until all requests are sent or reach request timeout
> >>   4. close(5, TimeUnit.MILLISECONDS) - try the best to finish sending
> >>in 5
> >> milliseconds, if something went wrong, just shutdown the producer
> >>anyway,
> >> my callback will handle the failures.
> >>
> >> About how we define what timeout value stands for, I actually struggled
> >>a
> >> little bit when wrote the patch. Intuitively, close(0) should mean
> >> immediately, however it seems that all the existing java class have this
> >> convention of timeout=0 means no timeout or never timeout
> >>(Thread.join(0),
> >> Object.wait(0), etc.) So here the dilemma is either we follow the
> >> intuition or we follow the convention. What I chose is to follow the
> >> convention but document the interface to let user be aware of the usage.
> >> The reason is that I think producer.close() is a public interface so it
> >> might be better to follow java convention. Whereas selector is not a
> >> public interface that used by user, so as long as it makes sense to us,
> >>it
> >> is less a problem to be different from java convention. That said since
> >> consumer.poll(timeout) is also a public interface, I think it also makes
> >> sense to make producer.close() to have the same definition of
> >> consumer.poll(timeout).
> >>
> >> The main argument for keeping a timeout in close would be separating the
> >> close timeout from request timeout, which probably makes sense. I would
> >> guess typically the request timeout would be long (e.g. 60 seconds)
> >> because we might want to consider retries with back off time. If we have
> >> multiple batches in accumulator, in worst case that could take up to
> >> several minutes to complete all the requests. But when we close a
> >> producer, we might not want to wait for that long as it might cause some
> >> other problem like deployment tool timeout.
> >>
> >> There is also a subtle difference between close(timeout) and
> >> flush(timeout). The only purpose for flush() is to write data to the
> >> broker, so it makes perfect sense to wait until request timeout. I think
> >> that is why flush(timeout) looks strange. On the other hand, the top
> >> priority for close() is to close the producer rather than flush() data,
> >>so
> >> close(timeout) gives guarantee on bounded waiting for its main job.
> >>
> >> Sorry for the confusion about forceClose flag. It is not a public
> >> interface. I mentioned it in Proposed Changes section which I thought
> >>was
> >> supposed to provide implementation details.
> >>
> >> Thanks again for all the comments and suggestions!
> >>
> >> Jiangjie (Becket) Qin
> >>
> >> On 3/10/15, 8:57 PM, "Jiangjie Qin" <j...@linkedin.com> wrote:
> >>
> >> >The KIP page has been updated per Jay¹s comments.
> >> >I¹d like to initiate the voting process if no further comments are
> >> >received by tomorrow.
> >> >
> >> >Jiangjie (Becket) Qin
> >> >
> >> >On 3/8/15, 9:45 AM, "Jay Kreps" <jay.kr...@gmail.com> wrote:
> >> >
> >> >>Hey Jiangjie,
> >> >>
> >> >>Can you capture the full motivation and use cases for the feature?
> >>This
> >> >>mentions your interest in having a way of aborting from inside the
> >> >>Callback. But it doesn't really explain that usage or why other people
> >> >>would want to do that. It also doesn't list the primary use case for
> >> >>having
> >> >>close with a bounded timeout which was to avoid blocking too long on
> >> >>shutdown.
> >> >>
> >> >>-Jay
> >> >>
> >> >>
> >> >>
> >> >>On Sat, Mar 7, 2015 at 12:25 PM, Jiangjie Qin
> >><j...@linkedin.com.invalid
> >> >
> >> >>wrote:
> >> >>
> >> >>> Hi,
> >> >>>
> >> >>> I just created a KIP for adding a close(timeout) to new producer.
> >>Most
> >> >>>of
> >> >>> the previous discussions are in KAFKA-1660 where Parth Brahmbhatt
> >>has
> >> >>> already done a lot of work.
> >> >>> Since this is an interface change so we are going through the KIP
> >> >>>process.
> >> >>> Here is the KIP link:
> >> >>>
> >> >>>
> >>
> https://cwiki.apache.org/confluence/pages/viewpage.action?pageId=5373978
> >> >>>2
> >> >>>
> >> >>> Thanks.
> >> >>>
> >> >>> Jiangjie (Becket) Qin
> >> >>>
> >> >
> >>
> >>
> >
> >
> >--
> >-- Guozhang
>
>


-- 
-- Guozhang

Reply via email to