分区的好处

  • ==便于合理的使用存储资源==,每个Partition在一个Broker上存储,可以把海量的数据按照分区切割成一块一块的数据存储在多台Broker上。合理控制分区任务,可以实现==负载均衡==的效果。
  • ==提高并行度==,生产者可以以分区为单位==发送数据==;消费者可以以分区为单位进行==消费数据==。

分区策略

  1. 多 Partition 分布式存储,利于集群数据的均衡。
  2. 并发读写,加快读写速度。
  3. 加快数据恢复的速率:当某台机器挂了,每个 Topic 仅需恢复一部分的数据,多机器并发。

选择分区的原则

  1. 指明 partition 的情况下,使用指定的 partition;
  2. 没有指明 partition,但是有 key 的情况下,将 key 的 hash 值与 topic 的 partition 数进行取余得到 partition 值;
  3. 既没有指定 partition,也没有 key 的情况下,kafka采用Sticky Partition(黏性分区器),会随机选择一个分区,并尽可能一直使用该分区,待该分区的batch已满或者已完成发送,==Kafka在随机一个分区进行使用(必须和上一次的分区不同,相同就再选)==

自定义分区器

为了满足业务需求,你可能需要自定义分区器。

需求

例如:我们实现一个分区器,姓名是小明的就发送到0号分区,小红的发送到1号分区,其他发送到2号分区。

实现步骤

  1. 定义类实现Partitioner接口
  2. 重写partition() 方法