赞
踩
在zk里面可以看到kafka 谁拿到controller
[zk: localhost:2181(CONNECTED) 6] get /kafka/controller
{"version":1,"brokerid":0,"timestamp":"1646830583058"}
在zk里面可以看到kafka注册信息
[zk: localhost:2181(CONNECTED) 7] ls /kafka/brokers/ids [0, 1, 2] [zk: localhost:2181(CONNECTED) 8] get /kafka/brokers/ids/1 {"listener_security_protocol_map":{"INTERNAL":"PLAINTEXT","EXTERNAL":"PLAINTEXT"},"endpoints":["INTERNAL://172.16.111.45:1092","EXTERNAL://server1:9092"],"jmx_port":-1,"port":19092,"host":"172.16.111.45","version":4,"timestamp":"1646830413875"} [zk: localhost:2181(CONNECTED) 10] get -s /kafka/brokers/ids/0 {"listener_security_protocol_map":{"INTERNAL":"PLAINTEXT","EXTERNAL":"PLAINTEXT"},"endpoints":["INTERNAL://172.16.111.43:1092","EXTERNAL://server2:9092"],"jmx_port":-1,"port":19092,"host":"172.16.111.43","version":4,"timestamp":"1646830582891"} cZxid = 0xa00000178 ctime = Wed Mar 09 20:56:22 CST 2022 mZxid = 0xa00000178 mtime = Wed Mar 09 20:56:22 CST 2022 pZxid = 0xa00000178 cversion = 0 dataVersion = 1 aclVersion = 0 ephemeralOwner = 0x10d4139ad9c0005 临时节点 dataLength = 249 numChildren = 0
[zk: localhost:2181(CONNECTED) 13] ls /kafka/brokers/topics [__consumer_offsets, ooxx, topic-test1] -- 查看创建分区数 [zk: localhost:2181(CONNECTED) 14] [zk: localhost:2181(CONNECTED) 14] ls /kafka/brokers/topics/topic-test1 [partitions] [zk: localhost:2181(CONNECTED) 15] ls /kafka/brokers/topics/topic-test1/partitions [0, 1] -- 当初创建分区的时候是两个 [zk: localhost:2181(CONNECTED) 16] ls /kafka/brokers/topics/topic-test1/partitions/0 [state] [zk: localhost:2181(CONNECTED) 17] ls /kafka/brokers/topics/topic-test1/partitions/0/state [] [zk: localhost:2181(CONNECTED) 18] get -s /kafka/brokers/topics/topic-test1/partitions/0/state {"controller_epoch":9,"leader":2,"version":1,"leader_epoch":10,"isr":[2,0]} cZxid = 0x7000004b9 ctime = Wed Mar 09 10:22:43 CST 2022 mZxid = 0xa000001fe mtime = Wed Mar 09 20:56:55 CST 2022 pZxid = 0x7000004b9 cversion = 0 dataVersion = 13 aclVersion = 0 ephemeralOwner = 0x0 -- 这个时候不是临时节点,元数据 dataLength = 75 numChildren = 0
leader 2 是代表在2 节点上的,isr 分别代表储存在2 节点 0 节点,只不过2是主节点
分区中的所有副本统称为AR(Assigned Replicas)。
所有与leader副本保持一定程度同步的副本(包括leader副本在内)组成ISR(In-Sync Replicas),ISR集合是AR集合中的一个子集。
与leader副本同步滞后过多的副本(不包括leader副本)组成OSR(Out-of-Sync Replicas)
LSR 与 OSR 转换、LSR集合中的副本才允许选举为leader
leader副本负责维护和跟踪ISR集合中所有follower副本的滞后状态,当follower副本落后太多或失效时,leader副本会把它从ISR集合中剔除。如果OSR集合中有follower副本“追上”了leader副本,那么leader副本会把它从OSR集合转移至ISR集合。默认情况下,当leader副本发生故障时,只有在ISR集合中的副本才有资格被选举为新的leader,而在OSR集合中的副本则没有任何机会(不过这个原则也可以通过修改相应的参数配置来改变)。ISR与HW和LEO也有紧密的关系。
参考链接:https://www.studytime.xin/article/kafka-ar-lsr-hw-leo.html
什么是HW高水位,
水桶理论
HW是High Watermark的缩写,俗称高水位,它标识了一个特定的消息偏移量(offset),消费者只能拉取到这个offset之前的消息
如图所示,它代表一个日志文件,这个日志文件中有 9 条消息,第一条消息的 offset(LogStartOffset)为0,最后一条消息的offset为8,offset为9的消息用虚线框表示,代表下一条待写入的消息。日志文件的HW为6,表示消费者只能拉取到offset在0至5之间的消息,而offset为6的消息对消费者而言是不可见的。
LEO是Log End Offset的缩写,它标识当前日志文件中下一条待写入消息的offset,图中offset为9的位置即为当前日志文件的LEO,LEO的大小相当于当前日志分区中最后一条消息的offset值加1。分区ISR集合中的每个副本都会维护自身的LEO,而ISR集合中最小的LEO即为分区的HW,对消费者而言只能消费HW之前的消息。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。