我正在尝试向具有 4 个分区的主题发送消息。并且我希望消息按照 DefaultPartitioner 的决定(使用密钥的哈希)进入分区
kafkaTemplate.sendDefault(DefaultPartitioner(job.getId()),job.getId(),job);
我不确定如何让 kafkaTemplate 使用 DefaultPartitioner 来获取分区号。
有人可以帮我解决这个问题。
我正在尝试向具有 4 个分区的主题发送消息。并且我希望消息按照 DefaultPartitioner 的决定(使用密钥的哈希)进入分区
kafkaTemplate.sendDefault(DefaultPartitioner(job.getId()),job.getId(),job);
我不确定如何让 kafkaTemplate 使用 DefaultPartitioner 来获取分区号。
有人可以帮我解决这个问题。
让我们从 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);