Andrew Grant created KAFKA-14386:
------------------------------------

             Summary: Change ReplicaPlacer to return a class instead of list of 
list of integers
                 Key: KAFKA-14386
                 URL: https://issues.apache.org/jira/browse/KAFKA-14386
             Project: Kafka
          Issue Type: Improvement
            Reporter: Andrew Grant
            Assignee: Andrew Grant


In KRaft mode, a new interface was introduced, 
[ReplicaPlacer|https://github.com/apache/kafka/blob/trunk/metadata/src/main/java/org/apache/kafka/metadata/placement/ReplicaPlacer.java],
 that is used by ReplicationControlManager to create partition assignments 
during both CreateTopics and CreatePartitions RPCs. Right now it has one 
implementation, StripedReplicaPlacer.

Currently, it has a method called place that returns a list of list of integers:

 
{code:java}
List<List<Integer>> place(
PlacementSpec placement,
ClusterDescriber cluster
) throws InvalidReplicationFactorException;{code}
 

The index corresponds to the partition ID and the integers are the replicas of 
the assignment. The suggestion is to update the interface so that it models 
topic and partitions more explicitly. I'm thinking something like:
{code:java}
TopicAssignment place(
PlacementSpec placement,
ClusterDescriber cluster
) throws InvalidReplicationFactorException;{code}
where we have

 
{code:java}
public class TopicAssignment {
    private List<PartitionAssignment> assignments;

    public TopicAssignment(List<PartitionAssignment> assignments) {
     this.assignments = assignments;
    }

    public List<PartitionAssignment> assignments() {
     return assignments;
    }
}{code}
and

 
{code:java}
public class PartitionAssignment {
    private List<Integer> replicas;

    public PartitionAssignment(List<Integer> replicas) {
     this.replicas = replicas;
    }

    public PartitionAssignment(List<Integer> replicas) {
     this.replicas = replicas;
    }

    public List<Integer> replicas() {
     return replicas;
    }
}{code}
There are two reasons for the suggestion. First, as mentioned above, it will 
make the interface, arguably, a bit more readable and understandable by 
explicitly modeling the idea of topic and partition. Second and more 
importantly, it makes the interface more extendable in the future. Right now it 
would be challenging to add more metadata to the response. By having classes, 
we can easily add fields to them without breaking/changing the interface.

Curious to hear other folks thoughts on this.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to