Kafka default partition selection strategy
While sending message via KafkaTemplate you could specify concrete partition in destination topic. If partition doesn’t specify – default partitioner strategy will be used. Let’s see logic chain for partition selection:
KafkaProducer#doSend(ProducerRecord<K, V> record, Callback callback) ->
KafkaProducer#partition(ProducerRecord<K, V> record, byte[] serializedKey, byte[] serializedValue, Cluster cluster) ->
DefaultPartitioner#partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster){
...
Utils.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
...
}
For example for integer key = 3 murmur2 hash (return unsigned 32-bit value) is 841864711. If number of partitions is 5 then remainder from modulus operator will be 1. So partition 1 will be used to send message.