[ 
https://issues.apache.org/jira/browse/KAFKA-12755?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Colin McCabe updated KAFKA-12755:
---------------------------------
    Attachment: out.jpg

> Add server-common, server-tools gradle modules
> ----------------------------------------------
>
>                 Key: KAFKA-12755
>                 URL: https://issues.apache.org/jira/browse/KAFKA-12755
>             Project: Kafka
>          Issue Type: Improvement
>            Reporter: Colin McCabe
>            Priority: Major
>         Attachments: out.jpg, out2.jpg
>
>
> *Problems*
>       The core module takes a long time to compile.  There are several 
> reasons for this.  One is that it’s too big -- it would be better as several 
> gradle modules. Gradle is good about compiling multiple modules in parallel, 
> but if you have one really big module, you lose that parallelism.  Another 
> issue with the core module is that it’s written in Scala, and the Scala 
> compiler takes longer than the Java one.
>       A lot of server-side code is in the “clients” module.  From there, it 
> ends up on the CLASSPATH of producers, consumers, and admin clients.  This 
> has a lot of bad effects: it bloats the size of the clients jar, and allows 
> downstream projects to peek at code that should be isolated to the broker.
>       A lot of tools can’t be put into the “tools” module because they depend 
> on classes that are in “core”.  And tools can’t have a core dependency, 
> because that would impose a core dependency on connect as well.
>       One example of this problem is StorageTool and ClusterTool.  These 
> tools ended up getting written in Scala and put in the “core” module, rather 
> than the “tools” module.
> *Proposed Fixes*
>       Rename the “metadata” module to “controller” to reflect the fact that 
> it contains the controller
>       Make the "controller" module depend on "raft" rather than the other way 
> around ("raft" used to depend on "metadata")  This reflects the fact that the 
> controller consumes the API provided by the raft module.  (There is a 
> separate PR to do this.)
>       Create a new “server-common” module for common code which is shared by 
> several server modules, but not needed for clients.
>       Remove the dependency between "connect" and "tools"
>       Create a new “server-tools“ module which depends on “core”
> *The Server-Common Module*
> The server-common module should contain:
>       Pluggable APIs that are used only in the server (not in any client)
>       The KIP-405 tiered storage APIs
>       Authorizer APIs
>       CreateTopicPolicy, AlterConfigPolicy, etc.
>       Common Java utility code that is used in the server, but not used in 
> the client, such as
> ApiMessageAndVersion, KafkaEventQueue, VersionRange, etc.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to