Class: Kafka::Partitioner
- Inherits:
-
Object
- Object
- Kafka::Partitioner
- Defined in:
- lib/kafka/partitioner.rb
Overview
Assigns partitions to messages.
Class Method Summary collapse
-
.partition_for_key(partition_count, message) ⇒ Integer
Assigns a partition number based on a partition key.
Class Method Details
.partition_for_key(partition_count, message) ⇒ Integer
Assigns a partition number based on a partition key. If no explicit partition key is provided, the message key will be used instead.
If the key is nil, then a random partition is selected. Otherwise, a digest of the key is used to deterministically find a partition. As long as the number of partitions doesn’t change, the same key will always be assigned to the same partition.
22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/kafka/partitioner.rb', line 22 def self.partition_for_key(partition_count, ) raise ArgumentError if partition_count == 0 # If no explicit partition key is specified we use the message key instead. key = .partition_key || .key if key.nil? rand(partition_count) else Zlib.crc32(key) % partition_count end end |