Uploaded image for project: 'Kafka'
  1. Kafka
  2. KAFKA-4402

Kafka Producer's DefaultPartitioner is actually not round robin as said in the code comments "If no partition or key is present choose a partition in a round-robin fashion"

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • None
    • 0.10.2.0
    • None
    • None

    Description

      From this code comments, it is said that Kafka client Producer's DefaultPartitioner will do round robin if "no partition or key is present",
      https://github.com/apache/kafka/blob/41e676d29587042994a72baa5000a8861a075c8c/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java#L34

      from the code it looks trying to do round robin as well, as it maintained a counter and try to increase it every time and then will decide which partition to go to;

      However the issue here is the counter is a global counter that is shared by all the topics, so it is actually not round robin per topic and sometimes caused unbalanced routing among different partitions.

      Although we can pass a custom implementation of interface "org.apache.kafka.clients.producer.Partitioner", it might be still good to make the default implementation true round robin as comment.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              Jun Yao Jun Yao
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: