0
私は基本的に以下の作業を行うカフカプロデューサーがいます。私はatleast 10のパーティションを持つトピックを持っていると私は彼らが消費した順序を気にしない(私のバックエンドはそれを処理します)。私は少なくとも10人の消費者を開始します(それぞれが1つのパーティションに張り付いていると仮定します)。もし私が(以下のコードを使用して)メッセージを公開すると、kafkaは負荷を処理し、すべてのパーティションにメッセージを均等に配置するか、キーを導入する必要があります(本当に問題はありません)。メッセージをカフカに公開する最も良い方法は何ですか?
KeyedMessage<String, String> data = new KeyedMessage<>(topic, txt);
producer.send(data);
producer.close();
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;
}
を使用する