生产者如何决定将消息放置在哪个分区中?

时间:2019-12-18 09:42:03

标签: apache-kafka apache-zookeeper

我是Kafka的新手。根据我的理解,主题又分为生产者发送消息的分区。

public class KafkaSender {

@Autowired
private KafkaTemplate<String, String> kafkaTemplate;

String kafkaTopic = "java_in_use_topic";

public void send(String message) {

    kafkaTemplate.send(kafkaTopic, message);
}

}

根据此代码,我们仅向生产者提供主题名称。它如何决定必须放置在哪个分区上,类似地,在用户端,我们也只给出必须从哪个分区读取的主题名称。它将如何决定?

1 个答案:

答案 0 :(得分:0)

有三种可能性。

1。在记录中指定了分区-使用该分区并在其上发送记录。

2。没有指定分区,但是存在密钥-然后,kafka使用密钥的哈希
    当我们要基于密钥分发数据时,可以使用它。以下公式用于确定分区:

hashCode(key) % noOfPartitions

3。如果不存在分区或密钥-以循环方式选择一个分区

编写自定义分区程序 Apache Kafka提供了一个名为Partitioner的接口,您可以在其中实现分区逻辑

https://kafka.apache.org/10/javadoc/org/apache/kafka/clients/producer/Partitioner.html