Hi, There are many classes in the client module that are not really related to the client. It is good to have common modules structure with respective classes/interfaces. Implementors/providers need to have dependency only on those modules instead of having a dependency on the client module.
Below common module structure may be a good starting point for the discussion. kafka-common: Common classes which can be used by any of the other modules like client, kafka-server-common, and server(core), streams etc. Kafka-server-common(or kafka-core-common): Classes required only for server(core) and for the implementors/providers. Below are some of the common server interfaces/classes which are required only on the server(or core). These are not related to the client module. org.apache.kafka.server.policy AlterConfigPolicy CreateTopicPolicy org.apache.kafka.server.quota ClientQuotaCallback ClientQuotaEntity ClientQuotaType org.apache.kafka.common.replica ClientMetadata PartitionView RackAwareReplicaSelector ReplicaSelector ReplicaView One more example, java Authorizer interface is introduced with KIP-504. Its implementation will be applicable only for server(core) module. This can be moved to kafka-server-common module instead of pushing into kafka client module. Please let me know your thoughts/opinions. Thanks, Satish.