【面试官】知道ZooKeeper有什么应用场景吗
- 面试官:知道ZooKeeper有什么应用场景吗?
- 面试官:你挑一个你比较熟悉的场景讲讲?
- 面试官:你说的是排他锁,共享锁呢?
- 面试官:emmmm有没听说过共享锁的羊群效应?
- 面试官:那怎么解决呢?
- 面试官:Kafka应用场景呢,知道Kafka是怎么利用ZooKeeper吗?
- 面试官:你刚刚说到Kafka生产者负载均衡,那消费者负载均衡知道吗?
大家好,我是南哥。
一个Java学习与进阶的领路人,跟着南哥我们一起Java成长。
文章目录
- ZooKeeper应用场景
- 分布式锁实现
- 共享锁
- 共享锁羊群效应
- 处理羊群效应
- Kafka应用场景
- 消费者负载均衡
1. ZooKeeper应用场景
面试官:知道ZooKeeper有什么应用场景吗?
主要有这几种。
-
数据发布/订阅。可以用来实现配置中心
-
命名服务。类似于UUID,可以生成全局唯一的ID
-
集群管理。每一个服务器是一个子节点,可以用来检测到集群中机器的上/下线情况
-
分布式锁
1.1 分布式锁实现
面试官:你挑一个你比较熟悉的场景讲讲?
好的面试官,那我讲下分布式锁。
是这样的,ZooKeep的获取锁时会在/exclusive_lock节点下创建子节点,如果创建成功则获得锁。如果失败,则客户端会在该节点注册一个子节点变更的Watcher监听。
同样,释放锁则删除该子节点,此时Watcher监听就会通知客户端可以重新获取了。
1.2 共享锁
面试官:你说的是排他锁,共享锁呢?
共享锁也是类似的场景。
每次读、写请求同样是创建子节点,是一个类似于“/shared_lock/[Hostname]-请求类型-序号”的临时顺序节点。
接着会获取子节点列表,同时注册Watcher监听。
- 获取读锁的话,如果前面比自己小的序号没有写请求,则可以读
- 获取写锁的话,只有在自己是的情况下
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
Java面试突击 文章被收录于专栏
👉以面试官面试的形式,涵盖了你怒怼大厂面试官、拿下大厂面试所需掌握的核心知识、面试重点! 👉相信一定对你顺利通关面试、拿到理想Offer有所帮助! 👉花费大量精力去制作本专栏,创作不易,各位的支持就是我创作的最大动力!