[ https://issues.apache.org/jira/browse/KAFKA-10195?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
dengziming resolved KAFKA-10195. -------------------------------- Resolution: Won't Fix > Move offset management codes from ConsumerCoordinator to a new class > -------------------------------------------------------------------- > > Key: KAFKA-10195 > URL: https://issues.apache.org/jira/browse/KAFKA-10195 > Project: Kafka > Issue Type: Improvement > Components: clients, consumer > Reporter: dengziming > Assignee: dengziming > Priority: Minor > > ConsumerCoordinator has 2 main functions: > # partitions assignment > # offset management > We are adding some new features in it, for example KAFKA-9657 add a field > `throwOnFetchStableOffsetsUnsupported` which only used in offset management. > And the 2 functions almost don't interact with each other, so it's not wise > to put these code in one single class, can we try to move offset management > code to a new class? > For example, the below fields only used in offset management: > ``` > // can be move to another class directly > private final OffsetCommitCallback defaultOffsetCommitCallback; > private final ConsumerInterceptors<?, ?> interceptors; > private final AtomicInteger pendingAsyncCommits; > private final ConcurrentLinkedQueue<OffsetCommitCompletion> > completedOffsetCommits; > private AtomicBoolean asyncCommitFenced; > private final boolean throwOnFetchStableOffsetsUnsupported; > private PendingCommittedOffsetRequest pendingCommittedOffsetRequest = null; > > // used in `onJoinComplete` but can also be moved out. > private final boolean autoCommitEnabled; > private final int autoCommitIntervalMs; > private Timer nextAutoCommitTimer; > ``` > So we can just create a new class `OffsetManageCoordinator` and move the > related codes into it. Similarly, a new class `SubscribeManager` can also be > created. here is the UML class diagram: > !image-2020-06-28-19-50-26-570.png! > > The above is the current design in which KafkaConsumer interact with Consumer > directly. the below is the new design, we add a `ConsumerCoordinatorFacade` > in which we put `OffsetCoordinator` and `SubscribeCoordinator` to manage > offset and assigning respectively. both `OffsetCoordinator` and > `SubscribeCoordinator` need a `AbstractCoordinator` cause they will interact > with each other(even rarely). > -- This message was sent by Atlassian Jira (v8.3.4#803005)