Kafka主题分区零未被使用

时间:2018-02-26 19:51:03

标签: apache-kafka kafka-consumer-api kafka-producer-api

我创建了一个包含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未使用?

1 个答案:

答案 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提供自己的分区程序来进行循环操作。