1

我正在尝试向具有 4 个分区的主题发送消息。并且我希望消息按照 DefaultPartitioner 的决定(使用密钥的哈希)进入分区

kafkaTemplate.sendDefault(DefaultPartitioner(job.getId()),job.getId(),job); 我不确定如何让 kafkaTemplate 使用 DefaultPartitioner 来获取分区号。

有人可以帮我解决这个问题。

4

1 回答 1

1

让我们从 JavaDocs 开始吧!

/**
 * The default partitioning strategy:
 * <ul>
 * <li>If a partition is specified in the record, use it
 * <li>If no partition is specified but a key is present choose a partition based on a hash of the key
 * <li>If no partition or key is present choose a partition in a round-robin fashion
 */
public class DefaultPartitioner implements Partitioner {

/**
 * Send the data to the default topic with the provided key and no partition.
 * @param key the key.
 * @param data The data.
 * @return a Future for the {@link SendResult}.
 */
ListenableFuture<SendResult<K, V>> sendDefault(K key, V data);

因此,如果您想依赖DefaultPartitioner,您所需要的只是key记录。因此,只需使用该特定KafkaTemplate方法:

kafkaTemplate.sendDefault(job.getId(),job);
于 2017-04-12T20:24:52.387 回答