Kafka深入学习(四)——主题与分区

115 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情

前言

本文将介绍以下几个要点:

  1. 主题的管理;
  2. 分区的管理
  3. 分区数的选择

主题的管理

主题的管理包括创建、查看、修改、删除等操作,可以通过kafka-topics.sh脚本来执行这些操作。 主题、分区、副本、和Log(日志)之间的关系:

  • 1个主题对应1个或多个分区,一个分区对应1个或多个副本、一个副本对应1个Log(日志)
  • 主题和分区都是提供给上层用户的抽象,而在副本层面或更加确切地说是Log层面才有实际物理上的存在。
  • 同一个分区中多个副本必须分布在不同的broker,这样才能有效的提供数据冗余,如果设置时重复会报出AdminCommandFailedExeption异常。

分区的管理

优先副本的选举

分区使用多副本机制来提升数据可靠性,但只有leader副本对外提供读写服务,而follower副本只负责在消息内部执行数据的同步,如果一个分区的leader副本不可用,那么就意味着整个分区的不可用,此时就需要kafka 从剩余的follower副本中挑选出一个新的leader副本来继续提供读写服务,从某种程度可以说,broker节点上leader副本的个数决定了这个节点负载的高低。 在实际运行中,由于某些broker几点遇到宕机或崩溃的事情,此时当分区的leader节点发生故障时,会从follower节点中选取新的leader节点,这样可能会导致集群中各个节点之间负载不均衡,影响整体的健壮性与稳定性。 为了能够有效的治理负载失衡的情况,Kafka引入了优先副本的概念,指在AR集合列表中的第一个副本,理想情况下,优先副本就是该分区的leader副本,所以也可以称之为preferred reolica, Kafka要确保所有主题的优先副本在Kafka集群中均匀分布,这样就保证了所有分区的leader均衡分布。

而优先副本的选举就是通过一定的方式促使优先副本选举为leader副本,以此来促进“分区平衡”,但其不意味着集群的负载均衡,因为还要考虑集群中的分区分配是否均衡。