作者回复: 不是的。这3个配置是集群中所有的节点(一个机器上装一个ZooKeeper节点)。例如下面的配置表示集群中的3个节点配置: server.1=ali-1:2222:2223 server.2=ali-2:2222:2223 server.3=ali-3:2222:2223 myid文件保存节点的id。例如,如果myid的内容为2,就代表这个机器上的节点是server.2=ali-2:2222:2223。
作者回复: 不会。一个新ZooKeeper节点只有比客户端以前连接的节点的状态新,也就是说新节点的zxid不比旧节点的zxid小,才可以处理来自客户端的请求。
作者回复: > myid可以自动生成吗? 不可以。理论上是可以自动生成的,但是ZooKeeper没有提供这个选项。例如Kafka节点的broker.id就是可以自动生成的。 > zk自己不就可以做配置中心吗? 是的。
作者回复: 这个ID用的是zookeeper.jute里面的cversion: class Stat { long czxid; // created zxid long mzxid; // last modified zxid long ctime; // created long mtime; // last modified int version; // version int cversion; // child version int aversion; // acl version long ephemeralOwner; // owner id if ephemeral, 0 otw int dataLength; //length of the data in the node int numChildren; //number of children of this node long pzxid; // last modified children } ID从0开始一直递增到2147483647,到-2147483648,到-1, 最后回到0。做递增操作的是PrepRequestProcessor.java的以下代码: int newCversion = parentRecord.stat.getCversion()+1;
作者回复: 是的。假设connectString中有三个节点的访问信息。每次客户端建立连接都是随机选取一个节点。这样可以起到负责均衡的作用。
作者回复: 是的。
作者回复: 是的