Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Updated with rejected status

Table of Contents

Status

Current state:  [One of "Under Discussion", "Accepted", "Rejected"]

Discussion thread: here [Change the link from the KIP proposal email archive to your own email thread]

JIRA: here [Change the link from KAFKA-1 to your own ticket]

Please keep the discussion on the mailing list rather than commenting on the wiki (wiki discussions get unwieldy fast).

Motivation

Describe the problems you are trying to solve.

Public Interfaces

Briefly list any new interfaces that will be introduced as part of this proposal or any existing interfaces that will be removed or changed. The purpose of this section is to concisely call out the public contract that will come along with this feature.

A public interface is any change to the following:

  • Binary log format

  • The network protocol and api behavior

  • Any class in the public packages under clientsConfiguration, especially client configuration

    • org/apache/kafka/common/serialization

    • org/apache/kafka/common

    • org/apache/kafka/common/errors

    • org/apache/kafka/clients/producer

    • org/apache/kafka/clients/consumer (eventually, once stable)

  • Monitoring

  • Command line tools and arguments

  • Anything else that will likely break existing users in some way when they upgrade

API Changes

Admin

Code Block
public interface Admin {
    . . .
    public ListGroupsResult listGroups();
    public ListGroupsResult ListGroups(ListGroupsOptions options);
}

ListGroupsOptions

Code Block
public class ListGroupsOptions {
    public ListGroupsOptions inStates(Set<GroupState> states);
    public ListGroupsOptions inTypes(Set<GroupType> types);
}

ListGroupsResult

Code Block
public class ListGroupsResult {
    public KafkaFuture<Collection<GroupListing>> all();
    public KafkaFuture<Collection<GroupListing>> valid();
    public KafkaFuture<Collection<GroupListing>> errors();    
}

GroupListing

Code Block
public class GroupListing {
    public String groupId();
    public Optional<GroupState> state();
    public Optional<GroupType> type();
}

GroupType

Code Block
public enum GroupType {
    CONSUMER("consumer"),
    GENERIC("generic");
}

ListConsumerGroupsOptions

Mark deprecated

ListConsumerGroupsResult

Mark deprecated

ConsumerGroupsListing

Mark deprecated

Consumer

Mark enforceRebalance deprecated

Command-line Tools

What about kafka-consumer-groups.sh, ConsumerGroupCommand, etc.?

Proposed Changes

Membership State Machine

TBD

Partition Ownership Reconciliation Logic

TBD

Refactoring KafkaConsumer to Support Internal Delegates

TBD

Determining Group Protocol at Client Initialization

Satisfy the requirements to use the new protocol

Requirement 1: Interrogating the Server for the Correct version

TBD

Requirement 2: Ensuring the Regex is Compatible

TBD

Membership State Machine

TBD

Compatibility, Deprecation, and Migration Plan

  • What impact (if any) will there be on existing users?
  • If we are changing behavior how will we phase out the older behavior?
  • If we need special migration tools, describe them here.
  • When will we remove the existing behavior?

Test Plan

Describe in few sentences how the KIP will be tested. We are mostly interested in system tests (since unit-tests are specific to implementation details). How will we know that the implementation works as expected? How will we know nothing broke?

Rejected Alternatives

This KIP was created in order to share/discuss the detailed implementation of client work for KIP-848. Such implementation-based documents are not the purpose of the KIP process. Thus the rejected statusIf there are alternative ways of accomplishing the same thing, what were they? The purpose of this section is to motivate why the design is the way it is and not some other way.