我是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);
}
}
根据此代码,我们仅向生产者提供主题名称。它如何决定必须放置在哪个分区上,类似地,在用户端,我们也只给出必须从哪个分区读取的主题名称。它将如何决定?
答案 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