From 030d133f6f3e45a6eb2dabf70e4ebe2961f67824 Mon Sep 17 00:00:00 2001 From: Dana Powers Date: Sat, 23 Jan 2016 15:27:11 -0800 Subject: DefaultPartitioner - implements java client logic --- kafka/partitioner/default.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 kafka/partitioner/default.py (limited to 'kafka/partitioner') 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] -- cgit v1.2.1