default Optional<Set<Integer>> partitions(String topic, K key, V value, int numPartitions) {
        final Integer partition = partition(topic, key, value, numPartitions);
        return partition == null ? Optional.empty() : Optional.of(Collections.singleton(partition));
    }
Determine the number(s) of the partition(s) to which a record with the given key and value should be sent, 
for the given topic and current partition count
@param topic the topic name this record is sent to
@param key the key of the record
@param value the value of the record
@param numPartitions the total number of partitions
@return an Optional of Set of integers between 0 and {@code numPartitions-1},
Empty optional means using default partitioner
Optional of an empty set means the record won't be sent to any partitions i.e drop it.
Optional of Set of integers means the partitions to which the record should be sent to.
streams/src/main/java/org/apache/kafka/streams/processor/StreamPartitioner.java