如果key为null,则按照一种轮询的方式来计算分区分配
(第一次调用时,获得一个数,将他存入topicCounterMap中,下次调用时,取出该数,并counter.getAndIncrement(),这样每次获得的数都不一样,用他取代key的作用)
如果key不为null,则使用Hash算法(murmur的hash算法:非加密型Hash函数,具备高运算性能及低碰撞率)来计算分区分配;
(key的hash值取模,除以分区数量,取余数)
(toPositive(Utils.murmur2(keyBytes)) % numPartitions;)
//
// Source code recreated from a .class file by IntelliJ IDEA
// (powered by Fernflower decompiler)
import java.util.List;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
import java.util.concurrent.ThreadLocalRandom;
import java.util.concurrent.atomic.AtomicInteger;
import org.apache.kafka.clients.producer.Partitioner;
import org.apache.kafka.common.Cluster;
import org.apache.