向Kafka发布消息的最佳方式是什么?

xxe27gdn  于 2021-06-07  发布在  Kafka
关注(0)|答案(1)|浏览(364)

我有一个Kafka制片人,基本上做下面的工作。我有一个主题,至少有10个分区,我不在乎他们消费的顺序(我的后端将处理它)。我还将启动至少10个消费者(假设每个消费者都粘在一个分区上)。如果我开始发布消息(使用下面的代码),kafka会处理负载并将消息均匀地放在所有分区中吗?还是我应该引入一个密钥(这对我的应用程序来说并不重要)并自己实现循环?

KeyedMessage<String, String> data = new KeyedMessage<>(topic, txt);
producer.send(data);
producer.close();

有什么想法吗?

r6hnlfcb

r6hnlfcb1#

在默认情况下,将使用org.apache.kafka.clients.producer.internals.defaultpartitioner

if (keyBytes == null) {
        int nextValue = counter.getAndIncrement();
        List<PartitionInfo> availablePartitions =     cluster.availablePartitionsForTopic(topic);
        if (availablePartitions.size() > 0) {
            int part = DefaultPartitioner.toPositive(nextValue) % availablePartitions.size();
            return availablePartitions.get(part).partition();
        } else {
            // no partitions are available, give a non-available partition
            return DefaultPartitioner.toPositive(nextValue) % numPartitions;
        }
    } else {
        // hash the keyBytes to choose a partition
        return DefaultPartitioner.toPositive(Utils.murmur2(keyBytes)) % numPartitions;
    }

链接到源代码
根据代码,kafka将在所有分区之间平均分割所有消息

相关问题