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

Colin McCabe reassigned KAFKA-12755:
------------------------------------

    Assignee: Colin McCabe

> 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
>            Assignee: 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.
> Our long-term goal is to migrate from Scala to Java, and the monolithic core 
> module is an obstacle to that.
> *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