大数据技术之kafka (第 3 章 Kafka 架构深入) Zookeeper 在 Kafka 中的作用

x33g5p2x  于2021-12-19 转载在 其他  
字(4.7k)|赞(0)|评价(0)|浏览(542)

Kafka 集群中有一个 broker 会被选举为 Controller,负责管理集群 broker 的上下线,所有 topic 的分区副本分配和 leader 选举等工作。

Controller 的管理工作都是依赖于 Zookeeper 的。 
 以下为 partition 的 leader 选举过程: 

        Leader选举流程

我们试试当这个主节点挂了,谁会被抢到(目前这个brokers/ids/    有0  1  2三个节点)

我们启动zk客户端

  1. [root@backup01 bin]# ./zkCli.sh
  2. Connecting to localhost:2181
  3. 2020-04-19 16:05:13,799 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.13-2d71af4dbe22557fda74f9a9b4309b15a7487f03, built on 06/29/2018 04:05 GMT
  4. 2020-04-19 16:05:13,815 [myid:] - INFO [main:Environment@100] - Client environment:host.name=backup01
  5. 2020-04-19 16:05:13,815 [myid:] - INFO [main:Environment@100] - Client environment:java.version=1.8.0_172
  6. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
  7. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/usr/local/java/jdk1.8.0_172/jre
  8. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../build/classes:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../build/lib/*.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/slf4j-log4j12-1.7.25.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/slf4j-api-1.7.25.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/netty-3.10.6.Final.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/log4j-1.2.17.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/jline-0.9.94.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../lib/audience-annotations-0.5.0.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../zookeeper-3.4.13.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../src/java/lib/*.jar:/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin/../conf:
  9. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
  10. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
  11. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
  12. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
  13. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
  14. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:os.version=3.10.0-862.el7.x86_64
  15. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
  16. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
  17. 2020-04-19 16:05:13,817 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/usr/local/hadoop/zookeeper/zookeeper-3.4.13/bin
  18. 2020-04-19 16:05:13,818 [myid:] - INFO [main:ZooKeeper@442] - Initiating client connection, connectString=localhost:2181 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@277050dc
  19. Welcome to ZooKeeper!
  20. 2020-04-19 16:05:13,878 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1029] - Opening socket connection to server localhost/0:0:0:0:0:0:0:1:2181. Will not attempt to authenticate using SASL (unknown error)
  21. JLine support is enabled
  22. 2020-04-19 16:05:14,007 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@879] - Socket connection established to localhost/0:0:0:0:0:0:0:1:2181, initiating session
  23. 2020-04-19 16:05:14,033 [myid:] - INFO [main-SendThread(localhost:2181):ClientCnxn$SendThread@1303] - Session establishment complete on server localhost/0:0:0:0:0:0:0:1:2181, sessionid = 0x10004d8e0310000, negotiated timeout = 30000
  24. WATCHER::
  25. WatchedEvent state:SyncConnected type:None path:null
  26. [zk: localhost:2181(CONNECTED) 0]

我们看到  controller    是brokerid:0

  1. [zk: localhost:2181(CONNECTED) 2] ls /
  2. [cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
  3. [zk: localhost:2181(CONNECTED) 3] get /controller
  4. {"version":1,"brokerid":0,"timestamp":"1586133981273"}
  5. cZxid = 0x500000003
  6. ctime = Mon Apr 06 08:46:21 CST 2020
  7. mZxid = 0x500000003
  8. mtime = Mon Apr 06 08:46:21 CST 2020
  9. pZxid = 0x500000003
  10. cversion = 0
  11. dataVersion = 0
  12. aclVersion = 0
  13. ephemeralOwner = 0x2000392dd2c0000
  14. dataLength = 54
  15. numChildren = 0
  16. [zk: localhost:2181(CONNECTED) 5]

当我们的kafkabrokerid挂了之后,zk会为我们怎么选举,我们将kafka的brokerid:0的节点  kill掉

查看这个brokerid为0的节点进程

  1. [root@backup01 bin]# kill -9 19728
  2. [root@backup01 bin]# jps
  3. 54464 ZooKeeperMain
  4. 12732 Elasticsearch
  5. 54750 Jps
  6. 14623 QuorumPeerMain
  7. [root@backup01 bin]#
  1. [zk: localhost:2181(CONNECTED) 7] get /controller
  2. {"version":1,"brokerid":1,"timestamp":"1587284613737"}
  3. cZxid = 0x600000005
  4. ctime = Sun Apr 19 16:23:33 CST 2020
  5. mZxid = 0x600000005
  6. mtime = Sun Apr 19 16:23:33 CST 2020
  7. pZxid = 0x600000005
  8. cversion = 0
  9. dataVersion = 0
  10. aclVersion = 0
  11. ephemeralOwner = 0x3000065a6f40003
  12. dataLength = 54
  13. numChildren = 0
  14. [zk: localhost:2181(CONNECTED) 8]

相关文章