Sort partitions before calling partitioner (#905)
This commit is contained in:
@@ -14,6 +14,13 @@ class DefaultPartitioner(object):
|
|||||||
"""
|
"""
|
||||||
@classmethod
|
@classmethod
|
||||||
def __call__(cls, key, all_partitions, available):
|
def __call__(cls, key, all_partitions, available):
|
||||||
|
"""
|
||||||
|
Get the partition corresponding to key
|
||||||
|
:param key: partitioning key
|
||||||
|
:param all_partitions: list of all partitions sorted by partition ID
|
||||||
|
:param available: list of available partitions in no particular order
|
||||||
|
:return: one of the values from all_partitions or available
|
||||||
|
"""
|
||||||
if key is None:
|
if key is None:
|
||||||
if available:
|
if available:
|
||||||
return random.choice(available)
|
return random.choice(available)
|
||||||
|
@@ -625,7 +625,7 @@ class KafkaProducer(object):
|
|||||||
assert partition in self._metadata.partitions_for_topic(topic), 'Unrecognized partition'
|
assert partition in self._metadata.partitions_for_topic(topic), 'Unrecognized partition'
|
||||||
return partition
|
return partition
|
||||||
|
|
||||||
all_partitions = list(self._metadata.partitions_for_topic(topic))
|
all_partitions = sorted(self._metadata.partitions_for_topic(topic))
|
||||||
available = list(self._metadata.available_partitions_for_topic(topic))
|
available = list(self._metadata.available_partitions_for_topic(topic))
|
||||||
return self.config['partitioner'](serialized_key,
|
return self.config['partitioner'](serialized_key,
|
||||||
all_partitions,
|
all_partitions,
|
||||||
|
Reference in New Issue
Block a user