Thanks Sophie, I think for KIP-441 the streams client would not need to
rely on the returned boolean flag so I was a bit confused before. Now I
understand it is for other use cases where users do not (or cannot) rely on
the returned assignment to decide if a rebalance is still requested so
checking on the flag is fine.

With that in mind the KIP LGTM.

Guozhang

On Wed, Feb 12, 2020 at 5:56 PM Sophie Blee-Goldman <sop...@confluent.io>
wrote:

> Ok, I think I see what you're getting at.
>
> No, we obviously would only want to trigger one additional rebalance after
> the current one completes since the next rebalance would of course have
> the metadata updates we want. But if enforceRebalance returns false a
> second time, we don't know whether it was due to a new rebalance or just
> the original rebalance taking a while. Even if we could, it's possible a
> new
> update came along at some point and it would get quite messy to keep track
> of when we do/don't need to retry.
>
> Except, of course, by checking the resulting assignment to see if it
> reflects
> the latest metadata that we think it should. Which can simply be done in
> the assignor#onAssignment method, since as pointed out in the javadocs
> usage of this API implies a custom assignor implementation.
>
> If we have to check the assignment anyway, I suppose there's no reason to
> return anything. My one outstanding concern is that some apps might not
> actually be able to detect whether the appropriate/latest metadata was used
> based on the resulting assignment. Obviously the assign algorithm is known
> to all members through their own assignor, but the cluster-wide metadata is
> not. I'm not quite convinced that all possible assignments would be as
> straightforward for each member to validate as in, for example, KIP-441
> where
> we just look for the active task.
>
> Perhaps my imagination is running wild here but I'm inclined to still
> return
> whether a new rebalance was triggered or not. It can always be ignored
>
> On Wed, Feb 12, 2020 at 5:18 PM Guozhang Wang <wangg...@gmail.com> wrote:
>
> > Hi Sophie,
> >
> > So just to clarify, with the updated API we would keep calling
> > enforceRebalance until it returns true for cases where we rely on it with
> > new subscription metadata?
> >
> > Guozhang
> >
> > On Wed, Feb 12, 2020 at 5:14 PM Sophie Blee-Goldman <sop...@confluent.io
> >
> > wrote:
> >
> > > Thanks Boyang -- makes sense to me. I've optimistically updated the KIP
> > > with this new signature and behavior.
> > >
> > >
> > > On Wed, Feb 12, 2020 at 4:27 PM Boyang Chen <
> reluctanthero...@gmail.com>
> > > wrote:
> > >
> > > > Hey Sophie,
> > > >
> > > > I'm satisfied with making enforceRebalance() not throwing any
> exception
> > > > other than illegal state. You could imagine this KIP is just making
> the
> > > > `rejoinNeededOrPending` external to user requests. Make it as
> > lightweight
> > > > as possible makes sense.
> > > >
> > > > Boyang
> > > >
> > > > On Wed, Feb 12, 2020 at 2:14 PM Sophie Blee-Goldman <
> > sop...@confluent.io
> > > >
> > > > wrote:
> > > >
> > > > > Hey Guozhang, thanks for the thorough reply!
> > > > >
> > > > > I definitely went back and forth on whether to make it a blocking
> > call,
> > > > > and ultimately went with blocking just to leave it open to
> potential
> > > > future
> > > > > use cases (in particular non-Streams apps). But on second (or
> third)
> > > > > thought I think I agree that no use case wouldn't be similarly
> > covered
> > > by
> > > > > just calling poll() immediately after enforceRebalance(). It seems
> > best
> > > > to
> > > > > leave all rebalancing action within the scope of poll alone and
> avoid
> > > > > introducing unnecessary complexity -- happy to revert this then.
> > > > >
> > > > > I think that ends up addressing most of your other concerns,
> although
> > > > > there's one I would push back on: this method should still
> explicitly
> > > > > call out whether a rebalance is already in progress and the call is
> > > thus
> > > > > a no-op. If throwing a RebalanceInProgressException seems too
> > > > > heavy maybe we can just return a boolean indicating whether a new
> > > > > rebalance was triggered or not.
> > > > >
> > > > > The snippet you included does work around this, by checking the
> > > > > condition again in the rebalance listener. But I would argue that
> a)
> > > many
> > > > > applications don't use a rebalance listener, and shouldn't be
> forced
> > to
> > > > > implement it to fully use this new API. More importantly, since you
> > can
> > > > > probably use the assignor's onAssignment method to achieve the same
> > > > > thing, b) it adds unnecessary complexity, and as we've seen in
> > Streams
> > > > > the interactions between the rebalance callbacks and main consumer
> > > > > can already get quite ugly.
> > > > >
> > > > > For simplicity's sake then, I'll propose to just return the bool
> over
> > > the
> > > > > exception and change the signature to
> > > > >
> > > > > /**
> > > > >  * @return Whether a new rebalance was triggered (false if a
> > rebalance
> > > > was
> > > > > already in progress)
> > > > >  * @throws java.lang.IllegalStateException if the consumer does not
> > use
> > > > > group subscription
> > > > >  */
> > > > > boolean enforceRebalance();
> > > > >
> > > > > Thoughts?
> > > > >
> > > > > On Tue, Feb 11, 2020 at 5:29 PM Guozhang Wang <wangg...@gmail.com>
> > > > wrote:
> > > > >
> > > > > > Hello Sophie, thanks for brining up this KIP, and the great
> > write-up
> > > > > > summarizing the motivations of the proposal. Here are some
> > comments:
> > > > > >
> > > > > > Minor:
> > > > > >
> > > > > > 1. If we want to make it a blocking call (I have some thoughts
> > about
> > > > this
> > > > > > below :), to be consistent we need to consider having two
> > overloaded
> > > > > > function, one without the timeout which then relies on `
> > > > > > DEFAULT_API_TIMEOUT_MS_CONFIG`.
> > > > > >
> > > > > > 2. Also I'd suggest that, again for API consistency, we a) throw
> > > > > > TimeoutException if the operation cannot be completed within the
> > > > timeout
> > > > > > value, b) return false immediately if we cannot trigger a
> rebalance
> > > > > either
> > > > > > because coordinator is unknown.
> > > > > >
> > > > > > Meta:
> > > > > >
> > > > > > 3. I'm not sure if we have a concrete scenario that we want to
> wait
> > > > until
> > > > > > the rebalance is completed in KIP-441 / 268, rather than calling
> > > > > > "consumer.enforceRebalance(); consumer.poll()" consecutively and
> > try
> > > to
> > > > > > execute the rebalance in the poll call? If there's no valid
> > > motivations
> > > > > I'm
> > > > > > still a bit inclined to make it non-blocking (i.e. just setting a
> > bit
> > > > and
> > > > > > then execute the process in the later poll call) similar to our
> > > `seek`
> > > > > > functions. By doing this we can also make this function simpler
> as
> > it
> > > > > would
> > > > > > never throw RebalanceInProgress or Timeout or even
> KafkaExceptions.
> > > > > >
> > > > > > 4. Re: the case "when a rebalance is already in progress", this
> may
> > > be
> > > > > > related to 3) above. I think we can simplify this case as well
> but
> > > just
> > > > > not
> > > > > > triggering a new rebalance and let the the caller handle it: for
> > > > example
> > > > > in
> > > > > > KIP-441, in each iteration of the stream thread, we can if a
> > standby
> > > > task
> > > > > > is ready, and if yes we call `enforceRebalance`, if there's
> > already a
> > > > > > rebalance in progress (either with the new subscription metadata,
> > or
> > > > not)
> > > > > > this call would be a no-op, and then in the next iteration we
> would
> > > > just
> > > > > > call that function again, and eventually we would trigger the
> > > rebalance
> > > > > > with the new subscription metadata and previous calls would be
> > no-op
> > > > and
> > > > > > hence no cost anyways. I feel this would be simpler than letting
> > the
> > > > > caller
> > > > > > to capture RebalanceInProgressException:
> > > > > >
> > > > > >
> > > > > > mainProcessingLoop() {
> > > > > >     if (needsRebalance) {
> > > > > >         consumer.enforceRebalance();
> > > > > >     }
> > > > > >
> > > > > >     records = consumer.poll();
> > > > > >     ...
> > > > > >     // do some processing
> > > > > > }
> > > > > >
> > > > > > RebalanceListener {
> > > > > >
> > > > > >    onPartitionsAssigned(...) {
> > > > > >       if (rebalanceGoalAchieved()) {
> > > > > >         needsRebalance = false;
> > > > > >       }
> > > > > >     }
> > > > > > }
> > > > > >
> > > > > >
> > > > > > WDYT?
> > > > > >
> > > > > >
> > > > > >
> > > > > >
> > > > > > On Tue, Feb 11, 2020 at 3:59 PM Sophie Blee-Goldman <
> > > > sop...@confluent.io
> > > > > >
> > > > > > wrote:
> > > > > >
> > > > > > > Hey Boyang,
> > > > > > >
> > > > > > > Originally I had it as a nonblocking call, but decided to
> change
> > it
> > > > to
> > > > > > > blocking
> > > > > > > with a timeout parameter. I'm not sure a future makes sense to
> > > return
> > > > > > here,
> > > > > > > because the rebalance either does or does not complete within
> the
> > > > > > timeout:
> > > > > > > if it does not, you will have to call poll again to complete it
> > (as
> > > > is
> > > > > > the
> > > > > > > case with
> > > > > > > any other rebalance). I'll call this out in the javadocs as
> well.
> > > > > > >
> > > > > > > I also added an example demonstrating how/when to use this new
> > API.
> > > > > > >
> > > > > > > Thanks!
> > > > > > >
> > > > > > > On Tue, Feb 11, 2020 at 1:49 PM Boyang Chen <
> > > > > reluctanthero...@gmail.com>
> > > > > > > wrote:
> > > > > > >
> > > > > > > > Hey Sophie,
> > > > > > > >
> > > > > > > > is the `enforceRebalance` a blocking call? Could we add a
> code
> > > > sample
> > > > > > to
> > > > > > > > the KIP on how this API should be used?
> > > > > > > >
> > > > > > > > Returning a future instead of a boolean might be easier as we
> > are
> > > > > > > allowing
> > > > > > > > consumer to make progress during rebalance after 429 IMHO.
> > > > > > > >
> > > > > > > > Boyang
> > > > > > > >
> > > > > > > >
> > > > > > > > On Tue, Feb 11, 2020 at 1:17 PM Konstantine Karantasis <
> > > > > > > > konstant...@confluent.io> wrote:
> > > > > > > >
> > > > > > > > > Thanks for the quick turnaround Sophie. My points have been
> > > > > > addressed.
> > > > > > > > > I think the intended use is quite clear now.
> > > > > > > > >
> > > > > > > > > Best,
> > > > > > > > > Konstantine
> > > > > > > > >
> > > > > > > > >
> > > > > > > > > On Tue, Feb 11, 2020 at 12:57 PM Sophie Blee-Goldman <
> > > > > > > > sop...@confluent.io>
> > > > > > > > > wrote:
> > > > > > > > >
> > > > > > > > > > Konstantine,
> > > > > > > > > > Thanks for the feedback! I've updated the sections with
> > your
> > > > > > > > > suggestions. I
> > > > > > > > > > agree
> > > > > > > > > > in particular that it's really important to make sure
> users
> > > > don't
> > > > > > > call
> > > > > > > > > this
> > > > > > > > > > unnecessarily,
> > > > > > > > > >  or for the wrong reasons: to that end I also extended
> the
> > > > > javadocs
> > > > > > > to
> > > > > > > > > > specify that this
> > > > > > > > > > API is for when changes to the subscription userdata
> occur.
> > > > > > Hopefully
> > > > > > > > > that
> > > > > > > > > > should make
> > > > > > > > > > its intended usage quite clear.
> > > > > > > > > >
> > > > > > > > > > Bill,
> > > > > > > > > > The rebalance triggered by this new API will be a
> "normal"
> > > > > > rebalance,
> > > > > > > > and
> > > > > > > > > > therefore
> > > > > > > > > > follow the existing listener semantics. For example a
> > > > cooperative
> > > > > > > > > rebalance
> > > > > > > > > > will always
> > > > > > > > > > call onPartitionsAssigned, even if no partitions are
> > actually
> > > > > > moved.
> > > > > > > > > > An eager rebalance will still revoke all partitions first
> > > > anyway.
> > > > > > > > > >
> > > > > > > > > > Thanks for the feedback!
> > > > > > > > > > Sophie
> > > > > > > > > >
> > > > > > > > > > On Tue, Feb 11, 2020 at 9:52 AM Bill Bejeck <
> > > bbej...@gmail.com
> > > > >
> > > > > > > wrote:
> > > > > > > > > >
> > > > > > > > > > > Hi Sophie,
> > > > > > > > > > >
> > > > > > > > > > > Thanks for the KIP, makes sense to me.
> > > > > > > > > > >
> > > > > > > > > > > One quick question, I'm not sure if it's relevant or
> not.
> > > > > > > > > > >
> > > > > > > > > > > If a user provides a `ConsumerRebalanceListener` and a
> > > > > rebalance
> > > > > > is
> > > > > > > > > > > triggered from an `enforceRebalance`  call,
> > > > > > > > > > > it seems possible the listener won't get called since
> > > > partition
> > > > > > > > > > assignments
> > > > > > > > > > > might not change.
> > > > > > > > > > > If that is the case, do we want to possibly consider
> > > adding a
> > > > > > > method
> > > > > > > > to
> > > > > > > > > > the
> > > > > > > > > > > `ConsumerRebalanceListener` for callbacks on
> > > > `enforceRebalance`
> > > > > > > > > actions?
> > > > > > > > > > >
> > > > > > > > > > > Thanks,
> > > > > > > > > > > Bill
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > > > On Tue, Feb 11, 2020 at 12:11 PM Konstantine
> Karantasis <
> > > > > > > > > > > konstant...@confluent.io> wrote:
> > > > > > > > > > >
> > > > > > > > > > > > Hi Sophie.
> > > > > > > > > > > >
> > > > > > > > > > > > Thanks for the KIP. I liked how focused the proposal
> > is.
> > > > > Also,
> > > > > > > its
> > > > > > > > > > > > motivation is clear after carefully reading the KIP
> and
> > > its
> > > > > > > > > references.
> > > > > > > > > > > >
> > > > > > > > > > > > Yet, I think it'd be a good idea to call out
> explicitly
> > > on
> > > > > the
> > > > > > > > > Rejected
> > > > > > > > > > > > Alternatives section that an automatic and periodic
> > > > > triggering
> > > > > > of
> > > > > > > > > > > > rebalances that would not require exposing this
> > > capability
> > > > > > > through
> > > > > > > > > the
> > > > > > > > > > > > Consumer interface does not cover your specific use
> > cases
> > > > and
> > > > > > > > > therefore
> > > > > > > > > > > is
> > > > > > > > > > > > not chosen as a desired approach. Maybe, even
> consider
> > > > > > mentioning
> > > > > > > > > again
> > > > > > > > > > > > here that this method is expected to be used to
> respond
> > > to
> > > > > > system
> > > > > > > > > > changes
> > > > > > > > > > > > external to the consumer and its membership logic and
> > is
> > > > not
> > > > > > > > proposed
> > > > > > > > > > as
> > > > > > > > > > > a
> > > > > > > > > > > > way to resolve temporary imbalances due to membership
> > > > changes
> > > > > > > that
> > > > > > > > > > should
> > > > > > > > > > > > inherently be resolved by the assignor logic itself
> > with
> > > > one
> > > > > or
> > > > > > > > more
> > > > > > > > > > > > consecutive rebalances.
> > > > > > > > > > > >
> > > > > > > > > > > > Also, in your javadoc I'd add some context similar to
> > > what
> > > > > > > someone
> > > > > > > > > can
> > > > > > > > > > > read
> > > > > > > > > > > > on the KIP. Specifically where you say: "for example
> if
> > > > some
> > > > > > > > > condition
> > > > > > > > > > > has
> > > > > > > > > > > > changed that has implications for the partition
> > > > assignment."
> > > > > > I'd
> > > > > > > > > rather
> > > > > > > > > > > add
> > > > > > > > > > > > something like "for example, if some condition
> external
> > > and
> > > > > > > > invisible
> > > > > > > > > > to
> > > > > > > > > > > > the Consumer and its group membership has changed in
> > ways
> > > > > that
> > > > > > > > would
> > > > > > > > > > > > justify a new partition assignment". That's just an
> > > > example,
> > > > > > feel
> > > > > > > > > free
> > > > > > > > > > to
> > > > > > > > > > > > reword, but I believe that saying explicitly that
> this
> > > > > > condition
> > > > > > > is
> > > > > > > > > not
> > > > > > > > > > > > visible to the consumer is useful to understand that
> > this
> > > > is
> > > > > > not
> > > > > > > > > > > necessary
> > > > > > > > > > > > under normal circumstances.
> > > > > > > > > > > >
> > > > > > > > > > > > In Compatibility, Deprecation, and Migration Plan
> > > section I
> > > > > > think
> > > > > > > > > it's
> > > > > > > > > > > > worth mentioning that this is a new feature that
> > affects
> > > > new
> > > > > > > > > > > > implementations of the Consumer interface and any
> such
> > > new
> > > > > > > > > > implementation
> > > > > > > > > > > > should override the new method. Implementations that
> > wish
> > > > to
> > > > > > > > upgrade
> > > > > > > > > > to a
> > > > > > > > > > > > newer version should be extended and recompiled,
> since
> > no
> > > > > > default
> > > > > > > > > > > > implementation will be provided.
> > > > > > > > > > > >
> > > > > > > > > > > > Naming is hard here, if someone wants to emphasize
> the
> > ad
> > > > hoc
> > > > > > and
> > > > > > > > > > > irregular
> > > > > > > > > > > > nature of this call. After some thought I'm fine with
> > > > > > > > > > 'enforceRebalance'
> > > > > > > > > > > > even if it could potentially be confused to a method
> > that
> > > > is
> > > > > > > > supposed
> > > > > > > > > > to
> > > > > > > > > > > be
> > > > > > > > > > > > called to remediate one or more previously
> unsuccessful
> > > > > > > rebalances
> > > > > > > > > > (which
> > > > > > > > > > > > is partly what StreamThread#enforceRebalance is used
> > > for).
> > > > > The
> > > > > > > > best I
> > > > > > > > > > > could
> > > > > > > > > > > > think of was 'onRequestRebalance' but that's not
> > perfect
> > > > > > either.
> > > > > > > > > > > >
> > > > > > > > > > > > Best,
> > > > > > > > > > > > Konstantine
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > On Mon, Feb 10, 2020 at 5:18 PM Sophie Blee-Goldman <
> > > > > > > > > > sop...@confluent.io
> > > > > > > > > > > >
> > > > > > > > > > > > wrote:
> > > > > > > > > > > >
> > > > > > > > > > > > > Thanks John. I took out the KafkaConsumer method
> and
> > > > moved
> > > > > > the
> > > > > > > > > > javadocs
> > > > > > > > > > > > > to the Consumer#enforceRebalance in the KIP -- hope
> > > > you're
> > > > > > > happy
> > > > > > > > :P
> > > > > > > > > > > > >
> > > > > > > > > > > > > Also, I wanted to point out one minor change to the
> > > > current
> > > > > > > > > proposal:
> > > > > > > > > > > > make
> > > > > > > > > > > > > this
> > > > > > > > > > > > > a blocking call, which accepts a timeout and
> returns
> > > > > whether
> > > > > > > the
> > > > > > > > > > > > rebalance
> > > > > > > > > > > > > completed within the timeout. It will still reduce
> > to a
> > > > > > > > nonblocking
> > > > > > > > > > > call
> > > > > > > > > > > > if
> > > > > > > > > > > > > a "zero"
> > > > > > > > > > > > > timeout is supplied. I've updated the KIP
> > accordingly.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Let me know if there are any further concerns, else
> > > I'll
> > > > > call
> > > > > > > > for a
> > > > > > > > > > > vote.
> > > > > > > > > > > > >
> > > > > > > > > > > > > Cheers!
> > > > > > > > > > > > > Sophie
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Mon, Feb 10, 2020 at 12:47 PM John Roesler <
> > > > > > > > vvcep...@apache.org
> > > > > > > > > >
> > > > > > > > > > > > wrote:
> > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks Sophie,
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Sorry I didn't respond. I think your new method
> > name
> > > > > sounds
> > > > > > > > good.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Regarding the interface vs implementation, I
> agree
> > > it's
> > > > > > > > > confusing.
> > > > > > > > > > > It's
> > > > > > > > > > > > > > always bothered me that the interface redirects
> you
> > > to
> > > > an
> > > > > > > > > > > > implementation
> > > > > > > > > > > > > > JavaDocs, but never enough for me to stop what
> I'm
> > > > doing
> > > > > to
> > > > > > > fix
> > > > > > > > > it.
> > > > > > > > > > > > > > It's not a big deal either way, I just thought it
> > was
> > > > > > strange
> > > > > > > > to
> > > > > > > > > > > > propose
> > > > > > > > > > > > > a
> > > > > > > > > > > > > > "public interface" change, but not in terms of
> the
> > > > actual
> > > > > > > > > interface
> > > > > > > > > > > > > class.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > It _is_ true that KafkaConsumer is also part of
> the
> > > > > public
> > > > > > > API,
> > > > > > > > > but
> > > > > > > > > > > > only
> > > > > > > > > > > > > > really
> > > > > > > > > > > > > > for the constructor. Any proposal to define a new
> > > > > "consumer
> > > > > > > > > client"
> > > > > > > > > > > API
> > > > > > > > > > > > > > should be on the Consumer interface (which you
> said
> > > you
> > > > > > plan
> > > > > > > to
> > > > > > > > > do
> > > > > > > > > > > > > anyway).
> > > > > > > > > > > > > > I guess I brought it up because proposing an
> > addition
> > > > to
> > > > > > > > Consumer
> > > > > > > > > > > > implies
> > > > > > > > > > > > > > it would be added to KafkaConsumer, but proposing
> > an
> > > > > > addition
> > > > > > > > to
> > > > > > > > > > > > > > KafkaConsumer does not necessarily imply it would
> > > also
> > > > be
> > > > > > > added
> > > > > > > > > to
> > > > > > > > > > > > > > Consumer. Does that make sense?
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Anyway, thanks for updating the KIP.
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > -John
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > On Mon, Feb 10, 2020, at 14:38, Sophie
> Blee-Goldman
> > > > > wrote:
> > > > > > > > > > > > > > > Since this doesn't seem too controversial, I'll
> > > > > probably
> > > > > > > call
> > > > > > > > > > for a
> > > > > > > > > > > > > vote
> > > > > > > > > > > > > > by
> > > > > > > > > > > > > > > end of day.
> > > > > > > > > > > > > > > If there any further
> comments/questions/concerns,
> > > > > please
> > > > > > > let
> > > > > > > > me
> > > > > > > > > > > know!
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > Sophie
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On Sat, Feb 8, 2020 at 12:19 AM Sophie
> > > Blee-Goldman <
> > > > > > > > > > > > > sop...@confluent.io
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Thanks for the feedback! That's a good point
> > > about
> > > > > > trying
> > > > > > > > to
> > > > > > > > > > > > prevent
> > > > > > > > > > > > > > users
> > > > > > > > > > > > > > > > from
> > > > > > > > > > > > > > > > thinking they should use this API during
> normal
> > > > > > > processing
> > > > > > > > > and
> > > > > > > > > > > > > > clarifying
> > > > > > > > > > > > > > > > when/why
> > > > > > > > > > > > > > > > you might need it -- regardless of the method
> > > name,
> > > > > we
> > > > > > > > should
> > > > > > > > > > > > > > explicitly
> > > > > > > > > > > > > > > > call this out
> > > > > > > > > > > > > > > > in the javadocs.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > As for the method name, on reflection I agree
> > > that
> > > > > > > > > > "rejoinGroup"
> > > > > > > > > > > > does
> > > > > > > > > > > > > > not
> > > > > > > > > > > > > > > > seem to be
> > > > > > > > > > > > > > > > appropriate. Of course that's what the
> consumer
> > > > will
> > > > > > > > actually
> > > > > > > > > > be
> > > > > > > > > > > > > doing,
> > > > > > > > > > > > > > > > but that's just an
> > > > > > > > > > > > > > > > implementation detail -- the name should
> > reflect
> > > > what
> > > > > > the
> > > > > > > > API
> > > > > > > > > > is
> > > > > > > > > > > > > doing,
> > > > > > > > > > > > > > > > not how it does it
> > > > > > > > > > > > > > > > (which can always change).
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > How about "enforceRebalance"? This is stolen
> > from
> > > > the
> > > > > > > > > > > StreamThread
> > > > > > > > > > > > > > method
> > > > > > > > > > > > > > > > that does
> > > > > > > > > > > > > > > > exactly this (by unsubscribing) so it seems
> to
> > > fit.
> > > > > > I'll
> > > > > > > > > update
> > > > > > > > > > > the
> > > > > > > > > > > > > KIP
> > > > > > > > > > > > > > > > with this unless anyone
> > > > > > > > > > > > > > > > has another suggestion.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Regarding the Consumer vs KafkaConsumer
> > matter, I
> > > > > > > included
> > > > > > > > > the
> > > > > > > > > > > > > > > > KafkaConsumer method
> > > > > > > > > > > > > > > > because that's where all the javadocs
> redirect
> > to
> > > > in
> > > > > > the
> > > > > > > > > > Consumer
> > > > > > > > > > > > > > > > interface. Also, FWIW
> > > > > > > > > > > > > > > > I'm pretty sure KafkaConsumer is also part of
> > the
> > > > > > public
> > > > > > > > API
> > > > > > > > > --
> > > > > > > > > > > we
> > > > > > > > > > > > > > would
> > > > > > > > > > > > > > > > be adding a new
> > > > > > > > > > > > > > > > method to both.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > On Fri, Feb 7, 2020 at 7:42 PM John Roesler <
> > > > > > > > > > vvcep...@apache.org
> > > > > > > > > > > >
> > > > > > > > > > > > > > wrote:
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >> Hi all,
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> Thanks for the well motivated KIP, Sophie. I
> > had
> > > > > some
> > > > > > > > > > > alternatives
> > > > > > > > > > > > > in
> > > > > > > > > > > > > > > >> mind, which
> > > > > > > > > > > > > > > >> I won't even bother to relate because I feel
> > > like
> > > > > the
> > > > > > > > > > motivation
> > > > > > > > > > > > > made
> > > > > > > > > > > > > > a
> > > > > > > > > > > > > > > >> compelling
> > > > > > > > > > > > > > > >> argument for the API as proposed.
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> One very minor point you might as well fix
> is
> > > that
> > > > > the
> > > > > > > API
> > > > > > > > > > > change
> > > > > > > > > > > > is
> > > > > > > > > > > > > > > >> targeted at
> > > > > > > > > > > > > > > >> KafkaConsumer (the implementation), but
> should
> > > be
> > > > > > > targeted
> > > > > > > > > at
> > > > > > > > > > > > > > > >> Consumer (the interface).
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> I agree with your discomfort about the name.
> > > > Adding
> > > > > a
> > > > > > > > > "rejoin"
> > > > > > > > > > > > > method
> > > > > > > > > > > > > > > >> seems strange
> > > > > > > > > > > > > > > >> since there's no "join" method. Instead the
> > way
> > > > you
> > > > > > join
> > > > > > > > the
> > > > > > > > > > > group
> > > > > > > > > > > > > the
> > > > > > > > > > > > > > > >> first time is just
> > > > > > > > > > > > > > > >> by calling "subscribe". But "resubscribe"
> > seems
> > > > too
> > > > > > > > indirect
> > > > > > > > > > > from
> > > > > > > > > > > > > what
> > > > > > > > > > > > > > > >> we're really trying
> > > > > > > > > > > > > > > >> to do, which is to trigger a rebalance by
> > > sending
> > > > a
> > > > > > new
> > > > > > > > > > > JoinGroup
> > > > > > > > > > > > > > request.
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> Another angle is that we don't want the
> method
> > > to
> > > > > > sound
> > > > > > > > like
> > > > > > > > > > > > > something
> > > > > > > > > > > > > > > >> you should
> > > > > > > > > > > > > > > >> be calling in normal circumstances, or
> people
> > > will
> > > > > be
> > > > > > > > > > "tricked"
> > > > > > > > > > > > into
> > > > > > > > > > > > > > > >> calling it unnecessarily.
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> So, I think "rejoinGroup" is fine, although
> a
> > > > person
> > > > > > > > _might_
> > > > > > > > > > be
> > > > > > > > > > > > > > forgiven
> > > > > > > > > > > > > > > >> for thinking they
> > > > > > > > > > > > > > > >> need to call it periodically or something.
> Did
> > > you
> > > > > > > > consider
> > > > > > > > > > > > > > > >> "triggerRebalance", which
> > > > > > > > > > > > > > > >> sounds pretty advanced-ish, and accurately
> > > > describes
> > > > > > > what
> > > > > > > > > > > happens
> > > > > > > > > > > > > when
> > > > > > > > > > > > > > > >> you call it?
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> All in all, the KIP sounds good to me, and
> I'm
> > > in
> > > > > > favor.
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> Thanks,
> > > > > > > > > > > > > > > >> -John
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >> On Fri, Feb 7, 2020, at 21:22, Anna McDonald
> > > > wrote:
> > > > > > > > > > > > > > > >> > This situation was discussed at length
> > after a
> > > > > > recent
> > > > > > > > > talk I
> > > > > > > > > > > > gave.
> > > > > > > > > > > > > > This
> > > > > > > > > > > > > > > >> KIP
> > > > > > > > > > > > > > > >> > would be a great step towards increased
> > > > > availability
> > > > > > > and
> > > > > > > > > in
> > > > > > > > > > > > > > facilitating
> > > > > > > > > > > > > > > >> > lightweight rebalances.
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >> > anna
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >> > On Fri, Feb 7, 2020, 9:38 PM Sophie
> > > > Blee-Goldman <
> > > > > > > > > > > > > > sop...@confluent.io>
> > > > > > > > > > > > > > > >> > wrote:
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >> > > Hi all,
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > > In light of some recent and upcoming
> > > > rebalancing
> > > > > > and
> > > > > > > > > > > > > availability
> > > > > > > > > > > > > > > >> > > improvements, it seems we have a need
> for
> > > > > > explicitly
> > > > > > > > > > > > triggering
> > > > > > > > > > > > > a
> > > > > > > > > > > > > > > >> consumer
> > > > > > > > > > > > > > > >> > > group rebalance. Therefore I'd like to
> > > propose
> > > > > > > adding
> > > > > > > > a
> > > > > > > > > > new
> > > > > > > > > > > > > > > >> > > rejoinGroup()method
> > > > > > > > > > > > > > > >> > > to the Consumer client (better method
> name
> > > > > > > suggestions
> > > > > > > > > are
> > > > > > > > > > > > very
> > > > > > > > > > > > > > > >> welcome).
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > > Please take a look at the KIP and let me
> > > know
> > > > > what
> > > > > > > you
> > > > > > > > > > > think!
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > > KIP document:
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > >
> > > >
> > >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-568%3A+Explicit+rebalance+triggering+on+the+Consumer
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > > JIRA:
> > > > > > > > https://issues.apache.org/jira/browse/KAFKA-9525
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> > > Cheers,
> > > > > > > > > > > > > > > >> > > Sophie
> > > > > > > > > > > > > > > >> > >
> > > > > > > > > > > > > > > >> >
> > > > > > > > > > > > > > > >>
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > >
> > > > > > > > > >
> > > > > > > > >
> > > > > > > >
> > > > > > >
> > > > > >
> > > > > >
> > > > > > --
> > > > > > -- Guozhang
> > > > > >
> > > > >
> > > >
> > >
> >
> >
> > --
> > -- Guozhang
> >
>


-- 
-- Guozhang

Reply via email to