在这篇文章中,我将深入解析 Kafka 高性能 7 大秘诀之 Topic Partition 分区并发架构设计和分区负载均衡策略。
购买权益
本专栏原价 119,目前活动价 10 元,满 50 人后涨价。购买后除了可以学习知识以外,重点是提供以下服务。
享受 1 年内的 VIP 沟通交流服务,对于问题的任何疑问,都可以随时与我沟通进行答疑,直到理解为止。
享受 1 年内未来我的所有付费专栏的 7 折购买优惠。
享受 1 年内一次面试模拟服务(1 小时)。
享受 1 年内一次简历修改优化服务。
kafka 架构
在说 Topic patition 分区并发之前,我们先了解下 kafka 架构设计。一个典型的 Kafka 架构包含以下几个重要组件,如图 1 所示。
![c905f7952188a901fa7614ee3fd43e5e.png](https://img-blog.csdnimg.cn/img_convert/c905f7952188a901fa7614ee3fd43e5e.png)
图 1
Producer(生产者):发送消息的一方,负责发布消息到 Kafka 主题(Topic)。
Consumer(消费者):接受消息的一方,订阅主题并处理消息。Kafka 有 ConsumerGroup 的概念,每个 Consumer 只能消费所分配到的 Partition 的消息,每一个 Partition 只能被一个 ConsumerGroup 中的一个 Consumer 所消费,所以同一个 ConsumerGroup 中 Consumer 的数量如果超过了 Partiton 的数量,将会出现有些 Consumer 分配不到 partition 消费。
Broker(代理):服务代理节点,Kafka 集群中的一台服务器就是一个 broker,可以水平无限扩展,同一个 Topic 的消息可以分布在多个 broker 中。
Topic(主题)与 Partition(分区) :Kafka 中的消息以 Topic 为单位进行划分,生产者将消息发送到特定的 Topic,而消费者负责订阅 Topic 的消息并进行消费。图中 TopicA 有三个 Partiton(TopicA-par0、TopicA-par1、TopicA-par2)
为了提升整个集群的吞吐量,Topic 在物理上还可以细分多个 Partition,一个 Partition 在磁盘上对应一个文件夹。
Replica(副本):副本,是 Kafka 保证数据高可用的方式,Kafka 同一 Partition 的数据可以在多 Broker 上存在多个副本,通常只有 leader 副本对外提供读写服务,当 leader 副本所在 broker 崩溃或发生网络异常,Kafka 会在 Controller 的管理下会重新选择新的 Leader 副本对外提供读写服务。
ZooKeeper:管理 Kafka 集群的元数据和分布式协调。
Topic 主题
Topic 是 Kafka 中数据的逻辑分类单元,可以理解成一个队列。Broker 是所有队列部署的机器,Producer 将消息发送到特定的 Topic,而 Consumer 则从特定的 Topic 中消费消息,如图 2 所示。
![50d9a0d1b759798593e2ac1d1029ec5a.png](https://img-blog.csdnimg.cn/img_convert/50d9a0d1b759798593e2ac1d1029ec5a.png)
图 2
也就是说 Kafka 的消息组织方式实际上是三级结构:主题-分区-消息。主题下的每条消息只会保存在某一个分区中,而不会在多个分区中被保存多份。Topic、Partition、Broker 的关系如图 3 所示。
![5fa8bea7afe9181fc17124f0897480f3.png](https://img-blog.csdnimg.cn/img_convert/5fa8bea7afe9181fc17124f0897480f3.png)
图 3