读书笔记——Kafka核心技术与实战(生产者分区机制原理)

为什么分区?

mcUfxg.png

  • 分区作用是提供负载均衡的能力,对数据分区是为了实现系统的高伸缩性 (High Scalability).
  • 不同的分区可放置在不同节点的机器上(同一个分区的副本可以分布在不同的机器上),数据的访问操作都是针对分区这个粒度进行的,这样每个节点的机器都独立执行各自分区的读写请求;
  • 增加新的节点机器来增加整理的吞吐量;

分区策略是什么?有哪些?

  • 分区策略是指决定生产者将消息发送到哪个分区的算法

  • 轮询算法:Round-robin

    • 一个主题下有三个分区Pa,Pb,Pc,消息1、4、7被分配到Pa…
    • 优秀的负载均衡表现,保证消息最大限度地分配到所有分区上,默认情况下是最合理的分区策略。
  • 随机策略:Randomness

  • List partitions = cluster.partitionsForTopic(topic);
    return ThreadLocalRandom.current().nextInt(partitions.size());

  • 按消息键保存策略:Key-Ordering

  • List partitions = cluster.partitionsForTopic(topic);
    return Math.abs(key.hashCode()) % partitions.size();

  • 其他分区策略:基于地理位置的分区策略,针对大规模的 Kafka 集群。根据 broker 所在的 IP 分区

  • List partitions = cluster.partitionsForTopic(topic);
    return partitions.stream().filter(p -> isSouth(p.leader().host())).map(PartitionInfo::partition).findAny().get();

总结:

  • Kafka 的消息组织方式实际上是三级架构:主题-分区-消息,主题下的消息会保存在某个分区下,不会在多个分区下保存多份。
  • 分区机制是实现负载均衡和高吞吐的关键
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章