做开发的朋友应该很熟,我们知道常用的ZK客户端有ZKClient 客户端,Curator 客户端,但有没有想过一个问题,一个 zk 客户端到底连接的是zk列表中的哪台Server呢?
实践检验真理 (以下只做关键代码的分析)
1.创建ZkClient客户端Demo
2.解析zk列表
第一步
第二步
3.第一次shuffle打散
4.第二次shuffle打散
总结:
客户端在获取到 zk 列表后,首先将 zk列表打散,然后再进行轮询方式获取到一个由主机名与 port 构成的地址,然后再根据主机名获取到其对应的所有ip,再对这些 ip 进行shuffle,获取 shuffle后的第一个地址,进行连接尝试,直到连接成功,或不满足重试策略