Awesome summary, Dana. I'd like to fit this into our docs, but I'm not sure
where does step-by-step-description of the protocol fits. Maybe in "Design"
section?

Just one more thing:
8) At any time, the broker can respond to a fetch request with
"Rebalancing" error code, at which point the assignment dance begins from
scratch: consumers needs to send the sync request, leaders need to create
an assignment, etc.

Gwen



On Tue, Mar 29, 2016 at 9:05 AM, Dana Powers <dana.pow...@gmail.com> wrote:

> I also found the documentation difficult to parse when it came time to
> implement group APIs. I ended up just reading the client source code and
> trying api calls until it made sense.
>
> My general description from off the top of my head:
>
> (1) have all consumers submit a shared protocol_name string* and
> bytes-serialized protocol_metadata, which includes the topic(s) for
> subscription.
> (2) All consumers should be prepared to parse a JoinResponse and identify
> whether they have been selected as the group leader.
> (3) The non-leaders go straight to SyncGroupRequest, with group_assignment
> empty, and will wait get their partition assignments via the
> SyncGroupResponse.
> (4) Unlike the others, the consumer-leader will get the agreed
> protocol_name and all member's metadata in its JoinGroupResponse.
> (5) The consumer-leader must apply the protocol_name assignment strategy to
> the member list + metadata (plus the cluster metadata), generating a set of
> member assignments (member_id -> topic partitions).
> (6)The consumer-leader then submits that member_assignment data in its
> SyncGroupRequest.
> (7) The broker will take the group member_assignment data and split it out
> into each members SyncGroupResponse (including the consumer-leader).
>
> At this point all members have their assignments and can start chugging
> along.
>
> I've tried to encapsulate the group request / response protocol info
> cleanly into kafka-python, if that helps you:
>
> https://github.com/dpkp/kafka-python/blob/1.0.2/kafka/protocol/group.py
>
> I'd be willing to help improve the docs if someone points me at the "source
> of truth". Or feel free to ping on irc #apache-kafka
>
> -Dana
>
> *for java client these are 'range' or 'roundrobin', but are opaque and can
> be anything if you aren't interested in joining groups that have
> heterogeneous clients. related, the protocol_metadata and member_metadata
> are also opaque and technically can be anything you like. But sticking with
> the documented metadata specs should in theory allow heterogenous clients
> to cooperate.
>
> On Tue, Mar 29, 2016 at 8:21 AM, Heath Ivie <hi...@autoanything.com>
> wrote:
>
> > Does anyone have better documentation around the group membership APIs?
> >
> > The information about the APIs are great at the beginning but get
> > progressively  sparse towards then end.
> >
> > I am not finding enough information about the values of the request
> fields
> > to join / sync the group.
> >
> > Can anyone help me or send me the some additional documentation?
> >
> > Heath Ivie
> > Solutions Architect
> >
> >
> > Warning: This e-mail may contain information proprietary to AutoAnything
> > Inc. and is intended only for the use of the intended recipient(s). If
> the
> > reader of this message is not the intended recipient(s), you have
> received
> > this message in error and any review, dissemination, distribution or
> > copying of this message is strictly prohibited. If you have received this
> > message in error, please notify the sender immediately and delete all
> > copies.
> >
>

Reply via email to