Thanks Matthias and Guozhang for the feedback. I'm not worrying too much
about the member.id exposure as we have done so in a couple of areas. As
for the recommended admin client change, I think it makes sense in an
encapsulation perspective. Maybe I'm still a bit hesitant as we are losing
the flexibility of closing only a subset of `dynamic members` potentially,
but we could always get back and address it if some user feels necessary to
have it.

My short answer would be, LGTM :)

Boyang

On Thu, Mar 12, 2020 at 5:26 PM Guozhang Wang <wangg...@gmail.com> wrote:

> Hi Matthias,
>
> About the AdminClient param API: that's a great point here. I think overall
> if users want to just "remove all members" they should not need to first
> get all the member.ids themselves, but instead internally the admin client
> can first issue a describe-group request to get all the member.ids, and
> then use them in the next issued leave-group request, all abstracted away
> from the users. With that in mind, maybe in
> RemoveMembersFromConsumerGroupOptions we can just introduce an overloaded
> flag param besides "members" that indicate "remove all"?
>
> Guozhang
>
> On Thu, Mar 12, 2020 at 2:59 PM Matthias J. Sax <mj...@apache.org> wrote:
>
> > Feyman,
> >
> > some more comments/questions:
> >
> > The description of `LeaveGroupRequest` is clear but it's unclear how
> > `MemberToRemove` should behave. Which parameter is required? Which is
> > optional? What is the relationship between both.
> >
> > The `LeaveGroupRequest` description clearly states that specifying a
> > `memberId` is optional if the `groupInstanceId` is provided. If
> > `MemberToRemove` applies the same pattern, it must be explicitly defined
> > in the KIP (and explained in the JavaDocs of `MemberToRemove`) because
> > we cannot expect that an admin-client users knows that internally a
> > `LeaveGroupRequest` is used nor what the semantics of a
> > `LeaveGroupRequest` are.
> >
> >
> > About Admin API:
> >
> > In general, I am also confused that we allow so specify a `memberId` at
> > all, because the `memberId` is an internal id that is not really exposed
> > to the user. Hence, from a AdminClient point of view, accepting a
> > `memberId` as input seems questionable to me? Of course, `memberId` can
> > be collected via `describeConsumerGroups()` but it will return the
> > `memberId` of _all_ consumer in the group and thus how would a user know
> > which member should be removed for a dynamic group (if an individual
> > member should be removed)?
> >
> > Hence, how can any user get to know the `memberId` of an individual
> > client in a programtic way?
> >
> > Also I am wondering in general, why the removal of single dynamic member
> > is important? In general, I would expect a short `session.timeout` for
> > dynamic groups and thus removing a specific member from the group seems
> > not to be an important feature -- for static groups we expect a long
> > `session.timeout` and a user can also identify individual clients via
> > `groupInstandId`, hence the feature makes sense for this case and is
> > straight forward to use.
> >
> >
> > About StreamsResetter:
> >
> > For this case we just say "remove all members" and thus the
> > `describeConsumerGroup` approach works. However, it seems to be a
> > special case?
> >
> > Or, if we expected that the "remove all members" use case is the norm,
> > why can't we make a change admin-client to directly accept a `group.id`?
> > The admin-client can internal first do a `DescribeGroupRequest` and
> > afterward corresponding `LeaveGroupRequest` -- i.e., instead of building
> > this pattern in `StreamsResetter` we build it directly into
> `AdminClient`.
> >
> > Last, for static group the main use case seems to be to remove an
> > individual member from the group but this feature is not covered by the
> > KIP: I think using `--force` to remove all members makes sense, but an
> > important second feature to remove an individual static member would
> > require it's own flag to specify a single `group.instance.id`.
> >
> >
> > Thoughts?
> >
> >
> > -Matthias
> >
> >
> >
> >
> >
> > On 3/11/20 8:43 PM, feyman2009 wrote:
> > > Hi, Sophie
> > >     For 1) Sorry, I found that my expression is kind of misleading,
> > what I actually mean is: "if --force not specified, an exception saying
> > there are still active members on broker side will be thrown and
> > suggesting using StreamsResetter with --force", I just updated the KIP
> > page.
> > >
> > >     For 2)
> > >         I may also had some misleading expression previous, to clarify
> :
> > >
> > > Also, it's more efficient to just send a single "clear the group"
> > request vs sending a LeaveGroup
> > > request for every single member. What do you think?
> > > => the comparison is to send a single "clear the group" request vs
> > sending a "get members" + a "remove members" request since the
> > adminClient.removeMembersFromConsumerGroup support batch removal. We
> > don't need to send lots of leaveGroup requests for every single member.
> > >
> > >        I can understand your point, but I think we could reuse the
> > current
> > > adminClient.removeMembersFromConsumerGroup interface effectively with
> > the KIP.
> > >         What do you think?
> > >
> > >     Thanks!
> > >
> > > Feyman
> > >
> > >
> > > ------------------------------------------------------------------
> > > 发件人:Sophie Blee-Goldman <sop...@confluent.io>
> > > 发送时间:2020年3月10日(星期二) 03:02
> > > 收件人:dev <dev@kafka.apache.org>; feyman2009 <feyman2...@aliyun.com>
> > > 主 题:Re: 回复:回复:[Vote] KIP-571: Add option to force remove
> > members in StreamsResetter
> > >
> > > Hey Feyman,
> > >
> > > 1) Regarding point 2 in your last email, if I understand correctly you
> > propose to change
> > > the current behavior of the reset tool when --force is not specified,
> > and wait for (up to)
> > > the session timeout for all members to be removed. I'm not sure we
> > should change this,
> > > especially now that we have a better way to handle the case when the
> > group is not empty:
> > > we should continue to throw an exception and fail fast, but can print
> > a message suggesting
> > > to use the new --force option to remove remaining group members. Why
> > make users wait
> > > for the session timeout when we've just added a new feature that means
> > they don't have to?
> > >
> > > 2) Regarding Matthias' question:
> > >
> > >> I am really wondering, if for a static group, we should allow users
> > toremove individual members? For a dynamic group this feature would not
> > > make much sense IMHO, because the `memberId` is not know by the user.
> > >
> > > I think his point is similar to what I was trying to get at earlier,
> > with the proposal to add a new
> > > #removeAllMembers API rather than an API to remove individual members
> > according to their
> > > memberId. As he explained, removing based on memberId is likely not
> > that useful in general.
> > > Also, it's not actually what we want to do here; maybe we should avoid
> > adding a new API
> > > that we think may be useful in other contexts (remove individual
> > member based on memberId),
> > > and just add the API we actually need (remove all members from group)
> > in this KIP? We can
> > > always add the "remove individual member by memberId" API at a later
> > point, if it turns out to
> > > actually be requested for specific reasons?
> > >
> > > Also, it's more efficient to just send a single "clear the group"
> > request vs sending a LeaveGroup
> > > request for every single member. What do you think?
> > >
> > >
> > >
> > >
> > > On Sat, Mar 7, 2020 at 1:41 AM feyman2009
> > <feyman2...@aliyun.com.invalid> wrote:
> > > Hi, Matthias
> > >      Thanks, I updated the KIP to mention the deprecated and newly
> > added methods.
> > >
> > >  1. What happens is `groupInstanceId` is used for a dynamic group? What
> > >  happens if both parameters are specified? What happens if `memberId`
> > >  is specified for a static group?
> > >
> > >  => my understanding is that the dynamic/static membership is member
> > level other than group level, and I think above questions could be
> > answered by the "Leave Group Logic Change" section in KIP-345:
> >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-345%3A+Introduce+static+membership+protocol+to+reduce+consumer+rebalances
> > ,
> > this KIP stays consistent with KIP-345.
> > >
> > >  2. About the `--force` option. Currently, StreamsResetter fails with
> an
> > >  error if the consumer group is not empty. You state in your KIP that:
> > >
> > >  > without --force, we need to wait for session timeout.
> > >
> > >  Is this an intended behavior change if `--force` is not used or is the
> > >  KIP description incorrect?
> > >
> > >  => This is the intended behavior. For this part, I think there are
> > two ways to go:
> > >  1) (the implicit way) Not introducing the new "--force" option, with
> > this KIP, StreamsResetter will by default remove active members(with
> > long session timeout configured) on broker side
> > >  2) (the explicit way) Introduce the new "--force" option, users need
> > to explicitly specify --force to remove the active members. If --force
> > not specified, the StreamsResetter behaviour is as previous versions'.
> > >
> > >  I think the two alternatives above are both feasible, personally I
> > prefer way 2.
> > >
> > >  3. For my own understanding: with the `--force` option, we intend to
> get
> > >  all `memberIds` and send a "remove member" request for each with
> > >  corresponding `memberId` to remove the member from the group
> > >  (independent is the group is static or dynamic)?
> > >
> > >  => Yeah, minor thing to mention is we will send the "remove member"
> > request for each member(could be dynamic member or static member) to
> > remove them from group
> > >  for dynamic members, both "group.instance.id" and "member.id" will be
> > specified
> > >  for dynamic members, only "member.id" will be specified
> > >
> > >  4. I am really wondering, if for a static group, we should allow users
> > to
> > >  remove individual members? For a dynamic group this feature would not
> > >  make much sense IMHO, because the `memberId` is not know by the user.
> > >
> > >  => KIP-345 introduced the batch removal feature for both static
> > member and dynamic member, my understanding is that "allow users to
> > >  remove individual members" could be useful for rolling bounce and
> > scale down accoding to KIP-345. KafkaAdminClient currently only support
> > static member removal and this KIP-571 enables dynamic member removal
> > for it, which is also consistent with the broker side logic. Users could
> > get the member.id (and group.instance.id if for static member) by
> > adminClient.describeConsumerGroups.
> > >
> > >  Furthermore, I don't have an assumption that a consumer group should
> > contain only static or dynamic members, and I think KIP-345 and this KIP
> > don't need to be based on this assumption.
> > >  You could correct me if I have the wrong understanding :)
> > >
> > >  Thanks!
> > >  Feyman
> > >
> > >
> > >
> > >
> > >
> > >
> > >
> > >  ------------------------------------------------------------------
> > >  发件人:Matthias J. Sax <mj...@apache.org>
> > >  发送时间:2020年3月6日(星期五) 02:20
> > >  收件人:dev <dev@kafka.apache.org>
> > >  主 题:Re: 回复:回复:[Vote] KIP-571: Add option to force remove
> > members in StreamsResetter
> > >
> > > Feyman,
> > >
> > > thanks a lot for the KIP. Overall LGTM. I have a few more comment and
> > > questions (sorry for the late reply):
> > >
> > >
> > > The KIP mentions that some constructors will be deprecated. Those
> should
> > > be listed explicitly. For example:
> > >
> > >
> > > public class MemberToRemove {
> > >
> > >   // deprecated methods
> > >
> > >   @Deprecated
> > >   public MemberToRemove(String groupInstanceId);
> > >
> > >   // new methods
> > >
> > >   public MemberToRemove()
> > >
> > >   public MemberToRemove withGroupInstanceId(String groupInstanceId)
> > >
> > >   public MemberToRemove withMemberId(String memberId)
> > > }
> > >
> > > What happens is `groupInstanceId` is used for a dynamic group? What
> > > happens if both parameters are specified? What happens if `memberId`
> > > is specified for a static group?
> > >
> > >
> > > About the `--force` option. Currently, StreamsResetter fails with an
> > > error if the consumer group is not empty. You state in your KIP that:
> > >
> > >> without --force, we need to wait for session timeout.
> > >
> > > Is this an intended behavior change if `--force` is not used or is the
> > > KIP description incorrect?
> > >
> > > For my own understanding: with the `--force` option, we intend to get
> > > all `memberIds` and send a "remove member" request for each with
> > > corresponding `memberId` to remove the member from the group
> > > (independent is the group is static or dynamic)?
> > >
> > > I am really wondering, if for a static group, we should allow users to
> > > remove individual members? For a dynamic group this feature would not
> > > make much sense IMHO, because the `memberId` is not know by the user.
> > >
> > >
> > >
> > > -Matthias
> > >
> > >
> > > On 3/5/20 7:15 AM, Bill Bejeck wrote:
> > >> Thanks for the KIP.  +1 (binding).
> > >
> > >> -Bill
> > >
> > >
> > >
> > >> On Wed, Mar 4, 2020 at 12:40 AM Guozhang Wang <wangg...@gmail.com>
> > >> wrote:
> > >
> > >>> Thanks, +1 from me (binding).
> > >>>
> > >>> On Tue, Mar 3, 2020 at 9:39 PM feyman2009 <feyman2...@aliyun.com>
> > >>> wrote:
> > >>>
> > >>>> Hi, Guozhang Thanks a lot for the advice, that make sense! I
> > >>>> have updated the KIP page with the operational steps of
> > >>>> StreamsResetter.
> > >>>>
> > >>>> Thanks! Feyman
> > >>>>
> > >>>> ------------------------------------------------------------------
> > >>>>
> > >>>>
> > > 发件人:Guozhang Wang <wangg...@gmail.com>
> > >>>> 发送时间:2020年3月3日(星期二) 14:22 收件人:dev <dev@kafka.apache.org>;
> > >>>> feyman2009 <feyman2...@aliyun.com> 主 题:Re: 回复:回复:[Vote]
> > >>>> KIP-571: Add option to force remove members in StreamsResetter
> > >>>>
> > >>>> Hello Feyman, thanks for the proposal!
> > >>>>
> > >>>> I read through the doc and overall it looks good to me.
> > >>>>
> > >>>> One minor thing I'd still like to point out is that, the
> > >>>> "removeMembersFromConsumerGroup" only sends a leave-group
> > >>>> request to the coordinator to let it remove the member,
> > >>>> however, if the member is still there alive and running then it
> > >>>> would soon be notified that it is no
> > >>> longer
> > >>>> a legal member of the group via heartbeats, and then
> > >>>> automatically tries
> > >>> to
> > >>>> re-join the group. So on the operational side, it is still
> > >>>> required that the following steps:
> > >>>>
> > >>>> 1) first stop the consumers (of streams instances), wait until
> > >>>> the shutdown is complete. 2) then use admin client in case the
> > >>>> stopped consumers are still registered at the broker side and
> > >>>> we do not want to wait for session timeout.
> > >>>>
> > >>>> Even with this KIP, people should still not skip step 1) above,
> > >>>> since otherwise the consumers would re-connect and re-join the
> > >>>> group
> > >>> immediately
> > >>>> still.
> > >>>>
> > >>>> In your doc you've already mentioned "Furthermore, users should
> > >>>> make sure all the stream applications are shutdown when running
> > >>>> StreamsResetter
> > >>> with
> > >>>> --force, otherwise it might trigger unexpected rebalance. "
> > >>>> What I'd want to clarify is that no matter if "--force" option
> > >>>> is enabled, this is
> > >>> always
> > >>>> the case that users should shutdown the streams instances
> > >>>> first, and then use the streams resetter :)
> > >>>>
> > >>>> As long as that is clarified in the proposal documentation, I'm
> > >>>> +1 on
> > >>> this
> > >>>> KIP.
> > >>>>
> > >>>>
> > >>>> Thanks again for the contribution, Guozhang
> > >>>>
> > >>>>
> > >>>> On Mon, Mar 2, 2020 at 6:31 AM feyman2009
> > >>>> <feyman2...@aliyun.com.invalid
> > >>>>
> > >>>> wrote: Hi, John Sorry, I have mistaken the KIP approval
> > >>>> standard, anyway, I will
> > >>> start
> > >>>> the PR soon and waiting for more binding approvals.
> > >>>>
> > >>>> Thanks! Feyman
> > >>>>
> > >>>>
> > >>>> ------------------------------------------------------------------
> > >>>>
> > >>>>
> > > 发件人:John Roesler <vvcep...@apache.org>
> > >>>> 发送时间:2020年3月2日(星期一) 22:00 收件人:dev
> > > <dev@kafka.apache.org> 主
> > >>>> 题:Re: 回复:回复:[Vote] KIP-571: Add option to force remove members
> > >>>> in StreamsResetter
> > >>>>
> > >>>> Hi Feyman,
> > >>>>
> > >>>> Sorry, but we actually need 3 binding votes for the KIP to
> > >>>> pass. Please feel free to keep bumping the thread until some
> > >>>> more committers can take
> > >>> a
> > >>>> look.
> > >>>>
> > >>>> By the way, you can totally start a PR, but we can’t merge it
> > >>>> until the KIP passes the vote.
> > >>>>
> > >>>> Thanks! John
> > >>>>
> > >>>> On Mon, Mar 2, 2020, at 00:24, feyman2009 wrote:
> > >>>>> Hi,all Since currently we have 1 binding and two non-binding
> > >>>>> +1, I will update the KIP-571 as adopted and initiate a PR
> > >>>>> shortly
> > >>>>>
> > >>>>> Thanks! Feyman
> > >>>>>
> > >>>>>
> > >>>>> ------------------------------------------------------------------
> > >>>>>
> > >>>>>
> > > 发件人:Sophie Blee-Goldman <sop...@confluent.io>
> > >>>>> 发送时间:2020年2月28日(星期五) 10:17 收件人:dev
> > > <dev@kafka.apache.org> 主
> > >>>>> 题:Re: 回复:[Vote] KIP-571: Add option to force remove members
> > >>>>> in
> > >>>> StreamsResetter
> > >>>>>
> > >>>>> Thanks for the KIP, +1 (non-binding)
> > >>>>>
> > >>>>> On Thu, Feb 27, 2020 at 12:40 PM Boyang Chen <
> > >>> reluctanthero...@gmail.com
> > >>>>>
> > >>>>> wrote:
> > >>>>>
> > >>>>>> Thanks Feyman, +1 (non-binding)
> > >>>>>>
> > >>>>>> On Thu, Feb 27, 2020 at 9:25 AM John Roesler
> > >>>>>> <vvcep...@apache.org>
> > >>>> wrote:
> > >>>>>>
> > >>>>>>> Thanks for the proposal!
> > >>>>>>>
> > >>>>>>> I'm +1 (binding) -John
> > >>>>>>>
> > >>>>>>> On Wed, Feb 26, 2020, at 19:41, feyman2009 wrote:
> > >>>>>>>> Updated with the KIP link:
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>
> > >>>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-571%3A+Add+opti
> > > on+to+force+remove+members+in+StreamsResetter
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>>
> > >>>
> > >>>
> > > ------------------------------------------------------------------
> > >>>>>>>> 发件人:feyman2009 <feyman2...@aliyun.com.INVALID> 发送时
> > >>>>>>>> 间:2020年2月27日(星期四) 09:38 收件人:dev <dev@kafka.apache.org>
> > >>>>>>>> 主 题:[Vote] KIP-571: Add option to force remove members
> > >>>>>>>> in
> > >>>>>> StreamsResetter
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>> Hi, all I would like to start a vote on KIP-571: Add
> > >>>>>>>> option to force
> > >>>> remove
> > >>>>>>>> members in StreamsResetter .
> > >>>>>>>>
> > >>>>>>>> Thanks! Feyman
> > >>>>>>>>
> > >>>>>>>>
> > >>>>>>>
> > >>>>>>
> > >>>>>
> > >>>>>
> > >>>>
> > >>>>
> > >>>>
> > >>>> -- -- Guozhang
> > >>>>
> > >>>>
> > >>>>
> > >>>
> > >>> -- -- Guozhang
> > >>>
> > >
> > >
> > >
> >
> >
>
> --
> -- Guozhang
>

Reply via email to