summaryrefslogtreecommitdiff
path: root/kafka/partitioner/default.py
diff options
context:
space:
mode:
authorDana Powers <dana.powers@gmail.com>2016-01-24 18:36:46 -0800
committerDana Powers <dana.powers@gmail.com>2016-01-24 18:36:46 -0800
commit077dc4742ffa82584946379790424faf4c6ba47f (patch)
treebd14706a8dfc429f6bf211bac02ad21af967c6ce /kafka/partitioner/default.py
parent48e96822b3ec4f897438a2d1cdb735f51648cb48 (diff)
parent85c0dd2579eb6aa0b9492d9082d0f4cf4d8ea39d (diff)
downloadkafka-python-077dc4742ffa82584946379790424faf4c6ba47f.tar.gz
Merge pull request #515 from dpkp/kafka_producer
KafkaProducer
Diffstat (limited to 'kafka/partitioner/default.py')
-rw-r--r--kafka/partitioner/default.py23
1 files changed, 23 insertions, 0 deletions
diff --git a/kafka/partitioner/default.py b/kafka/partitioner/default.py
new file mode 100644
index 0000000..358efeb
--- /dev/null
+++ b/kafka/partitioner/default.py
@@ -0,0 +1,23 @@
+import random
+
+from .hashed import murmur2
+
+
+class DefaultPartitioner(object):
+ """Default partitioner.
+
+ Hashes key to partition using murmur2 hashing (from java client)
+ If key is None, selects partition randomly from available,
+ or from all partitions if none are currently available
+ """
+ @classmethod
+ def __call__(cls, key, all_partitions, available):
+ if key is None:
+ if available:
+ return random.choice(available)
+ return random.choice(all_partitions)
+
+ idx = murmur2(key)
+ idx &= 0x7fffffff
+ idx %= len(all_partitions)
+ return all_partitions[idx]