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.

Reply via email to