面试题答案
一键面试主要组件及角色
- Producer(生产者)
- 角色:生产者在发送消息时,通过分区器(Partitioner)将消息发送到不同的分区。默认的分区器策略是基于消息的键(Key)进行哈希计算,然后映射到相应的分区,以此来实现消息在不同分区上的均匀分布,从而间接地参与负载均衡,避免消息集中发送到少数分区。
- Consumer(消费者)
- 角色:消费者从属于消费者组(Consumer Group)。在一个消费者组内,多个消费者会共同消费主题(Topic)的多个分区。消费者组通过协调器(Coordinator)来分配分区的消费权,每个消费者负责消费分配给自己的分区,实现负载均衡,使得消费能力在消费者组内得到合理利用。
- Broker(代理)
- 角色:Kafka集群由多个Broker组成。Broker负责存储和管理主题的分区。当生产者发送消息或消费者拉取消息时,Broker接收并处理请求。Broker之间通过副本机制(Replication)来保证数据的可靠性,同时,在分区的副本之间进行选举,选出Leader副本处理读写请求,Follower副本进行数据同步,这一过程有助于负载在不同Broker节点间的合理分布。
- Zookeeper
- 角色:虽然Kafka从0.11版本开始逐渐减少对Zookeeper的依赖,但Zookeeper在Kafka架构中仍有重要作用。它存储了Kafka集群的元数据信息,如Broker列表、主题分区信息等。在集群启动、Broker加入或离开集群、分区副本选举等过程中,Zookeeper为Kafka提供协调服务,保障负载均衡机制能够正常运行,确保整个集群的状态信息能够被各个组件正确获取和使用。
- Consumer Coordinator(消费者协调器)
- 角色:每个Broker都充当消费者协调器,负责管理消费者组。它负责处理消费者组的注册、成员加入和离开等操作。在进行分区分配时,协调器收集消费者组内所有消费者的信息,按照一定的分配策略(如Range、Round - Robin等)将分区分配给各个消费者,从而实现消费者组内的负载均衡。