thanhlv created KAFKA-17632:
-------------------------------
Summary: Custom `partitioner.class` with an even number of
partitions always writes to even partitions
Key: KAFKA-17632
URL: https://issues.apache.org/jira/browse/KAFKA-17632
Project: Kafka
Issue Type: Bug
Affects Versions: 3.8.0
Reporter: thanhlv
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!
// write the logic to define the partition. Data is the class path to the
ClassCustomLogicPartitioner class
--
This message was sent by Atlassian Jira
(v8.20.10#820010)