mirror of https://github.com/apache/kafka.git
MINOR: Clean up the sticky partitioner code a bit (#7151)
Reviewers: Colin P. McCabe <cmccabe@apache.org>, Lucas Bradstreet <lucasbradstreet@gmail.com>
This commit is contained in:
parent
0c2d1c390d
commit
88087e91dd
|
@ -925,7 +925,7 @@ public class KafkaProducer<K, V> implements Producer<K, V> {
|
|||
partition = partition(record, serializedKey, serializedValue, cluster);
|
||||
tp = new TopicPartition(record.topic(), partition);
|
||||
if (log.isTraceEnabled()) {
|
||||
log.trace("Retrying because of a new batch, sending the record to topic {} partition {}. The old partition was {}", record.topic(), partition, prevPartition);
|
||||
log.trace("Retrying append due to new batch creation for topic {} partition {}. The old partition was {}", record.topic(), partition, prevPartition);
|
||||
}
|
||||
// producer callback will make sure to call both 'callback' and interceptor callback
|
||||
interceptCallback = new InterceptorCallback<>(callback, this.interceptors, tp);
|
||||
|
|
|
@ -51,14 +51,14 @@ public class StickyPartitionCache {
|
|||
// triggered the new batch matches the sticky partition that needs to be changed.
|
||||
if (oldPart == null || oldPart == prevPartition) {
|
||||
List<PartitionInfo> availablePartitions = cluster.availablePartitionsForTopic(topic);
|
||||
Integer random = Utils.toPositive(ThreadLocalRandom.current().nextInt());
|
||||
if (availablePartitions.size() < 1) {
|
||||
Integer random = Utils.toPositive(ThreadLocalRandom.current().nextInt());
|
||||
newPart = random % partitions.size();
|
||||
} else if (availablePartitions.size() == 1) {
|
||||
newPart = availablePartitions.get(0).partition();
|
||||
} else {
|
||||
while (newPart == null || newPart.equals(oldPart)) {
|
||||
random = Utils.toPositive(ThreadLocalRandom.current().nextInt());
|
||||
Integer random = Utils.toPositive(ThreadLocalRandom.current().nextInt());
|
||||
newPart = availablePartitions.get(random % availablePartitions.size()).partition();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -32,6 +32,10 @@
|
|||
</li>
|
||||
<li>The internal <code>PartitionAssignor</code> interface has been deprecated and replaced with a new <code>ConsumerPartitionAssignor</code> in the public API. Users
|
||||
implementing a custom PartitionAssignor should migrate to the new interface as soon as possible.</li>
|
||||
<li>The <code>DefaultPartitioner</code> now uses a sticky partitioning strategy. This means that records for specific topic with null keys and no assigned partition
|
||||
will be sent to the same partition until the batch is ready to be sent. When a new batch is created, a new partition is chosen. This decreases latency to produce, but
|
||||
it may result in uneven distribution of records across partitions in edge cases. Generally users will not be impacted, but this difference may be noticeable in tests and
|
||||
other situations producing records for a very short amount of time.</li>
|
||||
</ul>
|
||||
|
||||
<h4><a id="upgrade_2_3_0" href="#upgrade_2_3_0">Upgrading from 0.8.x, 0.9.x, 0.10.0.x, 0.10.1.x, 0.10.2.x, 0.11.0.x, 1.0.x, 1.1.x, 2.0.x or 2.1.x or 2.2.x to 2.3.0</a></h4>
|
||||
|
|
Loading…
Reference in New Issue