Kafka核心总结
3.1Kafka副本作用
默认由broker端参数default.replication.factor控制的分区设置一个副本,通过修改默认值或在命令行创建topic时指定replication-factor参数控制副本数量。通过增加消息副本的数量可以使消息冗余储存,提高数据可靠性;还可以提高其服务可用性,副本选举机制会使再broker上的leader挂掉,就近原则选举follower副本为新的leader,从而继续对外提供读写服务。
3.2读写分离
为保证Kafka数据读写一致性,生产端所有的读写请求都是由leader处理,follower副本仅从leader副本出异步拉取消息,将消息进行同步。
3.3副本集和
ISR(In-Sync Replicas)副本集和或副本同步队列,除此之外还有OSR(Out-Sync Replicas)、AR(Assigned Replicas)概念。AR=ISR+OSR。
ISR表示分区中正在与leader副本进行同步的replica列表,且必定包含leader副本。
ISR列表是持久化在Zookeeper当中的,任何ISR列表中的副本都有资格参与leader选举。它是动态变化的,并不是所有的分区副本都在ISR列表中,有参数replica.lag.time.max.ms控制,参数含义是副本同步落后于leader的最大时间间隔,默认10s,当某一follower副本中消息比leader中的消息延迟超过十秒,将会排除在ISR列表当中。
3.4Unclean leader选举
参数unclean.leader.election.enable控制是否允许(OSR)非同步副本参与leader选举;开启,若ISR为空,将会从OSR中选举新的leader,这个过程称之为Unclean leader选举。
CAP理论,即一个系统不可能同时满足一致性(Consistency)、可用性(Availability)和分区容错性(Partition Tolerance)中的两个。所以在这个问题上,Kafka 赋予了我们选择 C 或 A 的权利。
4.1控制器选举
当集群中的任意broker启动时,都会尝试去Zookeeper中创建controller节点,第一个成功创建的broker则会被指定为控制器,其它broker则会监听该节点的变化,当运行中的控制器突然宕机或者意外终止时,其它broker'能够迅速的感知并尝试创建新的控制节点,创建成功后broker则会成为新的控制器。
4.2控制器功能
控制器的主要功能是管理和协调Kafka集群,Kafka控制器主要做的事情具体有:
主题管理:创建、删除topic,以及增加topic分区操作都是由控制器执行。
分区重分配:执行Kafka的reassign脚本对topic分区重分配操作。
Preferred leader选举:Preferred replica(副本优先),表示的是分配副本中的第一个副本。Preferred leader选举就是当leader失败的情况下会优先窜则Preferred副本为新的leader。
集群成员管理:控制器能够监听新的broker的增加,broker的主动关闭或者被动宕机,进而做其他工作。利用Zookeeper的ZNode模型和Watcher机制,控制器会监听Zookeeper中/broker/ids下临时节点的变化。
数据服务:控制器上保存了最全的集群元数据信息,其他所有的broker会定期接受控制器发来的元数据更新请求,从而更行其内存中的缓存数据。
控制器是Kafka的心脏,在0.11之后对控制器进行了重构,把控制器内部多线程设计改成了单线程加时间队列的方案,消除了多线程的资源消耗和线程安全问题,另一个改进是之前同步操作Zokeeper改为了异步操作,消除了Zookeeper端的性能瓶颈,大大提高了控制器的稳定性。
附赠常见kafka面试32题(过往记忆大数据)
https://www.iteblog.com/archives/2605.html