本文主要介紹了
- kafka raft集群架構(gòu):
與舊架構(gòu)的不同點(diǎn),有哪些優(yōu)勢(shì),哪些問題
架構(gòu)成員有哪些,怎么規(guī)劃。- 三節(jié)點(diǎn)集群安裝、啟動(dòng)與測(cè)試
一. kafka kraft 集群介紹
1. KRaft架構(gòu)
在舊的架構(gòu)中
Kafka集群包含多個(gè)broker節(jié)點(diǎn)和一個(gè)ZooKeeper 集群。如上圖集群結(jié)構(gòu):4個(gè)broker節(jié)點(diǎn)和3個(gè)ZooKeeper節(jié)點(diǎn)。Kafka 集群的controller在被選中后,會(huì)從 ZooKeeper 中加載它的狀態(tài)。選舉controller的過程是由zookeeper自動(dòng)完成的。
?
在新的架構(gòu)中
三個(gè) controller 節(jié)點(diǎn)替代三個(gè)ZooKeeper節(jié)點(diǎn)。 controller節(jié)點(diǎn)和 broker 節(jié)點(diǎn)運(yùn)行在不同的進(jìn)程中。這些controller 節(jié)點(diǎn)中會(huì)選擇一個(gè)成為Leader。新的架構(gòu)中,controller不會(huì)向 broker 推送更新,而是 broker 從 controller Leader 拉取元數(shù)據(jù)的更新信息。
盡管 controller 進(jìn)程在邏輯上與 broker 進(jìn)程是分離的,但它們不需要在物理上分離。即在某些情況下,部分或所有 controller 進(jìn)程和 broker 進(jìn)程是可以是同一個(gè)進(jìn)程,即一個(gè)broker節(jié)點(diǎn)即是broker也是controller。
?
2. Controller 服務(wù)器
在KRaft模式下,通過指定某些服務(wù)器作為控制器,在Server.properties的Process.roles 參數(shù)里面配置。
不像基于ZooKeeper的模式,(zk去做的事情,我們手動(dòng)配置不了)任何服務(wù)器都可以成為控制器。這帶來了一個(gè)非常優(yōu)秀的好處,即如果我們認(rèn)為 controller 節(jié)點(diǎn)的負(fù)載會(huì)比其他只當(dāng)做broker節(jié)點(diǎn)高,那么可以為 controller 節(jié)點(diǎn)使用高配的機(jī)器。這就解決了在1.0, 2.0架構(gòu)中, controller 節(jié)點(diǎn)會(huì)比其他節(jié)點(diǎn)負(fù)載高,卻無法控制哪些節(jié)點(diǎn)能成為 controller 節(jié)點(diǎn)的問題。
被(手動(dòng)配置)選中的 controller 節(jié)點(diǎn)將參與元數(shù)據(jù)集群的選舉。對(duì)于當(dāng)前的 controller 節(jié)點(diǎn),每個(gè)控制器服務(wù)器要么是Active的,要么是Standby的。
用戶通常會(huì)選擇3或5臺(tái)(奇數(shù)臺(tái))服務(wù)器成為 controller 節(jié)點(diǎn),3和5的個(gè)數(shù)問題和Raft的原理一樣,少數(shù)服從多數(shù)。
就像使用ZooKeeper一樣,為了保持可用性,你必須讓大部分 controller 保持active狀態(tài)。如果你有3個(gè)controller,你可以容忍1個(gè)故障;在5個(gè)控制器中,您可以容忍2個(gè)故障。
?
3. Process Roles
在KRaft模式下,每個(gè)Kafka服務(wù)器都有一個(gè)新的配置項(xiàng),叫做process.roles, 這個(gè)參數(shù)可以有以下值:
- 如果process.roles = broker, 服務(wù)器在KRaft模式中充當(dāng) broker。
- 如果process.roles = controller, 服務(wù)器在KRaft模式下充當(dāng) controller。
- 如果process.roles = broker,controller,服務(wù)器在KRaft模式中同時(shí)充當(dāng) broker 和controller。
注意:如果process.roles 沒有設(shè)置。那么集群就假定是運(yùn)行在ZooKeeper模式下。
對(duì)于簡單的場(chǎng)景,組合節(jié)點(diǎn)更容易運(yùn)行和部署,可以避免多進(jìn)程運(yùn)行時(shí),JVM帶來的相關(guān)的固定內(nèi)存開銷。但controller將較少地與系統(tǒng)的其余部分隔離。例如,如果代理上的活動(dòng)導(dǎo)致內(nèi)存不足,controller也會(huì)受到例如OOM的影響。
?
4. Quorum Voters
系統(tǒng)中的所有節(jié)點(diǎn)都必須設(shè)置 controller.quorum.voters 配置。用于配置所有想成為controller的節(jié)點(diǎn)。
?
如果你有10個(gè)broker和 3個(gè)controller1,分別命名為controller1、controller2、controller3,你可能在 controller1上有以下配置:
process.roles=controller
node.id=1
listeners=CONTROLLER://controller1.example.com:9093
controller.quorum.voters=1@controller1.com:9093,2@controller2.com:9093,3@controller3.com:9093
controller.quorum.voters配置格式說明:nodeid1@controller-node1:9093,nodeid2@controller-node2:9093,nodeid3@controller-node3:9093
?
如果你只有三個(gè)節(jié)點(diǎn),每個(gè)節(jié)點(diǎn)都是controller,broker角色,那么每個(gè)節(jié)點(diǎn)都這樣配置
process.roles=broker,controller
listeners=CONTROLLER://controller1.example.com:9093
controller.quorum.voters=1@controller1.com:9093,2@controller2.com:9093,3@controller3.com:9093
?
5. kraft的工作原理 ing
KRaft: Apache Kafka Without ZooKeeper
?
二. 集群安裝
進(jìn)行三個(gè)節(jié)點(diǎn)的安裝,如下規(guī)劃:
節(jié)點(diǎn) | node.id | 角色 |
---|---|---|
node1 | 1 | controller,broker |
node2 | 2 | controller,broker |
node3 | 3 | controller,broker |
1. 安裝
kafka下載: https://kafka.apache.org/downloads
解壓
tar -zxvf kafka_2.13-3.0.0.tgz
1.1. 配置
在node1中配置:server.properties
在{KAFKA_HOME}/config/kraft/server.properties
############################# Server Basics #############################
java.home=/opt/jvm/java
# The role of this server. Setting this puts us in KRaft mode
process.roles=broker,controller
# The node id associated with this instance's roles
node.id={{broker_id}}
# The connect string for the controller quorum
# 每個(gè)節(jié)點(diǎn)配置都一樣:格式:{{broker_id_1}}@{{hostname1}}:9093,{{broker_id_2}}@{{hostname2}}:9093,{{broker_id_3}}@{{hostname3}}:9093
controller.quorum.voters={{voters}}
############################# Log Basics #############################
# A comma separated list of directories under which to store log files
# 數(shù)據(jù)存儲(chǔ)目錄
log.dirs=/opt/kafka3.5.0/logs
配置node2、node3,其余兩個(gè)節(jié)點(diǎn)配置除了node.id
不同,其他配置都相同。node.id
配置如上節(jié)點(diǎn)規(guī)劃。
?
1.2. 格式化
生成集群 ID
整個(gè)集群唯一的ID標(biāo)志
$ ./bin/kafka-storage.sh random-uuid
qGuAL6YzRyWQdzt4cQTZgA
?
格式化存儲(chǔ)目錄
使用上面生成集群 uuid, 在三個(gè)節(jié)點(diǎn)上都執(zhí)行格式化存儲(chǔ)目錄命令:
$ ./bin/kafka-storage.sh format \
-t xtzWWN4bTjitpL3kfd9s5g \
-c ./config/kraft/server.properties
?
2. 啟動(dòng)測(cè)試
2.1. 啟功節(jié)點(diǎn)服務(wù)
在每個(gè)節(jié)點(diǎn)上執(zhí)行
$ ./bin/kafka-server-start.sh ./config/kraft/server.properties
?文章來源:http://www.zghlxwxcb.cn/news/detail-775496.html
2.2. 測(cè)試
# 創(chuàng)建topic
$ bin/kafka-topics.sh --create \
--topic quickstart-events \
--bootstrap-server localhost:9092
# 查看topic信息
$ bin/kafka-topics.sh --describe \
--topic quickstart-events \
--bootstrap-server localhost:9092
Topic: quickstart-events TopicId: NPmZHyhbR9y00wMglMH2sg PartitionCount: 1 ReplicationFactor: 1 Configs:
Topic: quickstart-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0
# 生產(chǎn)消息
$ bin/kafka-console-producer.sh \
--topic quickstart-events \
--bootstrap-server localhost:9092
This is my first event
This is my second event
#消費(fèi)數(shù)據(jù)
$ bin/kafka-console-consumer.sh \
--topic quickstart-events \
--from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event
?文章來源地址http://www.zghlxwxcb.cn/news/detail-775496.html
到了這里,關(guān)于【運(yùn)維】Kafka高可用: KRaft(不依賴zookeeper)集群搭建的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!