guazi xiuche2021-06-25

2021-06-26  本文已影响0人  wuhuaguo丶

Kafka不会有脑裂
kafka中只有一个控制器controller 负责分区的leader选举,同步broker的新增或删除消息,但有时由于网络问题,可能同时有两个broker认为自己是controller,这时候其他的broker就会发生脑裂,不知道该听从谁的。
如何解决?controller epoch
每当新的controller产生的时候就会在zk中生成一个全新的、数值更大的controller epoch的标识,并同步给其他的broker进行保存,这样当第二个controller发送指令时,其他的broker就会自动忽略。
选举问题
每个消息有自己的topic 每个topic有多个分区 多个分区位于不同的broker 每个分区有一个主分区和多个从分区。
每个分区都有一个主分区(leader)和多个从分区(fowller) 当一个broker宕机时,存在于该broker的主分区也会停止服务,因此要重新选举新的leader分区。
如何选举
控制器会从zk中读取ISR列表 选取下一个有效的分区副本成为新的leader
 Kafka会在Zookeeper上针对每个Topic维护一个称为ISR(in-sync replica,已同步的副本)的集合,该集合中是一些分区的副本。如果这个集合有增减,kafka会更新zookeeper上的记录。

算法:

复试:

停止流水线是怎么做的

分布式锁——还是拿插入数据的例子,如果是分布式系统,构建全局唯一索引比较困难,例如唯一性的字段没法确定,这时候可以引入分布式锁,通过第三方的系统(redis或zookeeper),在业务系统插入数据或者更新数据,获取分布式锁,然后做操作,之后释放锁,这样其实是把多线程并发的锁的思路,引入多多个系统,也就是分布式系统中得解决思路。要点:某个长流程处理过程要求不能并发执行,可以在流程执行之前根据某个标志(用户ID+后缀等)获取分布式锁,其他流程执行时获取锁就会失败,也就是同一时间该流程只能有一个能执行成功,执行完成后,释放分布式锁(分布式锁要第三方系统提供);

总监面试:

MVCC底层原理
MySQL事务的实现原理

上一篇下一篇

猜你喜欢

热点阅读