Hi,I'm trying to upgrade my 0.8 producer to 0.9(0.10) APIs, and noticed that 
the way to implement a custom Partitioner has changed....
In 0.8, I had implemented this interface:kafka.producer.Partitioner
with this implementation of the partition() method - where the goal is to 
equally distribute events by their custom IDs over all available partitions:    
@Override
    public int partition(Object myIdAsObject, int numberOfPartitions) {
        String myId = (String) myIdAsObject;
        int partitionNumber = (myId.hashCode() & 0x7fffffff) % 
numberOfPartitions;
        return partitionNumber;
    }

In 0.9, I found this Interface:org.apache.kafka.clients.producer.Partitioner
and the method to partition has different arguments. Here is my attempt to 
replicate the same partitioning logic:
    @Override
    public int partition(String topic, Object key, byte[] keyBytes,
            Object value, byte[] valueBytes, Cluster cluster) {
        int numberOfPartitions = cluster.partitionCountForTopic(topic);
        String myId = (String) key;
        int partitionNumber = (myId.hashCode() & 0x7fffffff) % 
numberOfPartitions;
        return partitionNumber;
    }

Questions:-- is this the right way to find the current number of partitions for 
the topic the producer is configured for?-- if yes - what is the performance 
impact of querying Cluster for the number of partitions on *each* event 
processing?-- what are 'value' and 'valueBytes' objects - the actual message?-- 
assuming I am sending events as: 
       ProducerRecord<byte[], byte[]> record =
                new ProducerRecord<byte[], byte[]>(destinationTopic, 
myId.getBytes(), eventBody.getBytes());
        producer.send(record);
will the correct values passed to the custom Partitioner's partition() method? 
(the myId and the event body) 

If you have references to examples of implementing custom Partitioners - would 
be great.The only one I could find was this: 
http://howtoprogram.xyz/2016/06/04/write-apache-kafka-custom-partitioner/ but 
it is too simplistic, as it does not really use the info about the number of 
partitions.
Thanks!Marina

Reply via email to