Topic:producer-0 PartitionCount:3 ReplicationFactor:2 Configs:
Topic: producer-0 Partition: 0 Leader: 2 Replicas: 2,1 Isr: 2,1
Topic: producer-0 Partition: 1 Leader: 3 Replicas: 3,2 Isr: 3,2
Topic: producer-0 Partition: 2 Leader: 1 Replicas: 1,3 Isr: 1,3
从上一篇文章我们可以知道,名为producer-0的topic有3的partition,分别是partition:0
,partition:1
和partition:2
,并且他们分别在不同的机器上。
在这里我们先讲讲如何将消息发送到指定的partition中,然后在讲默认的partition分配策略(即DefaultPartitioner.java
)
指定的partition发送
话不多说,直接上代码。(提示:在启动生产者之前,先启动消费者。)
生产者代码如下:
/**
* 将消息发送到指定的partition中
* @author yangyaming
*/
public class PartitionProducer {
public static final String TOPIC_NAME = "producer-0";
private static Properties props = new Properties();
static{
props.put("bootstrap.servers", "192.168.1.3:9092,192.168.1.128:9092,192.168.1.130:9092");
props.put("acks", "all");
props.put("retries", 0);
props.put("batch.size", 16384);
props.put("linger.ms", 1);
props.put("buffer.memory", 33554432);
props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
props.put("value.serializer", "org.apache.kafka.common.serialization.StringSerializer");
}
public static void main(String[] args) {
Producer<String, String> producer = new KafkaProducer<>(props);
//获取该topic的所有partition信息
List<PartitionInfo> partitions = producer.partitionsFor(TOPIC_NAME);
printAllPartition(partitions);
/**将消息发送分