[ https://issues.apache.org/jira/browse/KAFKA-17632?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Urban resolved KAFKA-17632. ---------------------------------- Fix Version/s: 4.0.0 Resolution: Fixed [~thanhlv] The RR partitioner has been fixed, and the interface got a small doc update. The change might give a hint on how to fix your custom implementation. > Custom `partitioner.class` with an even number of partitions always writes to > even partitions if use RoundRobinPartitioner > -------------------------------------------------------------------------------------------------------------------------- > > Key: KAFKA-17632 > URL: https://issues.apache.org/jira/browse/KAFKA-17632 > Project: Kafka > Issue Type: Bug > Affects Versions: 3.8.0 > Reporter: thanhlv > Assignee: Daniel Urban > Priority: Minor > Fix For: 4.0.0 > > Attachments: image-2024-09-27-15-05-53-707.png > > > Our project has some special logic that requires custom partitions. > With an odd number of Partitions, everything works fine and well. > However, with an even number of partitions. Data will only be written to > even-numbered Partition IDs > Info: > Lib Java: `kafka-clients:3.8.0` > Code demo: > {code:java} > public class CustomLogicPartitionMain { > public static void main(String[] args) throws IOException { > System.setProperty("org.slf4j.simpleLogger.defaultLogLevel", "ALL"); > final var props = new Properties(); > props.setProperty(ProducerConfig.CLIENT_ID_CONFIG, > "java-producer-producerRecordPartition-KeyNotNull"); > props.setProperty(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, > "localhost:29091,localhost:29092,localhost:29093,localhost:29094"); > props.setProperty(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, > StringSerializer.class.getName()); > props.setProperty(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, > StringSerializer.class.getName()); > props.setProperty(ProducerConfig.BATCH_SIZE_CONFIG, "5000"); > props.setProperty(ProducerConfig.PARTITIONER_CLASS_CONFIG, > "org.apache.kafka.clients.producer.RoundRobinPartitioner"); > try (var producer = new KafkaProducer<Object, String>(props)) { > final var messageProducerRecord = new ProducerRecord<>( > "topic-rep-1-partition-10", //topic name > // 36 byte > UUID.randomUUID().toString() // value > ); > for (int i = 1; i <= 5000; i++) { > producer.send(messageProducerRecord); > } > } > } > } > {code} > !image-2024-09-27-15-05-53-707.png! > > -- This message was sent by Atlassian Jira (v8.20.10#820010)