我创建了一个包含3个分区的主题
Topic:fixtures PartitionCount:3 ReplicationFactor:1 Configs:
Topic: fixtures Partition: 0 Leader: 0 Replicas: 0 Isr: 0
Topic: fixtures Partition: 1 Leader: 0 Replicas: 0 Isr: 0
Topic: fixtures Partition: 2 Leader: 0 Replicas: 0 Isr: 0
我使用Java Producer同步写入主题
producer.send(new ProducerRecord<>(KafkaProperties.TOPIC_FIXTURES, key, value)).get();
我有一个Java用户订阅并从中读取
Consumer<String, String> kafkaConsumer = new KafkaConsumer<>(configs);
kafkaConsumer.subscribe(Collections.singletonList(KafkaProperties.TOPIC_FIXTURES));
我的键总是一组固定的3个不同的字符串(k1,k2,k3)。但我的消息总是分区1或分区2 - k1和k2进入分区1,k3进入分区2.
为什么分区0未使用?
答案 0 :(得分:4)
对于键控消息,default partitioner根据密钥的散列计算分区。
对于许多密钥,使用密钥的散列是在分区之间均匀分布消息的有效方法。
但是如果您只有很少的不同密钥(或者密钥数量接近分区数量),则可能无法使用所有分区。
如果是这种情况,那么您可以使用/*sample data*/
data want;
set have;
input subj param value visit$ base;
cards;
1 1 50 scr 55
1 1 55 rand 55
1 1 . 1 55
1 1 . 2 55
1 2 120 scr 125
1 2 125 rand 125
1 2 . 1 125
1 2 . 2 125
;
run;
配置为Producer提供自己的分区程序来进行循环操作。