Hi Andrew,

Took another full pass here after the latest changes (thanks for addressing
all the feedback!).

Only minor comment left is to add to the reject alternatives the
INCONSISTENT_GROUP_PROTOCOL error that we discussed and discarded (see
LM9). Also agree with the 2 minor points made by Lucas.

With that, I have no other comments and agree we could proceed to voting.

Thanks!

Lianet

On Wed, Sep 11, 2024 at 10:17 AM Lucas Brutschy
<lbruts...@confluent.io.invalid> wrote:

> Hi Andrew,
>
> thanks for the KIP!
>
> It is looking good from my side! I like the simplification, and that
> we added the new error but only of the Describe RPCs. It's a good
> pragmatic improvement of the current state of things.
>
> I only have very minor comments:
>  - nit: In `GroupListing`, you seem to import `ShareGroupState` and
> it's not clear why.
>  - The documentation for `--consumer` in the table is not enough. We
> should make sure that the comment below the table is also included in
> the command-line help of the CLI tool -- I was confused by this at
> first. Possibly just explain it in terms of the equivalent sequence of
> commands.
>
> From my point of view, this is ready for a vote.
>
> Cheers,
> Lucas
>
>
>
> On Tue, Sep 3, 2024 at 2:56 PM Andrew Schofield
> <andrew_schofield_j...@outlook.com> wrote:
> >
> > Hi,
> > I’ve spent some time working with clusters containing groups of multiple
> > types, fixing problems and improving error handling.
> >
> > I’ve simplified the KIP so that it just adds kafka-groups.sh and improves
> > the error handling for describing groups of the wrong type. With the
> other
> > improvements I’ve already made, it seems to me that this is sufficient to
> > make working with groups of multiple types work nicely.
> >
> > I’d like to ask for another round of reviews before hopefully opening up
> > a vote soon.
> >
> >
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1043%3A+Administration+of+groups
> >
> > Thanks,
> > Andrew
> >
> > ________________________________________
> > From: Andrew Schofield <andrew_schofield_j...@live.com>
> > Sent: 02 August 2024 15:00
> > To: dev@kafka.apache.org <dev@kafka.apache.org>
> > Subject: Re: [DISCUSS] KIP-1043: Administration of groups
> >
> > Hi Lianet,
> > Thanks for your comment.
> >
> > I’ve been digging more into the situation with describing groups in a
> > broker with groups of multiple types. It’s a bit fiddly because of the
> > introduction of the modern consumer groups by KIP-848 and the
> > need for the admin client to cope with both kinds of consumer groups
> > and older brokers.
> >
> > If you use `kafka-consumer-groups.sh --describe --group MYSHARE`
> > the output is:
> >
> >   Error: Consumer group ‘MYSHARE’ does not exist.
> >
> > How does it get there? AdminClient.describeConsumerGroups
> > is complicated.
> >
> > First, it uses the ConsumerGroupDescribe RPC which responds
> > with GROUP_ID_NOT_FOUND (69) and an empty error message.
> > The broker *could* fill in the error message to help with this situation
> > but I don’t like that as a solution. Seems quite brittle.
> >
> > Then, it uses the DescribeGroups RPC in case it’s a classic consumer
> > group. This responds with error code NONE (0) and makes the group
> > look like a Dead consumer group. There is no error message field
> > in that RPC at all, so we don’t have the option of using an error
> > message to disambiguate.
> >
> > So, `kafka-consumer-groups.sh` thinks that it’s dealing with a dead
> > consumer group and its output makes sense.
> >
> > My preferred course of action here is as you suggest to introduce
> > the new error code, INVALID_GROUP_TYPE. If you use any of the following
> > RPCs with the wrong type of group, you get this response:
> >
> > * ConsumerGroupDescribe
> > * ShareGroupDescribe
> > * ConsumerGroupHeartbeat
> > * ShareGroupHeartbeat
> >
> > The remaining RPCs for consumer groups, such as ListOffsets and
> > TxnOffsetCommit continue to use `GROUP_ID_NOT_FOUND`.
> >
> > Does that make sense? Any further comments?
> >
> > Thanks,
> > Andrew
> >
> > > On 23 Jul 2024, at 17:26, Lianet M. <liane...@gmail.com> wrote:
> > >
> > > Hello Andrew,
> > >
> > > Bringing here the point I surfaced on the KIP-1071 thread:
> > >
> > > I wonder if at this point, where we're getting several new group types
> > >> added, each with RPCs that are supposed to include groupId of a
> certain
> > >> type, we should be more explicit about this situation. Maybe a kind of
> > >> INVALID_GROUP_TYPE (group exists but not with a valid type for this
> RPC) vs
> > >> a GROUP_ID_NOT_FOUND (group does not exist).  Those errors would be
> > >> consistently used across consumer, share, and streams RPCs whenever
> the
> > >> group id is not of the expected type.
> > >
> > >
> > > I noticed it on KIP-1071 but totally agree with you that it would make
> more
> > > sense to consider it here.
> > >
> > > LM9. Regarding the point of introducing a new INVALID_GROUP_TYPE vs
> reusing
> > > the existing INCONSISTENT_PROTOCOL_TYPE. My concern with reusing
> > > INCONSISTENT_GROUP_PROTOCOL for errors with the group ID is that it
> mixes
> > > the concepts of group type and protocol. Even though they are closely
> > > related, we have 2 separate concepts (internally and presented in
> output
> > > for commands), and the relationship is not 1-1 in all cases. Also, the
> > > INCONSISTENT_GROUP_PROTOCOL is already used not only for protocol but
> also
> > > when validating the list of assignors provided by a consumer in a
> > > JoinGroupRequest. Seems a bit confusing to me already, so maybe better
> not
> > > to add more to it? Just first thoughts. What do you think?
> > >
> > > Thanks,
> > > Lianet
> > >
> > > On Fri, Jul 19, 2024 at 5:00 AM Andrew Schofield <
> andrew_schofi...@live.com>
> > > wrote:
> > >
> > >> Hi Apoorv,
> > >> Thanks for your comments.
> > >>
> > >> AM1: I chose to leave the majority of the administration for the
> different
> > >> types of groups in their own tools. The differences between the group
> > >> types are significant and I think that one uber tool that subsumes
> > >> kafka-consumer-groups.sh, kafka-share-groups.sh and
> > >> kafka-streams-application-reset.sh would be too overwhelming and
> > >> difficult to use. For example, the output from describing a consumer
> group
> > >> is not the same as the output from describing a share group.
> > >>
> > >> AM2: I think you’re highlighting some of the effects of the evolution
> > >> of groups. The classic consumer group protocol defined the idea
> > >> of protocol as a way of distinguishing between the various ways people
> > >> had extended the base protocol - “consumer", “connect", and “sr" are
> the
> > >> main ones I’ve seen, and the special “” for groups that are not using
> > >> member assignment.
> > >>
> > >> For the modern group protocol, each of the proposed implementations
> > >> brings its own use of the protocol string - “consumer”, “share” and
> > >> “streams”.
> > >>
> > >> Now, prior to AK 4.0, in order to make the console consumer use the
> > >> new group protocol, you set `--consumer-property
> group.protocol=consumer`.
> > >> This tells a factory method in the consumer to use the
> AsyncKafkaConsumer
> > >> (group type is Consumer, protocol is “consumer") as opposed to the
> > >> LegacyKafkaConsumer (group type is Classic, protocol is “consumer”).
> > >> In AK 4.0, the default group protocol will change and setting the
> property
> > >> will not be necessary. The name of the configuration “group.protocol”
> > >> is slightly misleading. In practice, this is most likely to be used
> pre-AK
> > >> 4.0
> > >> by people wanting to try out the new consumer.
> > >>
> > >> AM3: When you try to create a share group and that group ID is already
> > >> in use by another type of group, the error message is “Group CG1 is
> not
> > >> a share group”. It exists already, with the wrong type.
> > >>
> > >> AM4: This KIP changes the error behaviour for
> `kafka-consumer-groups.sh`
> > >> and `kafka-share-groups.sh` such that any operation on a group that
> finds
> > >> the
> > >> group type is incorrect reports “Error: Group XXX is not a consumer
> group”
> > >> or
> > >> equivalent for the other group types. This change makes things much
> easier
> > >> to
> > >> understand than they are today.
> > >>
> > >> AM5: That section is just clarifying what the behaviour is. I don’t
> think
> > >> it had
> > >> been written down before.
> > >>
> > >> Thanks,
> > >> Andrew
> > >>
> > >>> On 18 Jul 2024, at 16:43, Apoorv Mittal <apoorvmitta...@gmail.com>
> > >> wrote:
> > >>>
> > >>> Hi Andrew,
> > >>> Thanks for the KIP. The group administration is getting difficult
> with
> > >> new
> > >>> types of groups being added and certainly the proposal looks great.
> > >>> I have some questions:
> > >>>
> > >>> AM1: The current proposal defines the behaviour for listing and
> > >> describing
> > >>> groups, simplifying create for `kafka-share-groups.sh`. Do we want to
> > >> leave
> > >>> the other group administration like delete to respective groups or
> shall
> > >>> have common behaviour defined i.e. leave to respective
> > >>> kafka-consumer-groups.sh or kafka-share-groups.sh?
> > >>>
> > >>> AM2: Reading the notes on KIP-848,
> > >>>
> > >>
> https://cwiki.apache.org/confluence/display/KAFKA/The+Next+Generation+of+the+Consumer+Rebalance+Protocol+%28KIP-848%29+-+Early+Access+Release+Notes
> > >> ,
> > >>> which requires `--consumer-property group.protocol=consumer` to
> enable
> > >>> modern consumer group. But the listing for `classic` "type" also
> defines
> > >>> "protocol" as `consumer` in some scenarios. Is it intended or
> `classic`
> > >>> type should different protocol?
> > >>>
> > >>> AM3: The KIP adds behaviour for  `kafka-share-groups.sh` which
> defines
> > >> the
> > >>> `--create` option. Though it simplifies group creation, what should
> be
> > >> the
> > >>> error behaviour when the group with the same name exists but not of
> > >> "share"
> > >>> group type?
> > >>>
> > >>> AM4: The GroupMetadataManager.java stores all groups in the same data
> > >>> structure which means the name has to be unique across different
> group
> > >>> types. Do you think we should also change the error message for
> existing
> > >>> kafka-consumer-groups.sh and kafka-share-groups.sh to recommend
> using new
> > >>> kafka-groups.sh for extensive groups list? As currently the
> individual
> > >>> scripts will result in "Group already exists" while creating new
> groups
> > >> but
> > >>> listing with respective utility will not yield the group.
> > >>>
> > >>> AM5: The KIP defines compatibility considerations for the ListGroups
> RPC.
> > >>> But it's unclear to me why it's needed as the client and server
> > >> supporting
> > >>> `kafka-groups.sh` will be post ListGroups v5 API anyways hence
> > >> TypesFilter
> > >>> will be supported in both client and server. Am I missing something
> here?
> > >>>
> > >>> Regards,
> > >>> Apoorv Mittal
> > >>> +44 7721681581
> > >>>
> > >>>
> > >>> On Wed, Jul 17, 2024 at 6:26 PM Andrew Schofield <
> > >> andrew_schofi...@live.com>
> > >>> wrote:
> > >>>
> > >>>> Hi Lianet,
> > >>>> Thanks for your comments.
> > >>>>
> > >>>> LM5. Unfortunately, the protocol type has to be a string rather than
> > >>>> an enumeration. This is because when people have created their own
> > >>>> extensions of the classic consumer group protocol, they have chosen
> > >>>> their own protocol strings. For example, the Confluent schema
> registry
> > >>>> uses “sr” and there are other examples in the wild.
> > >>>>
> > >>>> LM6.1. It’s because of the difference between a parameterised
> > >>>> type and a raw type.
> > >>>>
> > >>>> If I use:
> > >>>> public class ListGroupsResult<T extends GroupListing>
> > >>>> public class ListConsumerGroupsResult<ConsumerGroupListing>
> > >>>>
> > >>>> then ListGroupsResult (no type variable) is a raw type which does
> > >>>> not provide a type for the type variable. This causes compiler
> warnings
> > >>>> when the type is used, unless it’s used as
> > >> ListGroupsResult<GroupListing>.
> > >>>>
> > >>>> However, this works better.
> > >>>> public class AbstractListGroupsResult<T extends GroupListing>
> > >>>> public class ListGroupsResult extends
> > >>>> AbstractListGroupsResult<GroupListing>
> > >>>> public class ListConsumerGroupsResult extends
> > >>>> AbstractListGroupsResult<ConsumerGroupListing>
> > >>>>
> > >>>> I’ll change the KIP to use this.
> > >>>>
> > >>>> LM6.2. I was just pointing out a difference and you’re happy
> > >>>> with it. That’s good.
> > >>>>
> > >>>> LM7. If you have a cluster with a mixture of classic and modern
> > >>>> consumer groups, to list them all you could use this:
> > >>>>
> > >>>> bin/kafka-groups.sh --protocol consumer
> > >>>>
> > >>>> When there are no classic consumer groups, you could do:
> > >>>>
> > >>>> bin/kafka-groups.sh --group-type consumer
> > >>>>
> > >>>> However, this only gives a complete list if you don’t have any
> classic
> > >>>> consumer groups.
> > >>>>
> > >>>> As a result, I suggested --consumer so you don’t need to know
> > >>>> or care about the existence of classic and modern consumer groups.
> > >>>> I think it helps, but you aren’t convinced I think, which tells me
> > >>>> more thinking needed here.
> > >>>>
> > >>>> Maybe adding --share would help, so only power users would
> > >>>> use --group-type or --protocol to deal with the more complicated
> > >>>> cases.
> > >>>>
> > >>>> LM8. It’s just not clear. I was trying to make the output the same
> > >>>> whether the group was created, or whether it already existed. In
> > >>>> either case, there’s a share group in existence. The
> > >>>> AlterShareGroupOffsets RPC doesn’t distinguish between the
> > >>>> two cases in its response.
> > >>>>
> > >>>> Thanks,
> > >>>> Andrew
> > >>>>
> > >>>>> On 16 Jul 2024, at 21:24, Lianet M. <liane...@gmail.com> wrote:
> > >>>>>
> > >>>>> Hello Andrew, thanks for considering the feedback. Some follow-ups
> and
> > >>>>> other comments:
> > >>>>>
> > >>>>> LM4. Good point about the older RPC versions and therefore the
> > >>>>> Optional<GroupType>, agreed.
> > >>>>>
> > >>>>> LM5. In GroupListing, should we use the existing
> > >>>>> org.apache.kafka.clients.ProtocolType to represent the protocol
> > >> (instead
> > >>>> of
> > >>>>> String). I don’t quite like the fact that the enum is inside the
> > >>>>> GroupRebalanceConfig though, feels like it should be a first level
> > >>>> citizen.
> > >>>>>
> > >>>>>
> > >>>>> LM6. Regarding the changes around ListGroupResults with generics.
> > >>>>>   - LM6.1. What’s the need for keeping both, a base
> > >>>>> AbstractListGroupsResult<T extends GroupListing> and the
> > >> ListGroupsResult
> > >>>>> extends AbstractListGroupsResult<GroupListing>? Would it work if
> > >> instead
> > >>>> we
> > >>>>> simply have a single ListGroupsResult<T extends GroupListing> from
> > >> which
> > >>>>> specific groups would inherit? I'm thinking of this:
> > >>>>>
> > >>>>> public class *ListGroupsResult<T extends GroupListing>* -> this
> would
> > >>>>> probably end up containing the implementation that currently
> exists in
> > >>>>> ListConsumerGroupsResult for #all, #errors and #valid, that all
> group
> > >>>> types
> > >>>>> would be able to reuse if we use a generic T extends GroupListing
> > >>>>>
> > >>>>>
> > >>>>> public class *ListConsumerGroupsResult extends
> > >>>>> ListGroupsResult<ConsumerGroupListing>* -> slim impl, agreed
> > >>>>>
> > >>>>>   - LM6.2. Related to the concern of the javadoc for
> > >>>>> ListConsumerGroupsResult. This class will inherit 3 funcs (all,
> valid,
> > >>>>> error), that have a common behaviour (and javadoc) regardless of
> the
> > >>>>> generic type, so I expect it won’t be confusing in practice? We
> will
> > >> end
> > >>>> up
> > >>>>> with the java doc for, let’s say, ListConsumerGroupsResult#all
> showing
> > >>>> the
> > >>>>> parent javadoc that aligns perfectly with what the #all does. If
> ever
> > >> we
> > >>>>> need a different behaviour/javadoc for any of the functions in the
> > >> child
> > >>>>> classes, we would have the alternative of overriding the func and
> > >>>> javadoc.
> > >>>>> Makes sense? Not sure if I’m missing other readability issues with
> the
> > >>>>> javadocs you’re seeing.
> > >>>>>
> > >>>>> LM7. Looks better to me now with the added filter on the
> kafka-group.sh
> > >>>> for
> > >>>>> the protocol. But then, the new –consumer filter achieves the same
> as
> > >>>>> –protocol CONSUMER right? If so, I wonder if it would just be
> simpler
> > >> to
> > >>>>> support the --protocol as a way to achieve this? (sharing your
> struggle
> > >>>> on
> > >>>>> how to get this right, but feels easier to discover and reason
> about
> > >> the
> > >>>>> more we have filters based on the output, and not made up of
> > >>>>> combinations....let's keep iterating and we'll get there :) )
> > >>>>>
> > >>>>> LM8. Is the output wrong (or just not clear) in this example? (It
> > >> seemed
> > >>>> to
> > >>>>> me this was referring to the successful case where we create a new
> > >> share
> > >>>>> group, so I was expecting a "successfully created" kind of output)
> > >>>>>
> > >>>>>        $ bin/kafka-share-groups.sh --bootstrap-server
> localhost:9092
> > >>>>> --create --group NewShareGroup
> > >>>>>        Share group 'NewShareGroup' exists.
> > >>>>>
> > >>>>> Thanks!
> > >>>>>
> > >>>>> Lianet
> > >>>>>
> > >>>>> On Mon, Jul 15, 2024 at 6:00 AM Andrew Schofield <
> > >>>> andrew_schofi...@live.com>
> > >>>>> wrote:
> > >>>>>
> > >>>>>> Hi Lianet,
> > >>>>>> Thanks for your comments.
> > >>>>>>
> > >>>>>> LM1. Admin.listGroups() in principle needs to be able to return
> > >>>>>> results from any version of the ListGroups RPC. The older
> versions do
> > >>>>>> not contain the group type, so I think it’s reasonable to have
> > >>>>>> Optional<GroupType>. I think there’s a difference between
> > >>>>>> Optional.empty (I don’t know the group type) and
> > >>>>>> GroupType.UNKNOWN (I know and do not understand the group type).
> > >>>>>> As a result, I’ve changed the KIP to use Optional<GroupType>.
> > >>>>>>
> > >>>>>> I think that changing ConsumerGroupListing to extend
> > >>>>>> GroupListing, and to do the same for ShareGroupListing makes
> sense.
> > >>>>>> This does require that the overridden methods such as type() have
> > >>>>>> signatures that match today’s definition of ConsumerGroupListing
> but
> > >>>>>> that’s fine with the change I made to use Optional<GroupType>
> above.
> > >>>>>>
> > >>>>>> LM2. I think it’s possible to do something with generics along the
> > >>>>>> lines you described.
> > >>>>>>
> > >>>>>> * public abstract class AbstractListGroupsResult<T extends
> > >> GroupListing>
> > >>>>>> * public class ListGroupsResult extends
> > >>>>>> AbstractListGroupsResult<GroupListing>
> > >>>>>> * public class ListConsumerGroupsResult extends
> > >>>>>> AbstractListGroupsResult<ConsumerGroupListing>
> > >>>>>>
> > >>>>>> This does make the javadoc for ListConsumerGroupsResult less
> > >>>>>> readable because its methods are now all inherited. The classes
> > >>>>>> such as ListConsumerGroupsResult of course still have to exist
> > >>>>>> but the implementation is very slim.
> > >>>>>>
> > >>>>>> What do you think of this? I haven’t yet updated the KIP in this
> > >>>>>> case.
> > >>>>>>
> > >>>>>> LM3. I have been kicking around the syntax for kafka-group.sh
> > >>>>>> for a while now and I too am not happy with the filters yet. I
> > >>>> absolutely
> > >>>>>> want to be able to display all consumer groups with a simple
> option,
> > >>>>>> but history means that not a single filter under the covers.
> > >>>>>>
> > >>>>>> I suggest the following:
> > >>>>>> --group-type which supports all group types
> > >>>>>> --protocol which supports any string for protocol (there’s no
> > >>>> enumeration)
> > >>>>>> --consumer which matches all classic and modern consumer groups
> > >>>>>> (and is thus a confection made by filtering on both group type and
> > >>>>>> protocol).
> > >>>>>>
> > >>>>>> I’ve changed the KIP accordingly. Let me know what you think.
> > >>>>>>
> > >>>>>> Thanks,
> > >>>>>> Andrew
> > >>>>>>
> > >>>>>>
> > >>>>>>> On 12 Jul 2024, at 21:48, Lianet M. <liane...@gmail.com> wrote:
> > >>>>>>>
> > >>>>>>> Hey Andrew, thanks for the KIP, we definitely need visibility
> from a
> > >>>>>> higher
> > >>>>>>> level now that groups are growing.
> > >>>>>>>
> > >>>>>>> LM1. Should we have the existing
> > >>>>>>> org.apache.kafka.clients.admin.ConsumerGroupListing extend the
> > >>>>>> GroupListing
> > >>>>>>> you’re proposing? ConsumerGroupListing already exists with a very
> > >>>> similar
> > >>>>>>> shape, and this would allow to set a common ground for the
> existing
> > >>>> group
> > >>>>>>> types, and the ones that are coming up (share groups and KS
> groups).
> > >>>> Side
> > >>>>>>> note, the existing ConsumerGroupListing has the type as
> Optional, but
> > >>>>>> given
> > >>>>>>> that the GroupType enum has an UNKNOWN type, I don’t quite get
> the
> > >> need
> > >>>>>> for
> > >>>>>>> Optional and seems ok to me as you’re proposing it.
> > >>>>>>>
> > >>>>>>> LM2: if the point above makes sense, it would allow us to
> consider
> > >>>>>> changing
> > >>>>>>> the new ListGroupResult you’re proposing to make it generic and
> > >>>>>> potentially
> > >>>>>>> reused by all group types:
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> public class ListGroupsResult {
> > >>>>>>>
> > >>>>>>> public KafkaFuture<Collection<? extends GroupListing>> all()
> > >>>>>>>
> > >>>>>>> public KafkaFuture<Collection<? extends GroupListing>> valid()
> {    }
> > >>>>>>>
> > >>>>>>> public KafkaFuture<Collection<Throwable>> errors() {    }
> > >>>>>>>
> > >>>>>>> }
> > >>>>>>>
> > >>>>>>> Makes sense? With this, maybe we won’t need specific result
> classes
> > >> for
> > >>>>>>> each group (like the existing ListConsumerGroupsResult), given
> that
> > >> in
> > >>>>>> the
> > >>>>>>> end it’s just a wrapper around the GroupListing (which is what
> each
> > >>>> group
> > >>>>>>> type would redefine).
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> LM3. I get how you're playing with the filters for group types
> and
> > >>>>>>> protocol, but then I find it confusing how we end up with filters
> > >> that
> > >>>> do
> > >>>>>>> not match the output ( --group-type that matches the protocol
> from
> > >> the
> > >>>>>>> output and not the type for "consumer"  example). What about
> having
> > >> the
> > >>>>>>> –group-type filter on the actual GroupType field of the RPC
> response
> > >>>>>> (shown
> > >>>>>>> in the cmd line output as TYPE); and add a –protocol-type that
> would
> > >>>>>> filter
> > >>>>>>> on the ProtocolType field of  RPC response (shown in the cmd line
> > >>>> output
> > >>>>>> as
> > >>>>>>> PROTOCOL). We would have the filters aligned with the output for
> all
> > >>>>>> cases,
> > >>>>>>> which seems more consistent.
> > >>>>>>>
> > >>>>>>> Thanks!
> > >>>>>>>
> > >>>>>>> Lianet
> > >>>>>>>
> > >>>>>>>
> > >>>>>>>
> > >>>>>>> On Thu, Jun 6, 2024 at 8:16 AM Andrew Schofield <
> > >>>>>> andrew_schofi...@live.com>
> > >>>>>>> wrote:
> > >>>>>>>
> > >>>>>>>> Hi Kirk,
> > >>>>>>>> Thanks for your comments.
> > >>>>>>>>
> > >>>>>>>> 1. I’m a big fan of consistency in these things and the method
> > >>>>>> signatures
> > >>>>>>>> match
> > >>>>>>>> ListConsumerGroupsResult and ListShareGroupsResult.
> > >>>>>>>>
> > >>>>>>>> 2. Yes, client-side filtering.
> > >>>>>>>>
> > >>>>>>>> 3. I didn’t offer “classic” as an option for --group-type. I’ve
> > >> kicked
> > >>>>>> the
> > >>>>>>>> options
> > >>>>>>>> around in my mind for a while and I decided that using
> --group-type
> > >>>> as a
> > >>>>>>>> way of
> > >>>>>>>> filtering types in a way that a normal user would understand
> them
> > >> was
> > >>>> a
> > >>>>>>>> good
> > >>>>>>>> place to start. For example, I didn’t have `--protocol
> consumer` for
> > >>>>>>>> consumer groups
> > >>>>>>>> and `--group-type share` for share groups, even though that’s
> > >>>>>> technically
> > >>>>>>>> more
> > >>>>>>>> correct.
> > >>>>>>>>
> > >>>>>>>> Since KIP-848, the set of consumer groups is actually formed
> from
> > >>>> those
> > >>>>>>>> which
> > >>>>>>>> use the classic protocol and those which use the modern
> protocol.
> > >> This
> > >>>>>> tool
> > >>>>>>>> gives you both together when you use `--group-type consumer`,
> which
> > >> is
> > >>>>>>>> exactly
> > >>>>>>>> what kafka-consumer-groups.sh does.
> > >>>>>>>>
> > >>>>>>>> Do you think - -group-type classic is helpful? It would give a
> list
> > >> of
> > >>>>>> all
> > >>>>>>>> groups using
> > >>>>>>>> any variant of the classic group protocol. I can easily add it.
> > >>>>>>>>
> > >>>>>>>> 4, 5. Yes, maybe the wording of the message could improve. These
> > >>>> things
> > >>>>>>>> are always
> > >>>>>>>> tricky. I went with “Group CG1 is not a share group.” because it
> > >>>> doesn’t
> > >>>>>>>> require the tool
> > >>>>>>>> to interpret the group type in order to generate the message.
> > >>>>>>>>
> > >>>>>>>> Imagine this scenario. You are using kafka-share-groups.sh
> > >> --describe
> > >>>>>> and
> > >>>>>>>> you’ve
> > >>>>>>>> used the group ID of a consumer group. Here are some options:
> > >>>>>>>>
> > >>>>>>>> a) “Group CG1 is not a share group.”
> > >>>>>>>> b) “Incorrect group type (Consumer). Group CG1 is not a share
> > >> group.”
> > >>>>>>>> c) “Group CG1 has the wrong type for this operation. It is not a
> > >> share
> > >>>>>>>> group."
> > >>>>>>>>
> > >>>>>>>> I don’t think “There is already a (consumer) group named ‘CG1’”
> is
> > >>>> quite
> > >>>>>>>> right.
> > >>>>>>>>
> > >>>>>>>> Any preference?
> > >>>>>>>>
> > >>>>>>>> 6. Yes, it is a change in behaviour which is why I mention it
> in the
> > >>>>>> KIP.
> > >>>>>>>> Personally, I think that’s OK because the existing message is
> > >>>> misleading
> > >>>>>>>> and could definitely cause frustration. Let’s see what other
> > >> reviewers
> > >>>>>>>> think.
> > >>>>>>>>
> > >>>>>>>> Thanks,
> > >>>>>>>> Andrew
> > >>>>>>>>
> > >>>>>>>>> On 6 Jun 2024, at 00:44, Kirk True <k...@kirktrue.pro> wrote:
> > >>>>>>>>>
> > >>>>>>>>> Hi Andrew,
> > >>>>>>>>>
> > >>>>>>>>> Thanks for the KIP! I don’t have much experience as a Kafka
> > >> operator,
> > >>>>>>>> but this seems like a very sane proposal.
> > >>>>>>>>>
> > >>>>>>>>> Questions & comments:
> > >>>>>>>>>
> > >>>>>>>>> 1. Do you think the ListGroupsResult.all() method is a bit of a
> > >>>>>>>> potential ‘foot gun’? I can imagine cases where developers
> reach for
> > >>>>>> that
> > >>>>>>>> without understanding its potential of throwing errors. It could
> > >> lead
> > >>>> to
> > >>>>>>>> cases where all() works in development but not in production.
> > >>>>>>>>>
> > >>>>>>>>> 2. Based on the LIST_GROUPS RPC, it appears that filtering is
> all
> > >>>>>>>> performed client side, correct? (I know that’s not specific to
> this
> > >>>> KIP,
> > >>>>>>>> but just want to make sure I understand.)
> > >>>>>>>>>
> > >>>>>>>>> 3. For kafka-groups.sh --list, is ‘classic’ valid for
> --group-type?
> > >>>> If
> > >>>>>>>> so, should we allow users of kafka-groups.sh --list to provide
> > >>>> multiple
> > >>>>>>>> --group-type arguments?
> > >>>>>>>>>
> > >>>>>>>>> 4. In the last kafka-share-groups.sh --create example
> > >>>>>> (“ConsumerGroup”),
> > >>>>>>>> the error simply states that “Group 'ConsumerGroup’ is not a
> share
> > >>>>>> group.”
> > >>>>>>>> I’m assuming that’s the case where the user gets a failure when
> > >>>> there’s
> > >>>>>>>> already a group named “ConsumerGroup”, right? If so, the error
> > >> should
> > >>>> be
> > >>>>>>>> something like “There is already a (consumer) group named
> > >>>>>> ’ConsumerGroup’”.
> > >>>>>>>>>
> > >>>>>>>>> 5. In the last kafka-share-groups.sh --describe example, how
> hard
> > >> is
> > >>>> it
> > >>>>>>>> to add the type of group that CG1 is, just for a bit of clarity
> for
> > >>>> the
> > >>>>>>>> user?
> > >>>>>>>>>
> > >>>>>>>>> 6. In the kafka-consumer-groups.sh section, it states "if that
> > >> group
> > >>>>>>>> exists but is not a consumer group, the command fails with a
> message
> > >>>>>>>> indicating that the group type is incorrect, rather than the
> > >> existing
> > >>>>>>>> message that the group does not exist.” That sounds like a
> change
> > >> that
> > >>>>>>>> could trip up some brittle scripts somewhere, but I don’t know
> if
> > >>>>>> that’s a
> > >>>>>>>> serious problem.
> > >>>>>>>>>
> > >>>>>>>>> Thanks!
> > >>>>>>>>>
> > >>>>>>>>>> On Jun 4, 2024, at 10:08 AM, Andrew Schofield <
> > >>>>>>>> andrew_schofi...@live.com> wrote:
> > >>>>>>>>>>
> > >>>>>>>>>> Hi,
> > >>>>>>>>>> I would like to start a discussion thread on KIP-1043:
> > >>>> Administration
> > >>>>>>>> of groups. This KIP enhances the command-line tools to make it
> > >> easier
> > >>>> to
> > >>>>>>>> administer groups on clusters with a variety of types of groups.
> > >>>>>>>>>>
> > >>>>>>>>>>
> > >>>>>>>>
> > >>>>>>
> > >>>>
> > >>
> https://cwiki.apache.org/confluence/display/KAFKA/KIP-1043%3A+Administration+of+groups
> > >>>>>>>>>>
> > >>>>>>>>>> Thanks.
> > >>>>>>>>>> Andrew
> > >>
> > >>
> > >>
>

Reply via email to