01. 如何查看kafka 元數(shù)據(jù)存儲目錄?
以 kafka 偽集群來看下 Zookeeper 中存儲的 Kafka 信息。在配置 kafka 偽集群時,在kafka 配置文件 server.properties 中配置了連接 zookeeper 集群的地址:
zookeeper.connect=localhost:2182,localhost:2183,localhost:2184
Kafka的元數(shù)據(jù)存儲在Zookeeper中,而不是本地文件系統(tǒng)中。因此,要查看Kafka的元數(shù)據(jù)存儲目錄,您需要連接到Zookeeper并查看其中的數(shù)據(jù)。
① 方式1:打開Zookeeper客戶端并連接到Zookeeper服務(wù)器,進(jìn)入Zookeeper 安裝目錄的bin文件夾,執(zhí)行Zookeeper客戶端命令
[root@localhost bin]# ./zkCli.sh -server 10.60.215.238:2184
Connecting to 10.60.215.238:2184
2023-05-30 17:33:20,391 [myid:] - INFO [main:Environment@100] - Client environment:zookeeper.version=3.4.14-4c25d480e66aadd371de8bd2fd8da255ac140bcf, built on 03/06/2019 16:18 GMT
2023-05-30 17:33:20,394 [myid:] - INFO [main:Environment@100] - Client environment:host.name=localhost
2023-05-30 17:33:20,394 [myid:] - INFO [main:Environment@100] - Client environment:java.version=11.0.19
2023-05-30 17:33:20,395 [myid:] - INFO [main:Environment@100] - Client environment:java.vendor=Oracle Corporation
2023-05-30 17:33:20,395 [myid:] - INFO [main:Environment@100] - Client environment:java.home=/opt/soft/java/jdk-11.0.19
2023-05-30 17:33:20,395 [myid:] - INFO [main:Environment@100] - Client environment:java.class.path=/opt/soft/zookeeper/zookeeper-03/bin/../zookeeper-server/target/classes:/opt/soft/zookeeper/zookeeper-03/bin/../build/classes:/opt/soft/zookeeper/zookeeper-03/bin/../zookeeper-server/target/lib/*.jar:/opt/soft/zookeeper/zookeeper-03/bin/../build/lib/*.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/slf4j-log4j12-1.7.25.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/slf4j-api-1.7.25.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/netty-3.10.6.Final.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/log4j-1.2.17.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/jline-0.9.94.jar:/opt/soft/zookeeper/zookeeper-03/bin/../lib/audience-annotations-0.5.0.jar:/opt/soft/zookeeper/zookeeper-03/bin/../zookeeper-3.4.14.jar:/opt/soft/zookeeper/zookeeper-03/bin/../zookeeper-server/src/main/resources/lib/*.jar:/opt/soft/zookeeper/zookeeper-03/bin/../conf:
2023-05-30 17:33:20,395 [myid:] - INFO [main:Environment@100] - Client environment:java.library.path=/usr/java/packages/lib:/usr/lib64:/lib64:/lib:/usr/lib
2023-05-30 17:33:20,395 [myid:] - INFO [main:Environment@100] - Client environment:java.io.tmpdir=/tmp
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:java.compiler=<NA>
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:os.name=Linux
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:os.arch=amd64
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:os.version=4.18.0-193.el8.x86_64
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:user.name=root
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:user.home=/root
2023-05-30 17:33:20,396 [myid:] - INFO [main:Environment@100] - Client environment:user.dir=/opt/soft/zookeeper/zookeeper-03/bin
2023-05-30 17:33:20,397 [myid:] - INFO [main:ZooKeeper@442] - Initiating client connection, connectString=10.60.215.238:2184 sessionTimeout=30000 watcher=org.apache.zookeeper.ZooKeeperMain$MyWatcher@2e3fc542
Welcome to ZooKeeper!
JLine support is enabled
[zk: 10.60.215.238:2184(CONNECTING) 0] 2023-05-30 17:33:20,645 [myid:] - INFO [main-SendThread(10.60.215.238:2184):ClientCnxn$SendThread@1025] - Opening socket connection to server 10.60.215.238/10.60.215.238:2184. Will not attempt to authenticate using SASL (unknown error)
2023-05-30 17:33:20,653 [myid:] - INFO [main-SendThread(10.60.215.238:2184):ClientCnxn$SendThread@879] - Socket connection established to 10.60.215.238/10.60.215.238:2184, initiating session
2023-05-30 17:33:20,664 [myid:] - INFO [main-SendThread(10.60.215.238:2184):ClientCnxn$SendThread@1299] - Session establishment complete on server 10.60.215.238/10.60.215.238:2184, sessionid = 0x2004e1182c20000, negotiated timeout = 30000
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
[zk: 10.60.215.238:2184(CONNECTED) 1]
② 方式2:進(jìn)入 Kafka 安裝目錄的 bin/ 文件夾,執(zhí)行以下命令連接到 ZooKeeper:
[root@localhost bin]# ./zookeeper-shell.sh 10.60.215.238:2184
Connecting to 10.60.215.238:2184
Welcome to ZooKeeper!
JLine support is disabled
WATCHER::
WatchedEvent state:SyncConnected type:None path:null
ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
③ 查看 zookeeper 中存儲的 kafka 元數(shù)據(jù)信息:
ls /
[cluster, controller_epoch, controller, brokers, zookeeper, admin, isr_change_notification, consumers, log_dir_event_notification, latest_producer_id_block, config]
Kafka的元數(shù)據(jù)存儲在Zookeeper中,而不是本地文件系統(tǒng)中。Zookeeper是一個分布式的協(xié)調(diào)服務(wù),用于存儲Kafka集群的元數(shù)據(jù),包括主題、分區(qū)、消費者組等信息。Kafka通過Zookeeper來管理集群中的Broker、Topic和Consumer等信息,以及進(jìn)行Leader選舉、Partition分配等操作。因此,Kafka的元數(shù)據(jù)存儲目錄實際上是Zookeeper的數(shù)據(jù)節(jié)點。在Kafka的配置文件中,可以通過配置zookeeper.connect參數(shù)來指定Zookeeper的連接地址。
在Zookeeper中,Kafka的元數(shù)據(jù)存儲在/brokers、/controller和/config三個目錄下。其中,/brokers目錄存儲了Kafka集群中所有Broker的信息,包括它們的ID、主機名、端口號等;/controller目錄存儲了當(dāng)前的Controller Broker的ID,Controller Broker是Kafka集群中負(fù)責(zé)管理分區(qū)副本分配和故障轉(zhuǎn)移的Broker;/config目錄存儲了Kafka集群的配置信息。
這些元數(shù)據(jù)信息都是由Kafka控制器節(jié)點維護(hù)的,而不是由Broker節(jié)點維護(hù)的。因此,如果控制器節(jié)點宕機或者出現(xiàn)故障,Kafka集群的元數(shù)據(jù)信息可能會受到影響。
需要注意的是,Kafka的元數(shù)據(jù)存儲在Zookeeper中是為了支持集群的動態(tài)擴容和縮容。因此,如果你需要修改Kafka的配置信息,應(yīng)該通過修改Zookeeper中的配置來實現(xiàn)。
02. kafka 元數(shù)據(jù)存儲目錄 /controller
/controller目錄: 這個目錄存儲了當(dāng)前Kafka集群的控制器節(jié)點的ID。每個Kafka集群只有一個控制器節(jié)點,該節(jié)點負(fù)責(zé)管理集群的元數(shù)據(jù)信息和分區(qū)分配。
get /controller
{"version":1,"brokerid":0,"timestamp":"1685072164216"}
cZxid = 0x200000116
ctime = Fri May 26 11:36:04 CST 2023
mZxid = 0x200000116
mtime = Fri May 26 11:36:04 CST 2023
pZxid = 0x200000116
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x4e11419a000e
dataLength = 54
numChildren = 0
可以看到該 kafka 集群的控制器節(jié)點的 brokerid 為0
03. kafka 元數(shù)據(jù)存儲目錄 /brokers
① /brokers目錄: 存儲Kafka集群中所有broker的信息,每個節(jié)點都有一個唯一的ID和一個地址列表,包括它們的ID、主機名、端口號等。
ls /brokers
[ids, topics, seqid]
② /brokers/ids: 這個目錄存儲了Kafka集群中所有Broker節(jié)點的ID。每個Broker節(jié)點都有一個唯一的ID,該ID由Kafka控制器分配。
ls /brokers/ids
[0, 1, 2]
獲取kafka節(jié)點詳情信息:
get /brokers/ids/0
{"listener_security_protocol_map":{"PLAINTEXT":"PLAINTEXT"},"endpoints":["PLAINTEXT://10.60.215.238:9092"],"jmx_port":-1,"host":"10.60.215.238","timestamp":"1685072066057","port":9092,"version":4}
cZxid = 0x2000000ef
ctime = Fri May 26 11:34:26 CST 2023
mZxid = 0x2000000ef
mtime = Fri May 26 11:34:26 CST 2023
pZxid = 0x2000000ef
cversion = 0
dataVersion = 1
aclVersion = 0
ephemeralOwner = 0x4e11419a000e
dataLength = 196
numChildren = 0
根據(jù)查詢結(jié)果,該 broker 的 ID 為 0,監(jiān)聽地址為 PLAINTEXT://10.60.215.238:9092
③ /brokers/topics: 這個目錄存儲了Kafka集群中所有Topic的元數(shù)據(jù)信息,包括每個Topic的名稱、分區(qū)數(shù)、副本數(shù)等。
ls /brokers/topics
[test, __consumer_offsets]
ls /brokers/topics/test
[partitions]
ls /brokers/topics/test/partitions
[0, 1, 2]
ls /brokers/topics/test/partitions/0
[state]
get /brokers/topics/test/partitions/0/state
{"controller_epoch":7,"leader":2,"version":1,"leader_epoch":3,"isr":[0,2]}
cZxid = 0x2000000da
ctime = Fri May 26 11:32:19 CST 2023
mZxid = 0x20000012f
mtime = Fri May 26 11:41:09 CST 2023
pZxid = 0x2000000da
cversion = 0
dataVersion = 5
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 74
numChildren = 0
get /brokers/topics/test/partitions/1/state
{"controller_epoch":5,"leader":0,"version":1,"leader_epoch":2,"isr":[0,1]}
cZxid = 0x2000000d9
ctime = Fri May 26 11:32:19 CST 2023
mZxid = 0x20000010e
mtime = Fri May 26 11:35:58 CST 2023
pZxid = 0x2000000d9
cversion = 0
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 74
numChildren = 0
get /brokers/topics/test/partitions/2/state
{"controller_epoch":6,"leader":1,"version":1,"leader_epoch":2,"isr":[1,2]}
cZxid = 0x2000000d8
ctime = Fri May 26 11:32:19 CST 2023
mZxid = 0x20000012a
mtime = Fri May 26 11:36:10 CST 2023
pZxid = 0x2000000d8
cversion = 0
dataVersion = 4
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 74
numChildren = 0
- controller_epoch: 控制器的代數(shù),用于檢測控制器故障轉(zhuǎn)移。
- leader: 當(dāng)前領(lǐng)導(dǎo)者的ID。在這個響應(yīng)中,領(lǐng)導(dǎo)者的ID是0,表示該分區(qū)當(dāng)前由第0個broker擔(dān)任領(lǐng)導(dǎo)者。
- version: 分區(qū)狀態(tài)的版本號。
- leader_epoch: 領(lǐng)導(dǎo)者的代數(shù),用于檢測領(lǐng)導(dǎo)者故障轉(zhuǎn)移。
- isr: 可用于服務(wù)讀取請求的副本集合,即“in-sync replicas”。在這個響應(yīng)中,ISR包含兩個broker的ID:0和1,表示這兩個broker上的副本與領(lǐng)導(dǎo)者的副本保持同步。
04. kafka 元數(shù)據(jù)存儲目錄 /config
/config目錄: 存儲Kafka集群的配置信息,包括broker的默認(rèn)配置、topic的默認(rèn)配置等。
ls /config
[changes, clients, brokers, topics, users]
05. kafka 元數(shù)據(jù)存儲目錄 /admin
Kafka元數(shù)據(jù)存儲目錄/admin主要用于存儲管理員接口操作的相關(guān)信息,包括以下內(nèi)容:
① Topic刪除事件:當(dāng)管理員刪除一個Topic時,相關(guān)的元數(shù)據(jù)信息將被存儲在/admin/delete_topics目錄下。
② 分區(qū)遷移事件:當(dāng)管理員執(zhí)行分區(qū)遷移操作時,相關(guān)的元數(shù)據(jù)信息將被存儲在/admin/reassign_partitions目錄下。
③ 優(yōu)先副本選舉:當(dāng)管理員執(zhí)行優(yōu)先副本選舉操作時,相關(guān)的元數(shù)據(jù)信息將被存儲在/admin/preferred_replica_election目錄下。
④ 信息:一般為臨時節(jié)點,用于存儲一些臨時的元數(shù)據(jù)信息,例如正在進(jìn)行的分區(qū)重分配操作的狀態(tài)信息等。
這些元數(shù)據(jù)信息對于Kafka集群的管理和維護(hù)非常重要,管理員可以通過訪問/admin目錄下的子目錄來查看和管理這些信息。
/admin/delete_topics: 這個目錄存儲了待刪除的Topic列表。當(dāng)Kafka控制器接收到刪除Topic的請求時,它會將該Topic的名稱添加到這個目錄中,然后通知所有Broker節(jié)點刪除該Topic。
ls /admin/delete_topics
[]
06. kafka 元數(shù)據(jù)存儲目錄 /consumers
存放消費者相關(guān)信息 (一般為空):0.9版本之前用于存Offset信息,0.9版本之后Offset信息存在在kafka 主題中
ls /consumers
[]
07. Kafka中Zookeeper起什么作用,可以不用Zookeeper么?
在Kafka中,Zookeeper扮演著多個重要角色:
① 配置管理:Kafka集群的配置信息、主題和分區(qū)的元數(shù)據(jù)都存儲在Zookeeper中。
② Broker注冊:Kafka Broker啟動時會向Zookeeper注冊自己的信息,包括Broker的ID、主機名、端口等。
③ Leader選舉:Kafka的分區(qū)副本機制中,每個分區(qū)都有一個Leader負(fù)責(zé)讀寫請求的處理。當(dāng)Leader宕機時,Zookeeper會協(xié)助進(jìn)行新的Leader選舉。
④ 消費者組管理:Kafka的消費者組機制中,Zookeeper會記錄消費者組的信息,包括消費者組的成員、消費進(jìn)度等。
因此,Zookeeper在Kafka中扮演著非常重要的角色,如果不使用Zookeeper,Kafka將無法正常工作。
08. Kafka 和 ZooKeeper 之間的關(guān)系是什么?
Kafka 使用 ZooKeeper 來管理和協(xié)調(diào) Kafka 集群中的各個節(jié)點。ZooKeeper 負(fù)責(zé)維護(hù) Kafka 集群的元數(shù)據(jù),例如主題、分區(qū)、消費者組等信息,并協(xié)調(diào) Kafka 集群中的各個節(jié)點之間的通信。
09. Kafka 中的分區(qū)是如何管理的?
Kafka 中的分區(qū)是由 ZooKeeper 來管理的。ZooKeeper 維護(hù)了每個分區(qū)的元數(shù)據(jù),包括分區(qū)的 ID、副本的位置、領(lǐng)導(dǎo)者等信息。Kafka 的生產(chǎn)者和消費者通過 ZooKeeper 來獲取分區(qū)的元數(shù)據(jù),并與分區(qū)的領(lǐng)導(dǎo)者進(jìn)行通信。
10. kafka的工作需要Zookeeper的配合,它是如何配合的?
Kafka和Zookeeper是兩個獨立的開源項目,但是在Kafka的工作中,Zookeeper是必不可少的。下面是Kafka和Zookeeper之間的配合工作:
① Kafka使用Zookeeper來存儲集群的元數(shù)據(jù),包括主題(topic)、分區(qū)(partition)和消費者組(consumer group)等信息。這些元數(shù)據(jù)的存儲和管理是由Zookeeper來完成的。
② 當(dāng)Kafka集群中的Broker啟動或關(guān)閉時,它們會向Zookeeper注冊或注銷自己的信息。這樣,Kafka集群中的所有Broker都可以通過Zookeeper了解到其他Broker的狀態(tài)。
③ 當(dāng)Kafka集群中的某個分區(qū)的Leader節(jié)點發(fā)生變化時,Zookeeper會通知所有的Broker,以便它們可以更新自己的元數(shù)據(jù)信息。
④ 當(dāng)消費者組中的消費者啟動或關(guān)閉時,它們也會向Zookeeper注冊或注銷自己的信息。這樣,Kafka集群中的所有Broker都可以通過Zookeeper了解到消費者組中的消費者的狀態(tài)。
⑤ 當(dāng)消費者組中的消費者需要消費某個分區(qū)的消息時,它們會向Zookeeper請求該分區(qū)的元數(shù)據(jù)信息。Zookeeper會返回該分區(qū)的Leader節(jié)點的信息,以便消費者可以向該節(jié)點發(fā)送拉取請求。
總之,Kafka和Zookeeper之間的配合工作是非常緊密的,Zookeeper在Kafka集群中扮演著非常重要的角色,它負(fù)責(zé)存儲和管理集群的元數(shù)據(jù)信息,以及協(xié)調(diào)Kafka集群中各個節(jié)點之間的通信。
11. Kafka是怎么跟Zookeeper進(jìn)行交互的?
Kafka是一個分布式的消息系統(tǒng),而Zookeeper是一個分布式的協(xié)調(diào)服務(wù)。在Kafka中,Zookeeper主要用于管理Kafka集群的元數(shù)據(jù),包括Kafka的broker信息、topic和partition的信息等。Kafka通過與Zookeeper進(jìn)行交互來實現(xiàn)以下功能:
① Broker注冊:當(dāng)一個Kafka broker啟動時,它會向Zookeeper注冊自己的信息,包括broker的ID、主機名和端口號等。
② Topic和Partition的管理:Kafka的topic和partition信息存儲在Zookeeper的節(jié)點上,Kafka通過與Zookeeper進(jìn)行交互來創(chuàng)建、刪除、修改topic和partition的信息。
③ Leader選舉:Kafka的每個partition都有一個leader broker,當(dāng)leader broker宕機時,Kafka需要從剩余的broker中選舉一個新的leader。這個過程需要通過與Zookeeper進(jìn)行交互來實現(xiàn)。
④ Consumer Group的管理:Kafka的consumer group信息也存儲在Zookeeper的節(jié)點上,Kafka通過與Zookeeper進(jìn)行交互來創(chuàng)建、刪除、修改consumer group的信息。
總之,Kafka通過與Zookeeper進(jìn)行交互來實現(xiàn)集群的元數(shù)據(jù)管理和協(xié)調(diào),保證了Kafka集群的高可用性和可靠性
12. kafka 依賴于ZooKeeper存在什么問題?
Kafka 依賴于 ZooKeeper 主要是為了實現(xiàn)分布式協(xié)調(diào)和管理。具體來說,ZooKeeper 負(fù)責(zé)管理 Kafka 集群的元數(shù)據(jù),如 broker 的狀態(tài)、topic 和 partition 的信息等。同時,ZooKeeper 還可以用于實現(xiàn) Kafka 的 leader 選舉和消費者組的協(xié)調(diào)等功能。然而,Kafka 依賴于 ZooKeeper 也存在一些問題:
① 單點故障:ZooKeeper 是一個集中式的服務(wù),如果 ZooKeeper 發(fā)生故障,整個 Kafka 集群都將受到影響。
② 性能瓶頸:ZooKeeper 的性能瓶頸可能會影響 Kafka 的性能。例如,ZooKeeper 的寫入操作可能會成為瓶頸,從而影響 Kafka 的生產(chǎn)和消費速度。
③ 部署和維護(hù)成本高:ZooKeeper 的部署和維護(hù)需要一定的成本,需要專門的人員進(jìn)行管理和維護(hù)。
13. kafka新版本為什么不再依賴于Zookeeper?
Kafka2.8.0版本于(2021年4月19日)發(fā)布,該版本提供了KIP-500的早期訪問版本,它允許在沒有zookeeper的情況下運行Kafka集群,而取代zookeeper的是Kafka內(nèi)部實現(xiàn)的KRaft協(xié)議。這種新體系結(jié)構(gòu)使每個集群支持更多分區(qū)、更簡單的操作和更嚴(yán)格的安全性。需要特別強調(diào)的一點是;當(dāng)前版本還不完善,不能用于生產(chǎn)環(huán)境。
Kafka 2.8版本引入了KIP-500,這是一個重大的變化,它將Kafka的元數(shù)據(jù)存儲從Zookeeper遷移到了內(nèi)部的Kafka集群中。在此之前,Kafka使用Zookeeper來存儲集群的元數(shù)據(jù),包括主題、分區(qū)、消費者組等信息。但是,隨著Kafka集群規(guī)模的增大,Zookeeper的性能和可靠性成為了瓶頸,因此Kafka社區(qū)決定將元數(shù)據(jù)存儲遷移到Kafka集群中。
這樣做的好處是,Kafka集群可以更好地控制自己的元數(shù)據(jù),而不需要依賴外部的Zookeeper。這樣可以提高Kafka的可靠性和性能,并且簡化了Kafka的部署和維護(hù)。
14. Kafka 如何維護(hù)集群的成員關(guān)系?
① Kafka使用ZooKeeper來維護(hù)集群的成員信息,確保集群中的每個broker都能夠知道其他broker的存在。每個broker都有一個唯一的標(biāo)識符,可以在配置文件中指定,也可以自動生成。當(dāng)broker啟動時,它會創(chuàng)建一個臨時節(jié)點,并將自己的ID注冊到ZooKeeper中。這個臨時節(jié)點的路徑是 /brokers/ids/<broker_id>,其中<broker_id>是broker的唯一標(biāo)識符。
除了broker之外,控制器和其他一些生態(tài)系統(tǒng)工具也會訂閱ZooKeeper的 /brokers/ids 路徑,以便在有broker加入或退出集群時收到通知。當(dāng)有新的broker加入集群時,它會創(chuàng)建一個新的臨時節(jié)點,并將自己的ID注冊到ZooKeeper中。當(dāng)有broker退出集群時,它的臨時節(jié)點會被刪除,其他broker會收到通知。
通過ZooKeeper,Kafka能夠動態(tài)地管理集群成員,確保集群中的每個broker都能夠知道其他broker的存在,并及時地響應(yīng)加入或退出集群的事件。這種機制使得Kafka集群更加健壯和可靠。
② 如果你試圖啟動另一個具有相同ID的broker,則會收到一個錯誤——新broker會嘗試進(jìn)行注冊,但不會成功,因為ZooKeeper中已經(jīng)有一個相同的節(jié)點。
③ 當(dāng)broker與ZooKeeper斷開連接(通常會在關(guān)閉broker時發(fā)生,但在發(fā)生網(wǎng)絡(luò)分區(qū)或長時間垃圾回收停頓時也會發(fā)生)時,它在啟動時創(chuàng)建的臨時節(jié)點會自動從ZooKeeper上移除。監(jiān)聽broker節(jié)點路徑的Kafka組件會被告知這個broker已被移除。
broker對應(yīng)的ZooKeeper節(jié)點會在broker被關(guān)閉之后消失,但它的ID會繼續(xù)存在于其他數(shù)據(jù)結(jié)構(gòu)中。例如,每個主題的副本集中就可能包含這個ID。在完全關(guān)閉一個broker后,如果使用相同的ID啟動另一個全新的broker,則它會立即加入集群,并獲得與之前相同的分區(qū)和主題。這是因為Kafka使用ZooKeeper來管理集群的元數(shù)據(jù),包括分區(qū)和副本的分配情況。當(dāng)一個新的broker使用相同的ID啟動時,它會向ZooKeeper注冊自己,并獲取之前分配給該ID的分區(qū)和副本信息。文章來源:http://www.zghlxwxcb.cn/news/detail-486051.html
這種機制確保了在broker關(guān)閉和重新啟動的情況下,集群的分區(qū)和副本分配保持一致,從而實現(xiàn)高可用性和容錯性。但需要注意的是,如果一個broker被關(guān)閉后,一段時間內(nèi)沒有使用相同的ID啟動新的broker,那么其他broker可能會將該ID標(biāo)記為失效,并重新分配其上的分區(qū)和副本。文章來源地址http://www.zghlxwxcb.cn/news/detail-486051.html
到了這里,關(guān)于Kafka題集 - kafka中Zookeeper的作用是什么?的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!