分区的优点
(1)便于合理使用存储资源,每个partition在一个Broker上存储,可以把海量的数据按照分区切割一块一块数据存储在多台broker上。合理控制分区的任务,可以实现负载均衡的效果。
(2)提高并行度,生产者可以分区为单位发送数据;消费者可以以分区单位进行消费数据。大大提高吞吐量。
分区策略
面试题
如果将订单的数据发送一个指定的分区?
非常简单,只需要将表名作为key即可。比如 order表。
partition= order.hashcode()/partition的数量.
/**
* kafka生产者-分区策略
*/
public class CustomKafkaProviderPartitionStrategy {
public static void main(String[] args) {
// 配置
Properties properties = new Properties();
//连接kafka broker
properties.put(ProducerConfig.BOOTSTRAP_SERVERS_CONFIG, "localhost:9092");
properties.put(ProducerConfig.KEY_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
properties.put(ProducerConfig.VALUE_SERIALIZER_CLASS_CONFIG, StringSerializer.class.getName());
//创建kafka 生产者对象
KafkaProducer<String, String> kafkaProducer = new KafkaProducer<>(properties);
// 发送数据
for (int i = 0; i < 3; i++) {
kafkaProducer.send(new ProducerRecord("quickstart-events", 0, "", "record:" + i), (recordMetadata, e) -> {
if (e == null) {
System.out.println("主题:" + recordMetadata.topic() + ".分区:" + recordMetadata.partition());
}
});
}
// 关闭数据
kafkaProducer.close();
}
}