You are viewing a plain text version of this content. The canonical link for it is here.
Posted to jira@kafka.apache.org by "David Jacot (Jira)" <ji...@apache.org> on 2020/12/02 09:03:00 UTC

[jira] [Created] (KAFKA-10795) Automated protocol should expose Map keyed by TopicPartition

David Jacot created KAFKA-10795:
-----------------------------------

             Summary: Automated protocol should expose Map keyed by TopicPartition
                 Key: KAFKA-10795
                 URL: https://issues.apache.org/jira/browse/KAFKA-10795
             Project: Kafka
          Issue Type: Improvement
            Reporter: David Jacot
            Assignee: David Jacot


It is common in the AK protocol to encode topics and partitions. In these cases, we usually have a list/map of topic objects which have a name attribute and a partitions attribute. Then, the partitions attribute is a list/map of partition objects which have at least a partition attribute.

{code:javascript}
{ "name": "Topics", "type": "[]OffsetForLeaderTopicResult", "versions": "0+",
   "about": "Each topic we fetched offsets for.", "fields": [
      { "name": "Topic", "type": "string", "versions": "0+", "entityType": "topicName",
        "mapKey": true, "about": "The topic name." },
      { "name": "Partitions", "type": "[]EpochEndOffset", "versions": "0+",
        "about": "Each partition in the topic we fetched offsets for.", "fields": [
         { "name": "Partition", "type": "int32", "versions": "0+",
          "about": "The partition index." },
          ...
      ]}
    ]}
{code}

The caveat is that most of the internals of AK works with Map<TopicPartition, T> so we have to translate from the automated protocol data structures to the the internal one, and vice-versa.

{code:java}
Map<TopicPartition, EpochEndOffset> endOffsets = new HashMap<>();

for (OffsetForLeaderTopicResult topic : response.data().topics()) {
  for (EpochEndOffset partition : topic.partitions()) {
    TopicPartition topicPartition = new TopicPartition(topic.topic(), partition.partition());
    endOffsets.put(topicPartition, partition);
  }
}
{code}

Ideally, we would like to have the right data structures exposed by the automated protocol.




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