kafka的选举机制
1.控制器(Broker)选举
- 在一个kafka集群中,有多个broker节点,所有的Kakfa Broker集群受Zookeeper管理。第一个启动的broker会通过在zookeeper中创建临时节点/controller来让自己成为控制器,其他broker启动时也会在zookeeper中创建临时节点,如果已经存在了一个控制器,那么就会在zookeeper中创建watch对象(也叫Kafka Broker follower),便于它们收到控制器变更的通知,当一个broker control 控制器发生了宕机,所有的Broker follower 都会收到通知,就会去Zookeeper 上注册一个Broker Controller ,但是只有一个会注册成功,其他的依旧都会失败,这个成功在Zookeeper上注册临时节点的这个Kafka Broker会成为Kafka Broker Controller
2.分区副本选举机制
- 在kafka的集群中,会存在着多个主题topic,在每一个topic中,又被划分为多个partition,为了防止数据不丢失,每一个partition又有多个副本.
- 分区使用多副本机制来主要是提升可靠性,一点有副本挂了,就会选择一个新的分区副本成为leader,只有 leader 副本对外提供读写服务,而 follower 副 本只负责在内部进行消息的同步。如果一个分区的 leader 副本不可用,那么就意味着整个分区 变得不可用 ,此时就需要 Kafka 从剩余的 follower 副本中挑选一个新的 leader 副本来继续对外 提供服务。虽然不够严谨,但从某种程度上说 , broker 节点中 leader 副本个数的多少决定了这 个节点负载的高低。
3.消费组选举
- 在kafka的消费端,会有一个消费者协调器以及消费组,组协调器GroupCoordinator需要为消费组内的消费者选举出一个消费组的leader
- 如果消费组内还没有leader,那么第一个加入消费组的消费者即为消费组的leader,如果某一个时刻leader消费者由于某些原因退出了消费组,那么就会重新选举leader。
主题和分区
主题和分区是 Kafka 的两个核心概念
主题和分区是逻辑上的概念,一个主题下可以有N个分区,副本和log 日志文件, 只有日志层面才是实际无力上的存在。
- 生产者发布消息到对应的主题用于消费者订阅消费,订阅者并且从订阅的主题上拉去信息,当消息发布到主题后,只会被投递到订阅它的消费组的一个消费者中。
消费者与消费组
消费者( Consumer)负责订阅 Kafka 中的主题( Topic),并且从订阅的主题上拉取消息。 与其他一些消息中间件不同的是:在 Kafka 的消费理念中还有一层消费组( Consumer Group) 的概念,每个消费者都有 一个对应的消费组, 两个消费组之间互不影响。 每个消费者只能消费所分配到的分区中的消息。换言之 ,每一个分区只能被一个消费组中的一 个消费者所消费 。一般情况下,消费组的消费者数量小于订阅主题中的分区数量,否则会导致有消费者永远无法消费到分区的消息。
点对点 CP2P, Point-to-Point)模式和发 布/订阅( Pub/Sub)模式
如果所有的消费者都隶属于同 一个消费组,那么所有的消息都会被均衡地投递给每 一 个消费者,即 每条消息只会被一个 消费者处 理,这就相当于点对点模式 的应用 。
如果所有的消费者都隶属于不同的消费组,那么所有的消息都会被广播给所有的消费 者,即每条消息会被所有的消费者处理,这就相当于发布/订阅模式的应用 。