Hey Richard, I've updated the KIP with the changes discussed here. If you're happy with the state of it, I think that we're probably ready to call for a vote.
However, I'm about to take a week off for vacation. Do you mind sending the [VOTE] message and managing the vote thread? Obviously, you can count me as a non-binding +1. Thanks, -John On Wed, May 2, 2018 at 8:08 PM, Jason Gustafson <ja...@confluent.io> wrote: > Hey John, > > Yeah, I appreciate Becket's point. We do tend to abuse the initial intent > of ApiException. It's just that it can be awkward to come up with another > name when the ApiException already has a reasonable and appropriate name > for the user API. `ClientTimeoutException` is a perfect example of this > awkwardness. In practice I don't think the convention has provided much > benefit. I looked around the code and saw only a handful of cases where we > were checking ApiException directly, and it was just to determine the log > level of a message. I think I'd probably take the more concise name, even > if it's a slight abuse of the convention. We use it in similar scenarios in > the producer, for what it's worth. > > -Jason > > > On Wed, May 2, 2018 at 3:26 PM, Richard Yu <yohan.richard...@gmail.com> > wrote: > > > Hi John, > > > > I don't have any objections to this KIP change. Please go ahead. > > > > Thanks, > > Richard > > > > On Wed, May 2, 2018 at 2:54 PM, John Roesler <j...@confluent.io> wrote: > > > > > Thanks Jason, > > > > > > I did find some production use cases "on the internet" that use poll(0) > > > *just* to join the group initially and ignore the response. I suppose > the > > > assumption is that it'll be empty on the very first call to poll with > > > timeout=0. In my opinion, this usage is unsafe, since there's a > declared > > > return value. I proposed the method to give these use cases a safe > > > alternative. > > > > > > Of course, there's another safe alternative: just don't ignore the > > > response. > > > > > > I'd agree with the decision to just deprecate the old poll(long) and > add > > > only a new poll(Duration). It should be obvious that there's no > > > non-deprecated way to do what the code I found is doing, so those > > > developers will either alter their code to handle the response or they > > will > > > come back and ask us for the awaitAssignmentMetadata method. > > > > > > Better to present a simpler api and wait for a reason to make it more > > > complicated. > > > > > > I'm fine with suggestions 1,2, and 3. Unless Richard objects super > fast, > > > I'll update the KIP momentarily. > > > > > > Regarding the ClientTimeoutException, this was introduced earlier in > this > > > discussion when Becket pointed out that the TimeoutException is a > > subclass > > > of ApiException, and therefore implies that a call to the broker timed > > out. > > > > > > Reconsidering this point, I found the javadoc on ApiException to be a > > > little ambiguous. All it says is that "any API exception that is part > of > > > the public protocol should be a subclass of this class...". It's not > > clear > > > to me whether this is the broker's API/protocol or more generally *any* > > > API/protocol. So we'd have to bring the lawyers in, but I think we can > > just > > > say it's the latter and keep the old exception. > > > > > > I'm not sure if it's an important distiction to users whether their > > request > > > timed out as a broker side timeout, an HTTP timeout, or a client-side > > > timeout. In any case, they'd want to retry for a while and then fail if > > > they can't get their request through. > > > > > > Plus RetryableException also inherits from ApiException, and that one > is > > > ubiquitous. Adding a new exception would require users to catch both > > > RetriableException and ClientTimeoutException, which seems odd since > the > > > latter is retriable. > > > > > > All in all, I'm now in favor of sticking with the current > > TimeoutException. > > > If there's some higher-level problem with the ApiException being used > > this > > > way, I think it should be addressed holistically in a separate KIP. > > > > > > So, I'll go ahead and switch the KIP back to TimeoutException, unless > > > Becket wants to argue (harder) in favor of the ClientTimeoutException. > > > > > > Thanks, > > > -John > > > > > > > > > On Wed, May 2, 2018 at 3:55 PM, Jason Gustafson <ja...@confluent.io> > > > wrote: > > > > > > > I think John's proposal look reasonable to me. My only doubt is about > > use > > > > cases for the new `awaitAssignmentMetadata` API. I think the basic > idea > > > is > > > > that we want a way to block until we have joined the consumer group, > > but > > > we > > > > do not want to await fetched data. Maybe another way to accomplish > this > > > > would be to add a `PollOptions` argument which specified the > condition > > we > > > > are awaiting? It's a little weird that we'd have two separate APIs > > where > > > > the group membership can change. I know this functionality can be > > helpful > > > > in testing, but we should probably spend some more time understanding > > and > > > > motivating the general use cases. > > > > > > > > Since we're leaving around the old poll() with its current behavior > for > > > > now, I wonder if we could leave this as potential future work? > > > > > > > > Other than that, I have a few minor suggestions and I'm happy with > the > > > KIP: > > > > > > > > 1. Can we use Duration across the board for all of these APIs? > > > > 2. Can we cover the following blocking APIs with in this KIP: > > > > `partitionsFor`, `listTopics`, `offsetsForTimes`, `beginningOffsets`, > > > > `endOffsets`? > > > > 3. Perhaps we can add a `close(Duration)` and deprecate the one > > accepting > > > > `TimeUnit`? > > > > 4. Seems we don't really need `ClientTimeoutException` since we > already > > > > have `TimeoutException`? > > > > > > > > Thanks, > > > > Jason > > > > > > > > > > > > > > > > On Wed, Apr 25, 2018 at 2:14 PM, Guozhang Wang <wangg...@gmail.com> > > > wrote: > > > > > > > > > Previously there are some debates on whether we should add this > > > > nonblocking > > > > > behavior via a config v.s. via overloaded functions. To make > progress > > > on > > > > > this discussion we need to first figure that part out. I'm in favor > > of > > > > the > > > > > current approach of overloaded functions over the config since if > we > > > are > > > > > going to have multiple configs other than a single one to control > > > timeout > > > > > semantics it may be even confusing: take our producer side configs > > for > > > an > > > > > example, right now we have "request.timeout.ms" and "max.block.ms" > > and > > > > we > > > > > are proposing to add another one in KIP-91. But I'd also like to > hear > > > > from > > > > > people who's in favor of the configs. > > > > > > > > > > > > > > > Guozhang > > > > > > > > > > > > > > > On Wed, Apr 25, 2018 at 1:39 PM, John Roesler <j...@confluent.io> > > > wrote: > > > > > > > > > > > Re Ted's last comment, that style of async API requires some > thread > > > to > > > > > > actually drive the request/response cycle and invoke the callback > > > when > > > > > it's > > > > > > complete. Right now, this happens in the caller's thread as a > > > > side-effect > > > > > > of calling poll(). But that clearly won't work for poll() itself! > > > > > > > > > > > > In the future, I think we'd like to add a background thread to > > drive > > > > the > > > > > > request/response loops, and then make all these methods return > > > > > > Future<Whatever>. > > > > > > > > > > > > But we don't need to bite that off right now. > > > > > > > > > > > > The "async" model I'm proposing is really just a generalization > of > > > the > > > > > one > > > > > > that poll already partially implements: when you call poll, it > > fires > > > > off > > > > > > any requests it needs to make and checks if any responses are > > ready. > > > If > > > > > so, > > > > > > it returns them. If not, it returns empty. When you call poll() > > > again, > > > > it > > > > > > again checks on the responses from last time, and so forth. > > > > > > > > > > > > But that model currently only applies to the "fetch" part of > poll. > > > I'm > > > > > > proposing that we extend it to the "metadata update" part of poll > > as > > > > > well. > > > > > > > > > > > > However, as previously discussed, doing this in place would break > > the > > > > > > semantics of poll that folks currently rely on, so I propose to > add > > > new > > > > > > methods and deprecate the existing poll method. Here's what I'm > > > > thinking: > > > > > > https://github.com/apache/kafka/pull/4855 . In the discussion on > > > that > > > > > PR, > > > > > > I've described in greater detail how the async+blocking semantics > > > work. > > > > > > > > > > > > I'll update KIP-266 with this interface for poll(). > > > > > > > > > > > > It would be great to get this discussion moving again so we can > get > > > > these > > > > > > changes into 2.0. What does everyone think about this? > > > > > > > > > > > > Thanks, > > > > > > -John > > > > > > > > > > > > On Thu, Apr 19, 2018 at 5:12 PM, John Roesler <j...@confluent.io > > > > > > wrote: > > > > > > > > > > > > > Thanks for the tip, Ted! > > > > > > > > > > > > > > On Thu, Apr 19, 2018 at 12:12 PM, Ted Yu <yuzhih...@gmail.com> > > > > wrote: > > > > > > > > > > > > > >> John: > > > > > > >> In case you want to pursue async poll, it seems (by looking at > > > > current > > > > > > >> API) > > > > > > >> that introducing PollCallback follows existing pattern(s). > > > > > > >> > > > > > > >> e.g. KafkaConsumer#commitAsync(OffsetCommitCallback) > > > > > > >> > > > > > > >> FYI > > > > > > >> > > > > > > >> On Thu, Apr 19, 2018 at 10:08 AM, John Roesler < > > j...@confluent.io > > > > > > > > > > wrote: > > > > > > >> > > > > > > >> > Hi Richard, > > > > > > >> > > > > > > > >> > Thanks for the invitation! I do think it would be safer to > > > > > introduce a > > > > > > >> new > > > > > > >> > poll > > > > > > >> > method than to change the semantics of the old one. I've > been > > > > > mulling > > > > > > >> about > > > > > > >> > whether the new one could still have (slightly different) > > async > > > > > > >> semantics > > > > > > >> > with > > > > > > >> > a timeout of 0. If possible, I'd like to avoid introducing > > > another > > > > > new > > > > > > >> > "asyncPoll". > > > > > > >> > > > > > > > >> > I'm planning to run some experiments and dig into the > > > > > implementation a > > > > > > >> bit > > > > > > >> > more before solidifying the proposal. I'll update the KIP as > > you > > > > > > >> suggest at > > > > > > >> > that point, > > > > > > >> > and then can call for another round of reviews and voting. > > > > > > >> > > > > > > > >> > Thanks, > > > > > > >> > -John > > > > > > >> > > > > > > > >> > On Tue, Apr 17, 2018 at 4:53 PM, Richard Yu < > > > > > > yohan.richard...@gmail.com > > > > > > >> > > > > > > > >> > wrote: > > > > > > >> > > > > > > > >> > > Hi John, > > > > > > >> > > > > > > > > >> > > Do you have a preference for fixing the poll() method > (e.g. > > > > using > > > > > > >> > asyncPoll > > > > > > >> > > or just sticking with the current method but with an extra > > > > timeout > > > > > > >> > > parameter) ? I think your current proposition for KIP-288 > is > > > > > better > > > > > > >> than > > > > > > >> > > what I have on my side. If you think there is something > that > > > you > > > > > > want > > > > > > >> to > > > > > > >> > > add, you could go ahead and change KIP-266 to your liking. > > > Just > > > > to > > > > > > >> note > > > > > > >> > > that it would be preferable that if one of us modifies > this > > > KIP, > > > > > it > > > > > > >> would > > > > > > >> > > be best to mention your change on this thread to let each > > > other > > > > > know > > > > > > >> > (makes > > > > > > >> > > it easier to coordinate progress). > > > > > > >> > > > > > > > > >> > > Thanks, > > > > > > >> > > Richard > > > > > > >> > > > > > > > > >> > > On Tue, Apr 17, 2018 at 2:07 PM, John Roesler < > > > > j...@confluent.io> > > > > > > >> wrote: > > > > > > >> > > > > > > > > >> > > > Ok, I'll close the discussion on KIP-288 and mark it > > > > discarded. > > > > > > >> > > > > > > > > > >> > > > We can solidify the design for poll in KIP-266, and once > > > it's > > > > > > >> approved, > > > > > > >> > > > I'll coordinate with Qiang Zhao on the PR for the poll > > part > > > of > > > > > the > > > > > > >> > work. > > > > > > >> > > > Once that is merged, you'll have a clean slate for the > > rest > > > of > > > > > the > > > > > > >> > work. > > > > > > >> > > > > > > > > > >> > > > On Tue, Apr 17, 2018 at 3:39 PM, Richard Yu < > > > > > > >> > yohan.richard...@gmail.com> > > > > > > >> > > > wrote: > > > > > > >> > > > > > > > > > >> > > > > Hi John, > > > > > > >> > > > > > > > > > > >> > > > > I think that you could finish your PR that corresponds > > > with > > > > > > >> KIP-288 > > > > > > >> > and > > > > > > >> > > > > merge it. I can finish my side of the work afterwards. > > > > > > >> > > > > > > > > > > >> > > > > On another note, adding an asynchronized version of > > poll() > > > > > would > > > > > > >> make > > > > > > >> > > > > sense, particularily since the current version of > Kafka > > > does > > > > > not > > > > > > >> > > support > > > > > > >> > > > > it. > > > > > > >> > > > > > > > > > > >> > > > > Thanks > > > > > > >> > > > > Richar > > > > > > >> > > > > > > > > > > >> > > > > On Tue, Apr 17, 2018 at 12:30 PM, John Roesler < > > > > > > j...@confluent.io > > > > > > >> > > > > > > > >> > > > wrote: > > > > > > >> > > > > > > > > > > >> > > > > > Cross-pollinating from some discussion we've had on > > > > KIP-288, > > > > > > >> > > > > > > > > > > > >> > > > > > I think there's a good reason that poll() takes a > > > timeout > > > > > when > > > > > > >> none > > > > > > >> > > of > > > > > > >> > > > > the > > > > > > >> > > > > > other methods do, and it's relevant to this > > discussion. > > > > The > > > > > > >> timeout > > > > > > >> > > in > > > > > > >> > > > > > poll() is effectively implementing a long-poll API > (on > > > the > > > > > > >> client > > > > > > >> > > side, > > > > > > >> > > > > so > > > > > > >> > > > > > it's not really long-poll, but the programmer-facing > > > > > behavior > > > > > > is > > > > > > >> > the > > > > > > >> > > > > same). > > > > > > >> > > > > > The timeout isn't really bounding the execution time > > of > > > > the > > > > > > >> method, > > > > > > >> > > but > > > > > > >> > > > > > instead giving a max time that callers are willing > to > > > wait > > > > > > >> around > > > > > > >> > and > > > > > > >> > > > see > > > > > > >> > > > > > if any results show up. > > > > > > >> > > > > > > > > > > > >> > > > > > If I understand the code sufficiently, it would be > > > > perfectly > > > > > > >> > > reasonable > > > > > > >> > > > > for > > > > > > >> > > > > > a caller to use a timeout of 0 to implement async > > poll, > > > it > > > > > > would > > > > > > >> > just > > > > > > >> > > > > mean > > > > > > >> > > > > > that KafkaConsumer would just check on each call if > > > > there's > > > > > a > > > > > > >> > > response > > > > > > >> > > > > > ready and if not, fire off a new request without > > waiting > > > > > for a > > > > > > >> > > > response. > > > > > > >> > > > > > > > > > > > >> > > > > > As such, it seems inappropriate to throw a > > > > > > >> ClientTimeoutException > > > > > > >> > > from > > > > > > >> > > > > > poll(), except possibly if the initial phase of > > ensuring > > > > an > > > > > > >> > > assignment > > > > > > >> > > > > > times out. We wouldn't want the method contract to > be > > > > > > "returns a > > > > > > >> > > > > non-empty > > > > > > >> > > > > > collection or throws a ClientTimeoutException" > > > > > > >> > > > > > > > > > > > >> > > > > > Now, I'm wondering if we should actually consider > one > > of > > > > my > > > > > > >> > rejected > > > > > > >> > > > > > alternatives, to treat the "operation timeout" as a > > > > separate > > > > > > >> > > parameter > > > > > > >> > > > > from > > > > > > >> > > > > > the "long-poll time". Or maybe adding an > > > > "asyncPoll(timeout, > > > > > > >> time > > > > > > >> > > > unit)" > > > > > > >> > > > > > that only uses the timeout to bound metadata updates > > and > > > > > > >> otherwise > > > > > > >> > > > > behaves > > > > > > >> > > > > > like the current "poll(0)". > > > > > > >> > > > > > > > > > > > >> > > > > > Thanks, > > > > > > >> > > > > > -John > > > > > > >> > > > > > > > > > > > >> > > > > > On Tue, Apr 17, 2018 at 2:05 PM, John Roesler < > > > > > > >> j...@confluent.io> > > > > > > >> > > > wrote: > > > > > > >> > > > > > > > > > > > >> > > > > > > Hey Richard, > > > > > > >> > > > > > > > > > > > > >> > > > > > > As you noticed, the newly introduced KIP-288 > > overlaps > > > > with > > > > > > >> this > > > > > > >> > > one. > > > > > > >> > > > > > Sorry > > > > > > >> > > > > > > for stepping on your toes... How would you like to > > > > > proceed? > > > > > > >> I'm > > > > > > >> > > happy > > > > > > >> > > > > to > > > > > > >> > > > > > > "close" KIP-288 in deference to this KIP. > > > > > > >> > > > > > > > > > > > > >> > > > > > > With respect to poll(), reading this discussion > gave > > > me > > > > a > > > > > > new > > > > > > >> > idea > > > > > > >> > > > for > > > > > > >> > > > > > > providing a non-breaking update path... What if we > > > > > > introduce a > > > > > > >> > new > > > > > > >> > > > > > variant > > > > > > >> > > > > > > 'poll(long timeout, TimeUnit unit)' that displays > > the > > > > new, > > > > > > >> > desired > > > > > > >> > > > > > > behavior, and just leave the old method alone? > > > > > > >> > > > > > > > > > > > > >> > > > > > > Thanks, > > > > > > >> > > > > > > -John > > > > > > >> > > > > > > > > > > > > >> > > > > > > On Tue, Apr 17, 2018 at 12:09 PM, Richard Yu < > > > > > > >> > > > > yohan.richard...@gmail.com > > > > > > >> > > > > > > > > > > > > >> > > > > > > wrote: > > > > > > >> > > > > > > > > > > > > >> > > > > > >> Hi all, > > > > > > >> > > > > > >> > > > > > > >> > > > > > >> If possible, would a committer please review? > > > > > > >> > > > > > >> > > > > > > >> > > > > > >> Thanks > > > > > > >> > > > > > >> > > > > > > >> > > > > > >> On Sun, Apr 1, 2018 at 7:24 PM, Richard Yu < > > > > > > >> > > > > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> wrote: > > > > > > >> > > > > > >> > > > > > > >> > > > > > >> > Hi Guozhang, > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > I have clarified the KIP a bit to account for > > > > Becket's > > > > > > >> > > suggestion > > > > > > >> > > > on > > > > > > >> > > > > > >> > ClientTimeoutException. > > > > > > >> > > > > > >> > About adding an extra config, you were right > > about > > > my > > > > > > >> > > intentions. > > > > > > >> > > > I > > > > > > >> > > > > am > > > > > > >> > > > > > >> > just wondering if the config > > > > > > >> > > > > > >> > should be included, since Ismael seems to favor > > an > > > > > extra > > > > > > >> > > > > > configuration, > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > Thanks, > > > > > > >> > > > > > >> > Richard > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > On Sun, Apr 1, 2018 at 5:35 PM, Guozhang Wang < > > > > > > >> > > wangg...@gmail.com > > > > > > >> > > > > > > > > > > >> > > > > > >> wrote: > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> >> Hi Richard, > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> Regarding the streams side changes, we plan to > > > > > > incorporate > > > > > > >> > with > > > > > > >> > > > the > > > > > > >> > > > > > new > > > > > > >> > > > > > >> >> APIs once the KIP is done, which is only > > internal > > > > code > > > > > > >> > changes > > > > > > >> > > > and > > > > > > >> > > > > > >> hence > > > > > > >> > > > > > >> >> do > > > > > > >> > > > > > >> >> not need to include in the KIP. > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> Could you update the KIP because it has been > > quite > > > > > > >> obsoleted > > > > > > >> > > from > > > > > > >> > > > > the > > > > > > >> > > > > > >> >> discussed topics, and I'm a bit loosing track > on > > > > what > > > > > is > > > > > > >> your > > > > > > >> > > > final > > > > > > >> > > > > > >> >> proposal right now. For example, I'm not > > > completely > > > > > > >> following > > > > > > >> > > > your > > > > > > >> > > > > > >> >> "compromise > > > > > > >> > > > > > >> >> of sorts": are you suggesting that we still > add > > > > > > >> overloading > > > > > > >> > > > > functions > > > > > > >> > > > > > >> and > > > > > > >> > > > > > >> >> add a config that will be applied to all > > overload > > > > > > >> functions > > > > > > >> > > > without > > > > > > >> > > > > > the > > > > > > >> > > > > > >> >> timeout, while for other overloaded functions > > with > > > > the > > > > > > >> > timeout > > > > > > >> > > > > value > > > > > > >> > > > > > >> the > > > > > > >> > > > > > >> >> config will be ignored? > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> Guozhang > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> On Fri, Mar 30, 2018 at 8:36 PM, Richard Yu < > > > > > > >> > > > > > >> yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> wrote: > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> > On a side note, I have noticed that the > > several > > > > > other > > > > > > >> > methods > > > > > > >> > > > in > > > > > > >> > > > > > >> classes > > > > > > >> > > > > > >> >> > such as StoreChangeLogReader in Streams > calls > > > > > > position() > > > > > > >> > > which > > > > > > >> > > > > > causes > > > > > > >> > > > > > >> >> tests > > > > > > >> > > > > > >> >> > to hang. It might be out of the scope of the > > > KIP, > > > > > but > > > > > > >> > should > > > > > > >> > > I > > > > > > >> > > > > also > > > > > > >> > > > > > >> >> change > > > > > > >> > > > > > >> >> > the methods which use position() as a > callback > > > to > > > > at > > > > > > the > > > > > > >> > very > > > > > > >> > > > > least > > > > > > >> > > > > > >> >> prevent > > > > > > >> > > > > > >> >> > the tests from hanging? This issue might be > > out > > > of > > > > > the > > > > > > >> KIP, > > > > > > >> > > > but I > > > > > > >> > > > > > >> >> prefer it > > > > > > >> > > > > > >> >> > if we could at least make my PR pass the > > Jenkins > > > > > Q&A. > > > > > > >> > > > > > >> >> > > > > > > > >> > > > > > >> >> > Thanks > > > > > > >> > > > > > >> >> > > > > > > > >> > > > > > >> >> > On Fri, Mar 30, 2018 at 8:24 PM, Richard Yu > < > > > > > > >> > > > > > >> yohan.richard...@gmail.com > > > > > > >> > > > > > >> >> > > > > > > > >> > > > > > >> >> > wrote: > > > > > > >> > > > > > >> >> > > > > > > > >> > > > > > >> >> > > Thanks for the review Becket. > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > About the methods beginningOffsets(), > > > > > endOffsets(), > > > > > > >> ...: > > > > > > >> > > > > > >> >> > > I took a look through the code of > > > KafkaConsumer, > > > > > but > > > > > > >> > after > > > > > > >> > > > > > looking > > > > > > >> > > > > > >> >> > through > > > > > > >> > > > > > >> >> > > the offsetsByTimes() method > > > > > > >> > > > > > >> >> > > and its callbacks in Fetcher, I think > these > > > > > methods > > > > > > >> > already > > > > > > >> > > > > block > > > > > > >> > > > > > >> for > > > > > > >> > > > > > >> >> a > > > > > > >> > > > > > >> >> > > set period of time. I know that there > > > > > > >> > > > > > >> >> > > is a chance that the offsets methods in > > > > > > KafkaConsumer > > > > > > >> > might > > > > > > >> > > > be > > > > > > >> > > > > > like > > > > > > >> > > > > > >> >> poll > > > > > > >> > > > > > >> >> > > (that is one section of the method > > > > > > >> > > > > > >> >> > > honors the timeout while another -- > > > > > > >> updateFetchPositions > > > > > > >> > -- > > > > > > >> > > > > does > > > > > > >> > > > > > >> not). > > > > > > >> > > > > > >> >> > > However, I don't think that this is the > > > > > > >> > > > > > >> >> > > case with offsetsByTimes since the > callbacks > > > > that > > > > > I > > > > > > >> > checked > > > > > > >> > > > > does > > > > > > >> > > > > > >> not > > > > > > >> > > > > > >> >> seem > > > > > > >> > > > > > >> >> > > to hang. > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > The clarity of the exception message is a > > > > > problem. I > > > > > > >> > > thought > > > > > > >> > > > > your > > > > > > >> > > > > > >> >> > > suggestion there was reasonable. I > included > > > > > > >> > > > > > >> >> > > it in the KIP. > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > And on another note, I have noticed that > > > several > > > > > > >> people > > > > > > >> > has > > > > > > >> > > > > > voiced > > > > > > >> > > > > > >> the > > > > > > >> > > > > > >> >> > > opinion that adding a config might > > > > > > >> > > > > > >> >> > > be advisable in relation to adding an > extra > > > > > > >> parameter. I > > > > > > >> > > > think > > > > > > >> > > > > > >> that we > > > > > > >> > > > > > >> >> > can > > > > > > >> > > > > > >> >> > > have a compromise of sorts: some > > > > > > >> > > > > > >> >> > > methods in KafkaConsumer are relatively > > > similar > > > > -- > > > > > > for > > > > > > >> > > > example, > > > > > > >> > > > > > >> >> > position() > > > > > > >> > > > > > >> >> > > and committed() both call > > > > > > >> > > > > > >> >> > > updateFetchPositions(). I think that we > > could > > > > use > > > > > > the > > > > > > >> > same > > > > > > >> > > > > config > > > > > > >> > > > > > >> for > > > > > > >> > > > > > >> >> > > these method as a default timeout if > > > > > > >> > > > > > >> >> > > the user does not provide one. On the > other > > > > hand, > > > > > if > > > > > > >> they > > > > > > >> > > > wish > > > > > > >> > > > > to > > > > > > >> > > > > > >> >> specify > > > > > > >> > > > > > >> >> > > a longer or shorter blocking time, > > > > > > >> > > > > > >> >> > > they have the option of changing the > > timeout. > > > (I > > > > > > >> included > > > > > > >> > > the > > > > > > >> > > > > > >> config > > > > > > >> > > > > > >> >> as > > > > > > >> > > > > > >> >> > an > > > > > > >> > > > > > >> >> > > alternative in the KIP) WDYT? > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > Thanks, > > > > > > >> > > > > > >> >> > > Richard > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > On Fri, Mar 30, 2018 at 1:26 AM, Becket > Qin > > < > > > > > > >> > > > > > becket....@gmail.com> > > > > > > >> > > > > > >> >> > wrote: > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > >> Glad to see the KIP, Richard. This has > > been a > > > > > > really > > > > > > >> > long > > > > > > >> > > > > > pending > > > > > > >> > > > > > >> >> issue. > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> The original arguments from Jay for using > > > > config, > > > > > > >> such > > > > > > >> > as > > > > > > >> > > > > > >> >> max.block.ms, > > > > > > >> > > > > > >> >> > >> instead of using timeout parameters was > > that > > > > > people > > > > > > >> will > > > > > > >> > > > > always > > > > > > >> > > > > > >> hard > > > > > > >> > > > > > >> >> > code > > > > > > >> > > > > > >> >> > >> the timeout, and the hard coded timeout > is > > > > rarely > > > > > > >> > correct > > > > > > >> > > > > > because > > > > > > >> > > > > > >> it > > > > > > >> > > > > > >> >> has > > > > > > >> > > > > > >> >> > >> to > > > > > > >> > > > > > >> >> > >> consider different scenarios. For > example, > > > > users > > > > > > may > > > > > > >> > > receive > > > > > > >> > > > > > >> timeout > > > > > > >> > > > > > >> >> > >> exception when the group coordinator > moves. > > > > > Having > > > > > > a > > > > > > >> > > > > > configuration > > > > > > >> > > > > > >> >> with > > > > > > >> > > > > > >> >> > >> some reasonable default value will make > > > users' > > > > > life > > > > > > >> > > easier. > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> That said, in practice, it seems more > > useful > > > to > > > > > > have > > > > > > >> > > timeout > > > > > > >> > > > > > >> >> parameters. > > > > > > >> > > > > > >> >> > >> We > > > > > > >> > > > > > >> >> > >> have seen some library, using the > consumers > > > > > > >> internally, > > > > > > >> > > > needs > > > > > > >> > > > > to > > > > > > >> > > > > > >> >> provide > > > > > > >> > > > > > >> >> > >> an > > > > > > >> > > > > > >> >> > >> external flexible timeout interface. > Also, > > > user > > > > > can > > > > > > >> > easily > > > > > > >> > > > > hard > > > > > > >> > > > > > >> code > > > > > > >> > > > > > >> >> a > > > > > > >> > > > > > >> >> > >> value to get the same as a config based > > > > solution. > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> The KIP looks good overall. A few > comments: > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> 1. There are a few other blocking methods > > > that > > > > > are > > > > > > >> not > > > > > > >> > > > > included, > > > > > > >> > > > > > >> e.g. > > > > > > >> > > > > > >> >> > >> offsetsForTimes(), beginningOffsets(), > > > > > > endOffsets(). > > > > > > >> Is > > > > > > >> > > > there > > > > > > >> > > > > > any > > > > > > >> > > > > > >> >> > reason? > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> 2. I am wondering can we take the KIP as > a > > > > chance > > > > > > to > > > > > > >> > clean > > > > > > >> > > > up > > > > > > >> > > > > > our > > > > > > >> > > > > > >> >> > timeout > > > > > > >> > > > > > >> >> > >> exception(s)? More specifically, instead > of > > > > > reusing > > > > > > >> > > > > > >> TimeoutException, > > > > > > >> > > > > > >> >> > can > > > > > > >> > > > > > >> >> > >> we introduce a new ClientTimeoutException > > > with > > > > > > >> different > > > > > > >> > > > > causes, > > > > > > >> > > > > > >> e.g. > > > > > > >> > > > > > >> >> > >> UnknownTopicOrPartition, RequestTimeout, > > > > > > >> > > LeaderNotAvailable, > > > > > > >> > > > > > etc. > > > > > > >> > > > > > >> >> > >> As of now, the TimeoutException is used > in > > > the > > > > > > >> following > > > > > > >> > > > three > > > > > > >> > > > > > >> cases: > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> 1. TimeoutException is a subclass of > > > > > > ApiException > > > > > > >> > which > > > > > > >> > > > > > >> indicates > > > > > > >> > > > > > >> >> the > > > > > > >> > > > > > >> >> > >> exception was returned by the broker. > > The > > > > > > >> > > > TimeoutException > > > > > > >> > > > > > was > > > > > > >> > > > > > >> >> > >> initially > > > > > > >> > > > > > >> >> > >> returned by the leaders when > replication > > > was > > > > > not > > > > > > >> done > > > > > > >> > > > > within > > > > > > >> > > > > > >> the > > > > > > >> > > > > > >> >> > >> specified > > > > > > >> > > > > > >> >> > >> timeout in the ProduceRequest. It has > an > > > > error > > > > > > >> code > > > > > > >> > of > > > > > > >> > > 7, > > > > > > >> > > > > > >> which is > > > > > > >> > > > > > >> >> > >> returned > > > > > > >> > > > > > >> >> > >> by the broker. > > > > > > >> > > > > > >> >> > >> 2. When we migrate to Java clients, in > > > > Errors > > > > > > >> > > definition, > > > > > > >> > > > > we > > > > > > >> > > > > > >> >> extended > > > > > > >> > > > > > >> >> > >> it > > > > > > >> > > > > > >> >> > >> to indicate request timeout, i.e. a > > > request > > > > > was > > > > > > >> sent > > > > > > >> > > but > > > > > > >> > > > > the > > > > > > >> > > > > > >> >> response > > > > > > >> > > > > > >> >> > >> was > > > > > > >> > > > > > >> >> > >> not received before timeout. In this > > case, > > > > the > > > > > > >> > clients > > > > > > >> > > > did > > > > > > >> > > > > > not > > > > > > >> > > > > > >> >> have a > > > > > > >> > > > > > >> >> > >> return code from the broker. > > > > > > >> > > > > > >> >> > >> 3. Later at some point, we started to > > use > > > > the > > > > > > >> > > > > > TimeoutException > > > > > > >> > > > > > >> for > > > > > > >> > > > > > >> >> > >> clients method call timeout. It is > > neither > > > > > > >> related to > > > > > > >> > > any > > > > > > >> > > > > > >> broker > > > > > > >> > > > > > >> >> > >> returned > > > > > > >> > > > > > >> >> > >> error code, nor to request timeout on > > the > > > > > wire. > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> Due to the various interpretations, users > > can > > > > > > easily > > > > > > >> be > > > > > > >> > > > > > confused. > > > > > > >> > > > > > >> As > > > > > > >> > > > > > >> >> an > > > > > > >> > > > > > >> >> > >> example, when a timeout is thrown with > > > "Failed > > > > to > > > > > > >> > refresh > > > > > > >> > > > > > metadata > > > > > > >> > > > > > >> >> in X > > > > > > >> > > > > > >> >> > >> ms", it is hard to tell what exactly > > > happened. > > > > > > Since > > > > > > >> we > > > > > > >> > > are > > > > > > >> > > > > > >> changing > > > > > > >> > > > > > >> >> the > > > > > > >> > > > > > >> >> > >> API here, it would be good to avoid > > > introducing > > > > > > more > > > > > > >> > > > ambiguity > > > > > > >> > > > > > and > > > > > > >> > > > > > >> >> see > > > > > > >> > > > > > >> >> > >> whether this can be improved. It would be > > at > > > > > least > > > > > > >> one > > > > > > >> > > step > > > > > > >> > > > > > >> forward > > > > > > >> > > > > > >> >> to > > > > > > >> > > > > > >> >> > >> remove the usage of case 3. > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> Thanks, > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> Jiangjie (Becket) Qin > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> On Mon, Mar 26, 2018 at 5:50 PM, Guozhang > > > Wang > > > > < > > > > > > >> > > > > > >> wangg...@gmail.com> > > > > > > >> > > > > > >> >> > >> wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > >> > @Richard: TimeoutException inherits > from > > > > > > >> > > > RetriableException > > > > > > >> > > > > > >> which > > > > > > >> > > > > > >> >> > >> inherits > > > > > > >> > > > > > >> >> > >> > from ApiException. So users should > > > explicitly > > > > > try > > > > > > >> to > > > > > > >> > > > capture > > > > > > >> > > > > > >> >> > >> > RetriableException in their code and > > handle > > > > the > > > > > > >> > > exception. > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > @Isamel, Ewen: I'm trying to push > > progress > > > > > > forward > > > > > > >> on > > > > > > >> > > this > > > > > > >> > > > > > one, > > > > > > >> > > > > > >> >> are we > > > > > > >> > > > > > >> >> > >> now > > > > > > >> > > > > > >> >> > >> > on the same page for using function > > > > parameters > > > > > > than > > > > > > >> > > > configs? > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > Guozhang > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > On Fri, Mar 23, 2018 at 4:42 PM, Ismael > > > Juma > > > > < > > > > > > >> > > > > > ism...@juma.me.uk > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> >> > wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > Hi Ewen, > > > > > > >> > > > > > >> >> > >> > > > > > > > > >> > > > > > >> >> > >> > > Yeah, I mentioned KAFKA-2391 where > some > > > of > > > > > this > > > > > > >> was > > > > > > >> > > > > > discussed. > > > > > > >> > > > > > >> >> Jay > > > > > > >> > > > > > >> >> > was > > > > > > >> > > > > > >> >> > >> > > against having timeouts in the > methods > > at > > > > the > > > > > > >> time. > > > > > > >> > > > > However, > > > > > > >> > > > > > >> as > > > > > > >> > > > > > >> >> > Jason > > > > > > >> > > > > > >> >> > >> > said > > > > > > >> > > > > > >> >> > >> > > offline, we did end up with a timeout > > > > > parameter > > > > > > >> in > > > > > > >> > > > `poll`. > > > > > > >> > > > > > >> >> > >> > > > > > > > > >> > > > > > >> >> > >> > > Ismael > > > > > > >> > > > > > >> >> > >> > > > > > > > > >> > > > > > >> >> > >> > > On Fri, Mar 23, 2018 at 4:26 PM, Ewen > > > > > > >> > > Cheslack-Postava < > > > > > > >> > > > > > >> >> > >> > e...@confluent.io> > > > > > > >> > > > > > >> >> > >> > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > > > >> > > > > > >> >> > >> > > > Regarding the flexibility question, > > has > > > > > > someone > > > > > > >> > > tried > > > > > > >> > > > to > > > > > > >> > > > > > >> dig up > > > > > > >> > > > > > >> >> > the > > > > > > >> > > > > > >> >> > >> > > > discussion of the new consumer APIs > > > when > > > > > they > > > > > > >> were > > > > > > >> > > > being > > > > > > >> > > > > > >> >> written? > > > > > > >> > > > > > >> >> > I > > > > > > >> > > > > > >> >> > >> > > vaguely > > > > > > >> > > > > > >> >> > >> > > > recall these exact questions about > > > using > > > > > APIs > > > > > > >> vs > > > > > > >> > > > configs > > > > > > >> > > > > > and > > > > > > >> > > > > > >> >> > >> > flexibility > > > > > > >> > > > > > >> >> > >> > > vs > > > > > > >> > > > > > >> >> > >> > > > bloating the API surface area > having > > > > > already > > > > > > >> been > > > > > > >> > > > > > discussed. > > > > > > >> > > > > > >> >> (Not > > > > > > >> > > > > > >> >> > >> that > > > > > > >> > > > > > >> >> > >> > we > > > > > > >> > > > > > >> >> > >> > > > shouldn't revisit, just that it > might > > > > also > > > > > > be a > > > > > > >> > > faster > > > > > > >> > > > > way > > > > > > >> > > > > > >> to > > > > > > >> > > > > > >> >> get > > > > > > >> > > > > > >> >> > >> to a > > > > > > >> > > > > > >> >> > >> > > full > > > > > > >> > > > > > >> >> > >> > > > understanding of the options, > > concerns, > > > > and > > > > > > >> > > > tradeoffs). > > > > > > >> > > > > > >> >> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > -Ewen > > > > > > >> > > > > > >> >> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > On Thu, Mar 22, 2018 at 7:19 AM, > > > Richard > > > > > Yu < > > > > > > >> > > > > > >> >> > >> > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > I do have one question though: in > > the > > > > > > current > > > > > > >> > KIP, > > > > > > >> > > > > > >> throwing > > > > > > >> > > > > > >> >> > >> > > > > TimeoutException to mark > > > > > > >> > > > > > >> >> > >> > > > > that time limit is exceeded is > > > applied > > > > to > > > > > > all > > > > > > >> > new > > > > > > >> > > > > > methods > > > > > > >> > > > > > >> >> > >> introduced > > > > > > >> > > > > > >> >> > >> > in > > > > > > >> > > > > > >> >> > >> > > > > this proposal. > > > > > > >> > > > > > >> >> > >> > > > > However, how would users respond > > > when a > > > > > > >> > > > > TimeoutException > > > > > > >> > > > > > >> >> (since > > > > > > >> > > > > > >> >> > >> it is > > > > > > >> > > > > > >> >> > >> > > > > considered > > > > > > >> > > > > > >> >> > >> > > > > a RuntimeException)? > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > Thanks, > > > > > > >> > > > > > >> >> > >> > > > > Richard > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > On Mon, Mar 19, 2018 at 6:10 PM, > > > > Richard > > > > > > Yu < > > > > > > >> > > > > > >> >> > >> > > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > > Hi Ismael, > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > You have a great point. Since > > most > > > of > > > > > the > > > > > > >> > > methods > > > > > > >> > > > in > > > > > > >> > > > > > >> this > > > > > > >> > > > > > >> >> KIP > > > > > > >> > > > > > >> >> > >> have > > > > > > >> > > > > > >> >> > >> > > > > similar > > > > > > >> > > > > > >> >> > >> > > > > > callbacks (position() and > > > committed() > > > > > > both > > > > > > >> use > > > > > > >> > > > > > >> >> > >> > > fetchCommittedOffsets(), > > > > > > >> > > > > > >> >> > >> > > > > > and > > > > > > >> > > > > > >> >> > >> > > > > > commitSync() is similar to > > > > position(), > > > > > > >> except > > > > > > >> > > just > > > > > > >> > > > > > >> updating > > > > > > >> > > > > > >> >> > >> > offsets), > > > > > > >> > > > > > >> >> > >> > > > the > > > > > > >> > > > > > >> >> > >> > > > > > amount of time > > > > > > >> > > > > > >> >> > >> > > > > > they block should be also about > > > > equal. > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > However, I think that we need > to > > > take > > > > > > into > > > > > > >> > > > account a > > > > > > >> > > > > > >> >> couple of > > > > > > >> > > > > > >> >> > >> > > things. > > > > > > >> > > > > > >> >> > >> > > > > For > > > > > > >> > > > > > >> >> > >> > > > > > starters, > > > > > > >> > > > > > >> >> > >> > > > > > if the new methods were all > > reliant > > > > on > > > > > > one > > > > > > >> > > config, > > > > > > >> > > > > > >> there is > > > > > > >> > > > > > >> >> > >> > > likelihood > > > > > > >> > > > > > >> >> > >> > > > > > that the > > > > > > >> > > > > > >> >> > >> > > > > > shortcomings for this approach > > > would > > > > be > > > > > > >> > similar > > > > > > >> > > to > > > > > > >> > > > > > what > > > > > > >> > > > > > >> we > > > > > > >> > > > > > >> >> > >> faced if > > > > > > >> > > > > > >> >> > >> > > we > > > > > > >> > > > > > >> >> > >> > > > > let > > > > > > >> > > > > > >> >> > >> > > > > > request.timeout.ms control all > > > > method > > > > > > >> > timeouts. > > > > > > >> > > > In > > > > > > >> > > > > > >> >> > comparison, > > > > > > >> > > > > > >> >> > >> > > adding > > > > > > >> > > > > > >> >> > >> > > > > > overloads > > > > > > >> > > > > > >> >> > >> > > > > > does not have this problem. > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > If you have further thoughts, > > > please > > > > > let > > > > > > me > > > > > > >> > > know. > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > Richard > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > On Mon, Mar 19, 2018 at 5:12 > PM, > > > > Ismael > > > > > > >> Juma < > > > > > > >> > > > > > >> >> > ism...@juma.me.uk > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> Hi, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> An option that is not > currently > > > > > covered > > > > > > in > > > > > > >> > the > > > > > > >> > > > KIP > > > > > > >> > > > > is > > > > > > >> > > > > > >> to > > > > > > >> > > > > > >> >> > have a > > > > > > >> > > > > > >> >> > >> > > > separate > > > > > > >> > > > > > >> >> > >> > > > > >> config max.block.ms, which is > > > > similar > > > > > > to > > > > > > >> the > > > > > > >> > > > > > producer > > > > > > >> > > > > > >> >> config > > > > > > >> > > > > > >> >> > >> with > > > > > > >> > > > > > >> >> > >> > > the > > > > > > >> > > > > > >> >> > >> > > > > >> same > > > > > > >> > > > > > >> >> > >> > > > > >> name. This came up during the > > > > > KAFKA-2391 > > > > > > >> > > > > discussion. > > > > > > >> > > > > > I > > > > > > >> > > > > > >> >> think > > > > > > >> > > > > > >> >> > >> it's > > > > > > >> > > > > > >> >> > >> > > > clear > > > > > > >> > > > > > >> >> > >> > > > > >> that we can't rely on > > > > > > request.timeout.ms, > > > > > > >> so > > > > > > >> > > the > > > > > > >> > > > > > >> >> decision is > > > > > > >> > > > > > >> >> > >> > > between > > > > > > >> > > > > > >> >> > >> > > > > >> adding > > > > > > >> > > > > > >> >> > >> > > > > >> overloads or adding a new > > config. > > > > > People > > > > > > >> > seemed > > > > > > >> > > > to > > > > > > >> > > > > be > > > > > > >> > > > > > >> >> leaning > > > > > > >> > > > > > >> >> > >> > > towards > > > > > > >> > > > > > >> >> > >> > > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> latter in KAFKA-2391, but > Jason > > > > makes > > > > > a > > > > > > >> good > > > > > > >> > > > point > > > > > > >> > > > > > that > > > > > > >> > > > > > >> >> the > > > > > > >> > > > > > >> >> > >> > > overloads > > > > > > >> > > > > > >> >> > >> > > > > are > > > > > > >> > > > > > >> >> > >> > > > > >> more flexible. A couple of > > > questions > > > > > > from > > > > > > >> me: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> 1. Do we need the additional > > > > > > flexibility? > > > > > > >> > > > > > >> >> > >> > > > > >> 2. If we do, do we need it for > > > every > > > > > > >> blocking > > > > > > >> > > > > method? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> Ismael > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> On Mon, Mar 19, 2018 at 5:03 > PM, > > > > > Richard > > > > > > >> Yu < > > > > > > >> > > > > > >> >> > >> > > > yohan.richard...@gmail.com > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > Hi Guozhang, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > I made some clarifications > to > > > > > KIP-266, > > > > > > >> > > namely: > > > > > > >> > > > > > >> >> > >> > > > > >> > 1. Stated more specifically > > that > > > > > > >> commitSync > > > > > > >> > > > will > > > > > > >> > > > > > >> accept > > > > > > >> > > > > > >> >> > user > > > > > > >> > > > > > >> >> > >> > > input. > > > > > > >> > > > > > >> >> > >> > > > > >> > 2. fetchCommittedOffsets(): > > Made > > > > its > > > > > > >> role > > > > > > >> > in > > > > > > >> > > > > > blocking > > > > > > >> > > > > > >> >> more > > > > > > >> > > > > > >> >> > >> clear > > > > > > >> > > > > > >> >> > >> > > to > > > > > > >> > > > > > >> >> > >> > > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > reader. > > > > > > >> > > > > > >> >> > >> > > > > >> > 3. Sketched what would > happen > > > when > > > > > > time > > > > > > >> > limit > > > > > > >> > > > is > > > > > > >> > > > > > >> >> exceeded. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > These changes should make > the > > > KIP > > > > > > >> easier to > > > > > > >> > > > > > >> understand. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > Cheers, > > > > > > >> > > > > > >> >> > >> > > > > >> > Richard > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > On Mon, Mar 19, 2018 at 9:33 > > AM, > > > > > > >> Guozhang > > > > > > >> > > Wang > > > > > > >> > > > < > > > > > > >> > > > > > >> >> > >> > > wangg...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > Hi Richard, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > I made a pass over the KIP > > > > again, > > > > > > some > > > > > > >> > more > > > > > > >> > > > > > >> >> > clarifications > > > > > > >> > > > > > >> >> > >> / > > > > > > >> > > > > > >> >> > >> > > > > comments: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > 1. seek() call itself is > not > > > > > > blocking, > > > > > > >> > only > > > > > > >> > > > the > > > > > > >> > > > > > >> >> following > > > > > > >> > > > > > >> >> > >> > poll() > > > > > > >> > > > > > >> >> > >> > > > > call > > > > > > >> > > > > > >> >> > >> > > > > >> may > > > > > > >> > > > > > >> >> > >> > > > > >> > > be blocking as the > actually > > > > > metadata > > > > > > >> rq > > > > > > >> > > will > > > > > > >> > > > > > >> happen. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > 2. I saw you did not > include > > > > > > >> > > > > > >> Consumer.partitionFor(), > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > Consumer.OffsetAndTimestamp() > > > > and > > > > > > >> > > > > > >> >> Consumer.listTopics() > > > > > > >> > > > > > >> >> > in > > > > > > >> > > > > > >> >> > >> > your > > > > > > >> > > > > > >> >> > >> > > > KIP. > > > > > > >> > > > > > >> >> > >> > > > > >> > After > > > > > > >> > > > > > >> >> > >> > > > > >> > > a second thought, I think > > this > > > > may > > > > > > be > > > > > > >> a > > > > > > >> > > > better > > > > > > >> > > > > > >> idea to > > > > > > >> > > > > > >> >> > not > > > > > > >> > > > > > >> >> > >> > > tackle > > > > > > >> > > > > > >> >> > >> > > > > >> them in > > > > > > >> > > > > > >> >> > >> > > > > >> > > the same KIP, and probably > > we > > > > > should > > > > > > >> > > consider > > > > > > >> > > > > > >> whether > > > > > > >> > > > > > >> >> we > > > > > > >> > > > > > >> >> > >> would > > > > > > >> > > > > > >> >> > >> > > > > change > > > > > > >> > > > > > >> >> > >> > > > > >> the > > > > > > >> > > > > > >> >> > >> > > > > >> > > behavior or not in another > > > > > > discussion. > > > > > > >> > So I > > > > > > >> > > > > agree > > > > > > >> > > > > > >> to > > > > > > >> > > > > > >> >> not > > > > > > >> > > > > > >> >> > >> > include > > > > > > >> > > > > > >> >> > >> > > > > them. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > 3. In your wiki you > > mentioned > > > > > > "Another > > > > > > >> > > change > > > > > > >> > > > > > >> shall be > > > > > > >> > > > > > >> >> > >> made to > > > > > > >> > > > > > >> >> > >> > > > > >> > > KafkaConsumer#poll(), due > to > > > its > > > > > > call > > > > > > >> to > > > > > > >> > > > > > >> >> > >> > updateFetchPositions() > > > > > > >> > > > > > >> >> > >> > > > > which > > > > > > >> > > > > > >> >> > >> > > > > >> > > blocks indefinitely." This > > > part > > > > > may > > > > > > a > > > > > > >> bit > > > > > > >> > > > > obscure > > > > > > >> > > > > > >> to > > > > > > >> > > > > > >> >> most > > > > > > >> > > > > > >> >> > >> > > readers > > > > > > >> > > > > > >> >> > >> > > > > >> who's > > > > > > >> > > > > > >> >> > >> > > > > >> > not > > > > > > >> > > > > > >> >> > >> > > > > >> > > familiar with the > > > KafkaConsumer > > > > > > >> > internals, > > > > > > >> > > > > could > > > > > > >> > > > > > >> you > > > > > > >> > > > > > >> >> > please > > > > > > >> > > > > > >> >> > >> > add > > > > > > >> > > > > > >> >> > >> > > > more > > > > > > >> > > > > > >> >> > >> > > > > >> > > elaborations. More > > > > specifically, I > > > > > > >> think > > > > > > >> > > the > > > > > > >> > > > > root > > > > > > >> > > > > > >> >> causes > > > > > > >> > > > > > >> >> > of > > > > > > >> > > > > > >> >> > >> > the > > > > > > >> > > > > > >> >> > >> > > > > public > > > > > > >> > > > > > >> >> > >> > > > > >> > APIs > > > > > > >> > > > > > >> >> > >> > > > > >> > > mentioned are a bit > > different > > > > > while > > > > > > >> the > > > > > > >> > > KIP's > > > > > > >> > > > > > >> >> explanation > > > > > > >> > > > > > >> >> > >> > sounds > > > > > > >> > > > > > >> >> > >> > > > > like > > > > > > >> > > > > > >> >> > >> > > > > >> > they > > > > > > >> > > > > > >> >> > >> > > > > >> > > are due to the same > reason: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > 3.1 > fetchCommittedOffsets(): > > > > this > > > > > > >> > internal > > > > > > >> > > > call > > > > > > >> > > > > > >> will > > > > > > >> > > > > > >> >> > block > > > > > > >> > > > > > >> >> > >> > > forever > > > > > > >> > > > > > >> >> > >> > > > > if > > > > > > >> > > > > > >> >> > >> > > > > >> the > > > > > > >> > > > > > >> >> > >> > > > > >> > > committed offsets cannot > be > > > > > fetched > > > > > > >> > > > > successfully > > > > > > >> > > > > > >> and > > > > > > >> > > > > > >> >> > affect > > > > > > >> > > > > > >> >> > >> > > > > position() > > > > > > >> > > > > > >> >> > >> > > > > >> > and > > > > > > >> > > > > > >> >> > >> > > > > >> > > committed(). We need to > > break > > > > out > > > > > of > > > > > > >> its > > > > > > >> > > > > internal > > > > > > >> > > > > > >> >> while > > > > > > >> > > > > > >> >> > >> loop. > > > > > > >> > > > > > >> >> > >> > > > > >> > > 3.2 position() itself will > > > while > > > > > > loop > > > > > > >> > when > > > > > > >> > > > > > offsets > > > > > > >> > > > > > >> >> cannot > > > > > > >> > > > > > >> >> > >> be > > > > > > >> > > > > > >> >> > >> > > > > >> retrieved in > > > > > > >> > > > > > >> >> > >> > > > > >> > > the underlying async call. > > We > > > > need > > > > > > to > > > > > > >> > break > > > > > > >> > > > out > > > > > > >> > > > > > >> this > > > > > > >> > > > > > >> >> > while > > > > > > >> > > > > > >> >> > >> > loop. > > > > > > >> > > > > > >> >> > >> > > > > >> > > 3.3 commitSync() passed > > > > > > >> Long.MAX_VALUE as > > > > > > >> > > the > > > > > > >> > > > > > >> timeout > > > > > > >> > > > > > >> >> > >> value, > > > > > > >> > > > > > >> >> > >> > we > > > > > > >> > > > > > >> >> > >> > > > > should > > > > > > >> > > > > > >> >> > >> > > > > >> > take > > > > > > >> > > > > > >> >> > >> > > > > >> > > the user specified > timeouts > > > when > > > > > > >> > > applicable. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > On Sat, Mar 17, 2018 at > 4:44 > > > PM, > > > > > > >> Richard > > > > > > >> > > Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > Actually, what I said > > above > > > is > > > > > > >> > > inaccurate. > > > > > > >> > > > In > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > testSeekAndCommitWithBrokerFai > > > > > > >> lures, > > > > > > >> > > > > > >> >> > >> > TestUtils.waitUntilTrue > > > > > > >> > > > > > >> >> > >> > > > > >> blocks, > > > > > > >> > > > > > >> >> > >> > > > > >> > not > > > > > > >> > > > > > >> >> > >> > > > > >> > > > seek. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > My assumption is that > seek > > > did > > > > > not > > > > > > >> > update > > > > > > >> > > > > > >> >> correctly. I > > > > > > >> > > > > > >> >> > >> will > > > > > > >> > > > > > >> >> > >> > be > > > > > > >> > > > > > >> >> > >> > > > > >> digging > > > > > > >> > > > > > >> >> > >> > > > > >> > > > further into this. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > On Sat, Mar 17, 2018 at > > 4:16 > > > > PM, > > > > > > >> > Richard > > > > > > >> > > > Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > One more thing: when > > > looking > > > > > > >> through > > > > > > >> > > > > tests, I > > > > > > >> > > > > > >> have > > > > > > >> > > > > > >> >> > >> > realized > > > > > > >> > > > > > >> >> > >> > > > that > > > > > > >> > > > > > >> >> > >> > > > > >> > seek() > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > methods can > potentially > > > > block > > > > > > >> > > > indefinitely. > > > > > > >> > > > > > As > > > > > > >> > > > > > >> you > > > > > > >> > > > > > >> >> > well > > > > > > >> > > > > > >> >> > >> > > know, > > > > > > >> > > > > > >> >> > >> > > > > >> seek() > > > > > > >> > > > > > >> >> > >> > > > > >> > is > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > called when pollOnce() > > or > > > > > > >> position() > > > > > > >> > is > > > > > > >> > > > > > active. > > > > > > >> > > > > > >> >> Thus, > > > > > > >> > > > > > >> >> > >> if > > > > > > >> > > > > > >> >> > >> > > > > >> position() > > > > > > >> > > > > > >> >> > >> > > > > >> > > > blocks > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > indefinitely, then so > > > would > > > > > > >> seek(). > > > > > > >> > > > Should > > > > > > >> > > > > > >> >> bounding > > > > > > >> > > > > > >> >> > >> seek() > > > > > > >> > > > > > >> >> > >> > > > also > > > > > > >> > > > > > >> >> > >> > > > > be > > > > > > >> > > > > > >> >> > >> > > > > >> > > > included > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > in this KIP? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > Thanks, Richard > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > On Sat, Mar 17, 2018 > at > > > 1:16 > > > > > PM, > > > > > > >> > > Richard > > > > > > >> > > > > Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> Thanks for the > advice, > > > > Jason > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> I have modified > KIP-266 > > > to > > > > > > >> include > > > > > > >> > the > > > > > > >> > > > > java > > > > > > >> > > > > > >> doc > > > > > > >> > > > > > >> >> for > > > > > > >> > > > > > >> >> > >> > > > committed() > > > > > > >> > > > > > >> >> > >> > > > > >> and > > > > > > >> > > > > > >> >> > >> > > > > >> > > > other > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> blocking methods, > and I > > > > also > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> mentioned poll() > which > > > will > > > > > > also > > > > > > >> be > > > > > > >> > > > > bounded. > > > > > > >> > > > > > >> Let > > > > > > >> > > > > > >> >> me > > > > > > >> > > > > > >> >> > >> know > > > > > > >> > > > > > >> >> > >> > if > > > > > > >> > > > > > >> >> > >> > > > > >> there is > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> anything else. :) > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> Sincerely, Richard > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> On Sat, Mar 17, 2018 > at > > > > 12:00 > > > > > > PM, > > > > > > >> > > Jason > > > > > > >> > > > > > >> >> Gustafson < > > > > > > >> > > > > > >> >> > >> > > > > >> > ja...@confluent.io > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Hi Richard, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Thanks for the > > updates. > > > > I'm > > > > > > >> really > > > > > > >> > > glad > > > > > > >> > > > > you > > > > > > >> > > > > > >> >> picked > > > > > > >> > > > > > >> >> > >> this > > > > > > >> > > > > > >> >> > >> > > up. > > > > > > >> > > > > > >> >> > >> > > > A > > > > > > >> > > > > > >> >> > >> > > > > >> > couple > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> minor > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> comments: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> 1. Can you list the > > full > > > > set > > > > > > of > > > > > > >> new > > > > > > >> > > > APIs > > > > > > >> > > > > > >> >> explicitly > > > > > > >> > > > > > >> >> > >> in > > > > > > >> > > > > > >> >> > >> > the > > > > > > >> > > > > > >> >> > >> > > > > KIP? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Currently I > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> only see the javadoc > > for > > > > > > >> > > `position()`. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> 2. We should > consider > > > > adding > > > > > > >> > > `TimeUnit` > > > > > > >> > > > > to > > > > > > >> > > > > > >> the > > > > > > >> > > > > > >> >> new > > > > > > >> > > > > > >> >> > >> > methods > > > > > > >> > > > > > >> >> > >> > > > to > > > > > > >> > > > > > >> >> > >> > > > > >> avoid > > > > > > >> > > > > > >> >> > >> > > > > >> > > > unit > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> confusion. I know > it's > > > > > > >> inconsistent > > > > > > >> > > > with > > > > > > >> > > > > > the > > > > > > >> > > > > > >> >> poll() > > > > > > >> > > > > > >> >> > >> API, > > > > > > >> > > > > > >> >> > >> > > > but I > > > > > > >> > > > > > >> >> > >> > > > > >> > think > > > > > > >> > > > > > >> >> > >> > > > > >> > > it > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> was > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> probably a mistake > not > > > to > > > > > > >> include > > > > > > >> > it > > > > > > >> > > > > there, > > > > > > >> > > > > > >> so > > > > > > >> > > > > > >> >> > better > > > > > > >> > > > > > >> >> > >> > not > > > > > > >> > > > > > >> >> > >> > > to > > > > > > >> > > > > > >> >> > >> > > > > >> double > > > > > > >> > > > > > >> >> > >> > > > > >> > > > down > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> on > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> that mistake. And > note > > > > that > > > > > we > > > > > > >> do > > > > > > >> > > > already > > > > > > >> > > > > > >> have > > > > > > >> > > > > > >> >> > >> > > `close(long, > > > > > > >> > > > > > >> >> > >> > > > > >> > > TimeUnit)`. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Other than that, I > > think > > > > the > > > > > > >> > current > > > > > > >> > > > KIP > > > > > > >> > > > > > >> seems > > > > > > >> > > > > > >> >> > >> > reasonable. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Thanks, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> Jason > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> On Wed, Mar 14, 2018 > > at > > > > 5:00 > > > > > > PM, > > > > > > >> > > > Richard > > > > > > >> > > > > > Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > Note to all: I > have > > > > > included > > > > > > >> > > bounding > > > > > > >> > > > > > >> >> > commitSync() > > > > > > >> > > > > > >> >> > >> and > > > > > > >> > > > > > >> >> > >> > > > > >> > committed() > > > > > > >> > > > > > >> >> > >> > > > > >> > > in > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> this > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > KIP. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > On Sun, Mar 11, > 2018 > > > at > > > > > 5:05 > > > > > > >> PM, > > > > > > >> > > > > Richard > > > > > > >> > > > > > >> Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > Hi all, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > I updated the > KIP > > > > where > > > > > > >> > > overloading > > > > > > >> > > > > > >> >> position() > > > > > > >> > > > > > >> >> > is > > > > > > >> > > > > > >> >> > >> > now > > > > > > >> > > > > > >> >> > >> > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > favored > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > approach. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > Bounding > > position() > > > > > using > > > > > > >> > > > > > >> requestTimeoutMs > > > > > > >> > > > > > >> >> has > > > > > > >> > > > > > >> >> > >> been > > > > > > >> > > > > > >> >> > >> > > > listed > > > > > > >> > > > > > >> >> > >> > > > > >> as > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> rejected. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > Any thoughts? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > On Tue, Mar 6, > > 2018 > > > at > > > > > > 6:00 > > > > > > >> PM, > > > > > > >> > > > > > Guozhang > > > > > > >> > > > > > >> >> Wang < > > > > > > >> > > > > > >> >> > >> > > > > >> > > wangg...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> I agree that > > adding > > > > the > > > > > > >> > > overloads > > > > > > >> > > > is > > > > > > >> > > > > > >> most > > > > > > >> > > > > > >> >> > >> flexible. > > > > > > >> > > > > > >> >> > >> > > But > > > > > > >> > > > > > >> >> > >> > > > > >> going > > > > > > >> > > > > > >> >> > >> > > > > >> > > for > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> that > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> direction we'd > do > > > > that > > > > > > for > > > > > > >> all > > > > > > >> > > the > > > > > > >> > > > > > >> blocking > > > > > > >> > > > > > >> >> > call > > > > > > >> > > > > > >> >> > >> > that > > > > > > >> > > > > > >> >> > >> > > > > I've > > > > > > >> > > > > > >> >> > >> > > > > >> > > listed > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> above, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> with this > timeout > > > > value > > > > > > >> > covering > > > > > > >> > > > the > > > > > > >> > > > > > >> >> > end-to-end > > > > > > >> > > > > > >> >> > >> > > waiting > > > > > > >> > > > > > >> >> > >> > > > > >> time. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> On Tue, Mar 6, > > 2018 > > > > at > > > > > > >> 10:02 > > > > > > >> > AM, > > > > > > >> > > > Ted > > > > > > >> > > > > > Yu > > > > > > >> > > > > > >> < > > > > > > >> > > > > > >> >> > >> > > > > >> yuzhih...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > bq. The most > > > > flexible > > > > > > >> option > > > > > > >> > > is > > > > > > >> > > > to > > > > > > >> > > > > > add > > > > > > >> > > > > > >> >> > >> overloads > > > > > > >> > > > > > >> >> > >> > to > > > > > > >> > > > > > >> >> > >> > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > > consumer > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > This option > is > > > > > > flexible. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > Looking at > the > > > tail > > > > > of > > > > > > >> > > > > SPARK-18057, > > > > > > >> > > > > > >> Spark > > > > > > >> > > > > > >> >> > dev > > > > > > >> > > > > > >> >> > >> > > voiced > > > > > > >> > > > > > >> >> > >> > > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > same > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> choice. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > +1 for adding > > > > > overload > > > > > > >> with > > > > > > >> > > > > timeout > > > > > > >> > > > > > >> >> > parameter. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > Cheers > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > On Mon, Mar > 5, > > > 2018 > > > > > at > > > > > > >> 2:42 > > > > > > >> > > PM, > > > > > > >> > > > > > Jason > > > > > > >> > > > > > >> >> > >> Gustafson < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> ja...@confluent.io> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > @Guozhang I > > > > > probably > > > > > > >> have > > > > > > >> > > > > > suggested > > > > > > >> > > > > > >> all > > > > > > >> > > > > > >> >> > >> options > > > > > > >> > > > > > >> >> > >> > > at > > > > > > >> > > > > > >> >> > >> > > > > some > > > > > > >> > > > > > >> >> > >> > > > > >> > > point > > > > > > >> > > > > > >> >> > >> > > > > >> > > > or > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> another, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > including > > most > > > > > > >> recently, > > > > > > >> > the > > > > > > >> > > > > > current > > > > > > >> > > > > > >> >> KIP! > > > > > > >> > > > > > >> >> > I > > > > > > >> > > > > > >> >> > >> was > > > > > > >> > > > > > >> >> > >> > > > > >> thinking > > > > > > >> > > > > > >> >> > >> > > > > >> > > that > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> practically > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > speaking, > the > > > > > request > > > > > > >> > > timeout > > > > > > >> > > > > > >> defines > > > > > > >> > > > > > >> >> how > > > > > > >> > > > > > >> >> > >> long > > > > > > >> > > > > > >> >> > >> > > the > > > > > > >> > > > > > >> >> > >> > > > > >> user is > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> willing > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > to > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > wait > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > for a > > response. > > > > The > > > > > > >> > consumer > > > > > > >> > > > > > doesn't > > > > > > >> > > > > > >> >> > really > > > > > > >> > > > > > >> >> > >> > have > > > > > > >> > > > > > >> >> > >> > > a > > > > > > >> > > > > > >> >> > >> > > > > >> complex > > > > > > >> > > > > > >> >> > >> > > > > >> > > > send > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> process > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > like the > > > producer > > > > > for > > > > > > >> any > > > > > > >> > of > > > > > > >> > > > > these > > > > > > >> > > > > > >> >> APIs, > > > > > > >> > > > > > >> >> > so > > > > > > >> > > > > > >> >> > >> I > > > > > > >> > > > > > >> >> > >> > > > wasn't > > > > > > >> > > > > > >> >> > >> > > > > >> sure > > > > > > >> > > > > > >> >> > >> > > > > >> > > how > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> much > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > benefit > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > there would > > be > > > > from > > > > > > >> having > > > > > > >> > > > more > > > > > > >> > > > > > >> >> granular > > > > > > >> > > > > > >> >> > >> > control > > > > > > >> > > > > > >> >> > >> > > > over > > > > > > >> > > > > > >> >> > >> > > > > >> > > timeouts > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> (in > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > the > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > end, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > KIP-91 just > > > adds > > > > a > > > > > > >> single > > > > > > >> > > > > timeout > > > > > > >> > > > > > to > > > > > > >> > > > > > >> >> > control > > > > > > >> > > > > > >> >> > >> > the > > > > > > >> > > > > > >> >> > >> > > > > whole > > > > > > >> > > > > > >> >> > >> > > > > >> > > send). > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> That > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> said, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > it > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > might > indeed > > be > > > > > > better > > > > > > >> to > > > > > > >> > > > avoid > > > > > > >> > > > > > >> >> > overloading > > > > > > >> > > > > > >> >> > >> the > > > > > > >> > > > > > >> >> > >> > > > > config > > > > > > >> > > > > > >> >> > >> > > > > >> as > > > > > > >> > > > > > >> >> > >> > > > > >> > > you > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > suggest > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > since > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > at least it > > > > avoids > > > > > > >> > > > inconsistency > > > > > > >> > > > > > >> with > > > > > > >> > > > > > >> >> the > > > > > > >> > > > > > >> >> > >> > > > producer's > > > > > > >> > > > > > >> >> > >> > > > > >> > usage. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > The most > > > flexible > > > > > > >> option > > > > > > >> > is > > > > > > >> > > to > > > > > > >> > > > > add > > > > > > >> > > > > > >> >> > >> overloads to > > > > > > >> > > > > > >> >> > >> > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > consumer > > > > > > >> > > > > > >> >> > >> > > > > >> > > > so > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> that > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > users > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > can pass > the > > > > > timeout > > > > > > >> > > directly. > > > > > > >> > > > > I'm > > > > > > >> > > > > > >> not > > > > > > >> > > > > > >> >> > sure > > > > > > >> > > > > > >> >> > >> if > > > > > > >> > > > > > >> >> > >> > > that > > > > > > >> > > > > > >> >> > >> > > > > is > > > > > > >> > > > > > >> >> > >> > > > > >> > more > > > > > > >> > > > > > >> >> > >> > > > > >> > > or > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> less > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > annoying > > than a > > > > new > > > > > > >> > config, > > > > > > >> > > > but > > > > > > >> > > > > > I've > > > > > > >> > > > > > >> >> found > > > > > > >> > > > > > >> >> > >> > config > > > > > > >> > > > > > >> >> > >> > > > > >> > timeouts a > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> little > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > constraining > > in > > > > > > >> practice. > > > > > > >> > > For > > > > > > >> > > > > > >> example, > > > > > > >> > > > > > >> >> I > > > > > > >> > > > > > >> >> > >> could > > > > > > >> > > > > > >> >> > >> > > > > imagine > > > > > > >> > > > > > >> >> > >> > > > > >> > users > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> wanting > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> to > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > wait longer > > for > > > > an > > > > > > >> offset > > > > > > >> > > > commit > > > > > > >> > > > > > >> >> operation > > > > > > >> > > > > > >> >> > >> > than a > > > > > > >> > > > > > >> >> > >> > > > > >> position > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> lookup; > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > if > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> the > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > latter > isn't > > > > > timely, > > > > > > >> users > > > > > > >> > > can > > > > > > >> > > > > > just > > > > > > >> > > > > > >> >> pause > > > > > > >> > > > > > >> >> > >> the > > > > > > >> > > > > > >> >> > >> > > > > partition > > > > > > >> > > > > > >> >> > >> > > > > >> > and > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> continue > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > fetching on > > > > others. > > > > > > If > > > > > > >> you > > > > > > >> > > > > cannot > > > > > > >> > > > > > >> >> commit > > > > > > >> > > > > > >> >> > >> > offsets, > > > > > > >> > > > > > >> >> > >> > > > > >> however, > > > > > > >> > > > > > >> >> > >> > > > > >> > > it > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> might > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > be > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > safer for > an > > > > > > >> application > > > > > > >> > to > > > > > > >> > > > wait > > > > > > >> > > > > > >> >> > >> availability > > > > > > >> > > > > > >> >> > >> > of > > > > > > >> > > > > > >> >> > >> > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > > > coordinator > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > than > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > continuing. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > -Jason > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > On Sun, Mar > > 4, > > > > 2018 > > > > > > at > > > > > > >> > 10:14 > > > > > > >> > > > PM, > > > > > > >> > > > > > >> >> Guozhang > > > > > > >> > > > > > >> >> > >> Wang > > > > > > >> > > > > > >> >> > >> > < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> wangg...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > Hello > > > Richard, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > Thanks > for > > > the > > > > > > >> proposed > > > > > > >> > > > KIP. I > > > > > > >> > > > > > >> have a > > > > > > >> > > > > > >> >> > >> couple > > > > > > >> > > > > > >> >> > >> > of > > > > > > >> > > > > > >> >> > >> > > > > >> general > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> comments: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > 1. I'm > not > > > sure > > > > > if > > > > > > >> > > > > piggy-backing > > > > > > >> > > > > > >> the > > > > > > >> > > > > > >> >> > >> timeout > > > > > > >> > > > > > >> >> > >> > > > > >> exception > > > > > > >> > > > > > >> >> > >> > > > > >> > on > > > > > > >> > > > > > >> >> > >> > > > > >> > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > existing > > > > > > >> > requestTimeoutMs > > > > > > >> > > > > > >> configured > > > > > > >> > > > > > >> >> in > > > > > > >> > > > > > >> >> > " > > > > > > >> > > > > > >> >> > >> > > > > >> > > request.timeout.ms > > > > > > >> > > > > > >> >> > >> > > > > >> > > > " > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> is a > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> good > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > idea > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > since a) > it > > > is > > > > a > > > > > > >> general > > > > > > >> > > > > config > > > > > > >> > > > > > >> that > > > > > > >> > > > > > >> >> > >> applies > > > > > > >> > > > > > >> >> > >> > > for > > > > > > >> > > > > > >> >> > >> > > > > all > > > > > > >> > > > > > >> >> > >> > > > > >> > types > > > > > > >> > > > > > >> >> > >> > > > > >> > > > of > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> requests, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > and > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > 2) using > it > > > to > > > > > > cover > > > > > > >> all > > > > > > >> > > the > > > > > > >> > > > > > >> phases > > > > > > >> > > > > > >> >> of > > > > > > >> > > > > > >> >> > an > > > > > > >> > > > > > >> >> > >> API > > > > > > >> > > > > > >> >> > >> > > > call, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > including > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> network > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > round > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > trip and > > > > > potential > > > > > > >> > > metadata > > > > > > >> > > > > > >> refresh > > > > > > >> > > > > > >> >> is > > > > > > >> > > > > > >> >> > >> shown > > > > > > >> > > > > > >> >> > >> > to > > > > > > >> > > > > > >> >> > >> > > > not > > > > > > >> > > > > > >> >> > >> > > > > >> be a > > > > > > >> > > > > > >> >> > >> > > > > >> > > > good > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > idea, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> as > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > illustrated > > > in > > > > > > >> KIP-91: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > https://cwiki.apache.org/confl > > > > > > >> > > > > > >> >> > >> > > > > >> uence/display/KAFKA/KIP- > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > 91+Provide+Intuitive+User+ > > > > > > >> > > > > > >> >> > >> > > > Timeouts+in+The+Producer > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > In fact, > I > > > > think > > > > > in > > > > > > >> > > > KAFKA-4879 > > > > > > >> > > > > > >> which > > > > > > >> > > > > > >> >> is > > > > > > >> > > > > > >> >> > >> aimed > > > > > > >> > > > > > >> >> > >> > > for > > > > > > >> > > > > > >> >> > >> > > > > the > > > > > > >> > > > > > >> >> > >> > > > > >> > same > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> issue > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > as > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > KAFKA-6608, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > Jason has > > > > > suggested > > > > > > >> we > > > > > > >> > > use a > > > > > > >> > > > > new > > > > > > >> > > > > > >> >> config > > > > > > >> > > > > > >> >> > >> for > > > > > > >> > > > > > >> >> > >> > the > > > > > > >> > > > > > >> >> > >> > > > > API. > > > > > > >> > > > > > >> >> > >> > > > > >> > Maybe > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> this > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> would > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > be > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > a > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > more > > > intuitive > > > > > > manner > > > > > > >> > than > > > > > > >> > > > > > reusing > > > > > > >> > > > > > >> >> the > > > > > > >> > > > > > >> >> > >> > > > > >> > request.timeout.ms > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> config. > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > 2. > Besides > > > the > > > > > > >> > > > > > Consumer.position() > > > > > > >> > > > > > >> >> call, > > > > > > >> > > > > > >> >> > >> > there > > > > > > >> > > > > > >> >> > >> > > > are > > > > > > >> > > > > > >> >> > >> > > > > a > > > > > > >> > > > > > >> >> > >> > > > > >> > > couple > > > > > > >> > > > > > >> >> > >> > > > > >> > > > of > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > more > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > blocking > > > calls > > > > > > today > > > > > > >> > that > > > > > > >> > > > > could > > > > > > >> > > > > > >> >> result > > > > > > >> > > > > > >> >> > in > > > > > > >> > > > > > >> >> > >> > > > infinite > > > > > > >> > > > > > >> >> > >> > > > > >> > > blocking: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > Consumer.commitSync() > > > > > > >> > and > > > > > > >> > > > > > >> >> > >> > Consumer.committed(), > > > > > > >> > > > > > >> >> > >> > > > > >> should > > > > > > >> > > > > > >> >> > >> > > > > >> > > they > > > > > > >> > > > > > >> >> > >> > > > > >> > > > be > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > considered > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > in this > KIP > > > as > > > > > > well? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > 3. There > > are > > > a > > > > > few > > > > > > >> other > > > > > > >> > > > APIs > > > > > > >> > > > > > that > > > > > > >> > > > > > >> >> are > > > > > > >> > > > > > >> >> > >> today > > > > > > >> > > > > > >> >> > >> > > > > relying > > > > > > >> > > > > > >> >> > >> > > > > >> on > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > request.timeout.ms > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > already > for > > > > > > breaking > > > > > > >> the > > > > > > >> > > > > > infinite > > > > > > >> > > > > > >> >> > >> blocking, > > > > > > >> > > > > > >> >> > >> > > > namely > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> Consumer.partitionFor(), > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > Consumer.OffsetAndTimestamp() > > > > > > >> > > > > > and > > > > > > >> > > > > > >> >> > >> > > > > >> Consumer.listTopics(), > > > > > > >> > > > > > >> >> > >> > > > > >> > > if > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> we are > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > making > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > the other > > > > > blocking > > > > > > >> calls > > > > > > >> > > to > > > > > > >> > > > be > > > > > > >> > > > > > >> >> relying a > > > > > > >> > > > > > >> >> > >> new > > > > > > >> > > > > > >> >> > >> > > > config > > > > > > >> > > > > > >> >> > >> > > > > >> as > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> suggested > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > in > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> 1) > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > above, > > should > > > > we > > > > > > also > > > > > > >> > > change > > > > > > >> > > > > the > > > > > > >> > > > > > >> >> > >> semantics of > > > > > > >> > > > > > >> >> > >> > > > these > > > > > > >> > > > > > >> >> > >> > > > > >> API > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> functions > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> for > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > consistency? > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > On Sun, > Mar > > > 4, > > > > > 2018 > > > > > > >> at > > > > > > >> > > 11:13 > > > > > > >> > > > > AM, > > > > > > >> > > > > > >> >> Richard > > > > > > >> > > > > > >> >> > >> Yu < > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> yohan.richard...@gmail.com> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > wrote: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > Hi all, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > I would > > > like > > > > to > > > > > > >> > discuss > > > > > > >> > > a > > > > > > >> > > > > > >> potential > > > > > > >> > > > > > >> >> > >> change > > > > > > >> > > > > > >> >> > >> > > > which > > > > > > >> > > > > > >> >> > >> > > > > >> would > > > > > > >> > > > > > >> >> > >> > > > > >> > > be > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> made > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > to > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > KafkaConsumer: > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > > >> > > https://cwiki.apache.org/ > > > > > > >> > > > > > >> >> > >> > > > > confluence/pages/viewpage > > > > > > >> > > > > > >> >> > >> > > > > >> . > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> action?pageId=75974886 > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > Thanks, > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > Richard > > Yu > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > -- > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > -- > Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> -- > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> -- Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >>> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > >> > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > -- > > > > > > >> > > > > > >> >> > >> > > > > >> > > -- Guozhang > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > > >> > > > > > >> >> > >> > > > > >> > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > > >> > > > > > >> >> > >> > > > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > -- > > > > > > >> > > > > > >> >> > >> > -- Guozhang > > > > > > >> > > > > > >> >> > >> > > > > > > > >> > > > > > >> >> > >> > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > > > > > > > >> > > > > > >> >> > > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> >> -- > > > > > > >> > > > > > >> >> -- Guozhang > > > > > > >> > > > > > >> >> > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > > >> > > > > > >> > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > > >> > > > > > > > > > > > >> > > > > > > > > > > >> > > > > > > > > > >> > > > > > > > > >> > > > > > > > >> > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > -- > > > > > -- Guozhang > > > > > > > > > > > > > > >