37 lines
1.1 KiB
Java
37 lines
1.1 KiB
Java
package com.mobai.demo;
|
|
|
|
import org.apache.kafka.clients.producer.Partitioner;
|
|
import org.apache.kafka.common.Cluster;
|
|
import org.apache.kafka.common.PartitionInfo;
|
|
|
|
import java.util.List;
|
|
import java.util.Map;
|
|
import java.util.Random;
|
|
|
|
/**
|
|
* 1.自定义分区策略
|
|
*/
|
|
public class MyPartition implements Partitioner {
|
|
Random random = new Random();
|
|
public int partition(String topic, Object key, byte[] keyBytes, Object value, byte[] valueBytes, Cluster cluster) {
|
|
//获取分区列表
|
|
List<PartitionInfo> partitionInfos = cluster.partitionsForTopic(topic);
|
|
int partitionNum = 0;
|
|
if(key == null){
|
|
partitionNum = random.nextInt(partitionInfos.size());//随机分区
|
|
} else {
|
|
partitionNum = Math.abs((key.hashCode())/partitionInfos.size());
|
|
}
|
|
System.out.println("当前Key:" + key + "-----> 当前Value:" + value + "----->" + "当前存储分区:" + partitionNum);
|
|
return partitionNum;
|
|
}
|
|
|
|
public void close() {
|
|
|
|
}
|
|
|
|
public void configure(Map<String, ?> map) {
|
|
|
|
}
|
|
}
|