Kafka的Kraft模式
概述
? Kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費(fèi)者在網(wǎng)站中的所有動作流數(shù)據(jù)。其核心組件包含Producer、Broker、Consumer,以及依賴的Zookeeper集群。其中Zookeeper集群是Kafka用來負(fù)責(zé)集群元數(shù)據(jù)的管理、控制器的選舉等。
? 用過kafka的開發(fā)者應(yīng)該知道,每次啟動kafka服務(wù)時(shí),都是需要先把Zookeeper啟動,然后啟動kafka,步驟相當(dāng)繁瑣。
? Kafka在使用的過程當(dāng)中,會出現(xiàn)一些問題。由于重度依賴Zookeeper集群,當(dāng)Zookeeper集群性能發(fā)生抖動時(shí),Kafka的性能也會收到很大的影響。因此,在Kafka發(fā)展的過程當(dāng)中,為了解決這個(gè)問題,提供KRaft模式3.0+版本
,來取消Kafka對Zookeeper的依賴。
上圖是未使用kraft模式時(shí),依賴Zookeeper集群的一個(gè)架構(gòu)圖,做元數(shù)據(jù)管理、Controller的選舉都需要依賴Zookeeper集群。
在Kafka引入Kraft新內(nèi)部功能后,對Zookeeper的依賴將會被取消。在 Kraft中,一部分 broker 被指定為控制器,這些控制器提供過去由 ZooKeeper 提供的共識服務(wù)。所有集群元數(shù)據(jù)都將存儲在 Kafka 主題中并在內(nèi)部進(jìn)行管理。
優(yōu)勢
- 更簡單的部署和管理:通過只安裝和管理一個(gè)應(yīng)用程序,Kafka 現(xiàn)在的運(yùn)營足跡要小得多。這也使得在邊緣的小型設(shè)備中更容易利用 Kafka;
- 提高可擴(kuò)展性:KRaft 的恢復(fù)時(shí)間比 ZooKeeper 快一個(gè)數(shù)量級。這使我們能夠有效地?cái)U(kuò)展到單個(gè)集群中的數(shù)百萬個(gè)分區(qū)。ZooKeeper 的有效限制是數(shù)萬;
- 更有效的元數(shù)據(jù)傳播:基于日志、事件驅(qū)動的元數(shù)據(jù)傳播可以提高 Kafka 的許多核心功能的性能
Kraft集群節(jié)點(diǎn)角色
在 Kraft 模式下,Kafka 集群可以走專用模式
或共享模式
運(yùn)行。
在專用模式下,一些節(jié)點(diǎn)將其process.roles
配置設(shè)置為controller
,而其余節(jié)點(diǎn)將其設(shè)置為broker
。
對于共享模式,一些節(jié)點(diǎn)將process.roles
設(shè)置為controller, broker
并且這些節(jié)點(diǎn)將執(zhí)行雙重任務(wù)。采用哪種方式取決于集群的大小。
controller
在KRaft模式下,只有一小部分特別指定的服務(wù)器可以作為控制器,在server.properties的process.roles 參數(shù)里面配置。不像基于ZooKeeper的模式,任何服務(wù)器都可以成為控制器
Process Roles
每個(gè)Kafka服務(wù)器現(xiàn)在都有一個(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模式下。
Quorum Voters
? 系統(tǒng)中的所有節(jié)點(diǎn)都必須設(shè)置 controller.quorum.voters
配置。這個(gè)配置標(biāo)識有哪些節(jié)點(diǎn)是 Quorum 的投票者節(jié)點(diǎn)。所有想成為控制器的節(jié)點(diǎn)都需要包含在這個(gè)配置里面。
controller.quorum.voters
配置需要包含每個(gè)節(jié)點(diǎn)的id。格式為: id1@host1:port1,id2@host2:port2
那么假如有7個(gè)broker和3個(gè)controller,分別是controller1
、controller2
、controller3
,那么在controller1中的server.properties
中會有如下配置:
process.roles=controller
node.id=1
listeners=CONTROLLER://controller1.example.com:9093
controller.quorum.voters=1@controller1:9093,2@controller2:9093,3@controller3:9093
每個(gè)broker和每個(gè)controller 都必須設(shè)置 controller.quorum.voters
。需要注意的是,controller.quorum.voters 配置中提供的節(jié)點(diǎn)ID必須與提供給服務(wù)器的節(jié)點(diǎn)ID匹配。
Kraft單機(jī)模式
Kafka是依賴于JDK的,需要先把java環(huán)境配置一下
到kafka官方地址下載需要的kafka版本即可。下載地址
# 下載
wget https://archive.apache.org/dist/kafka/3.2.3/kafka_2.12-3.2.3.tgz
# 解壓
tar -zxvf kafka_2.12-3.2.3.tgz
解壓完畢后,到里面看下目錄結(jié)構(gòu)
可以配置一下hosts域名解析(不配置也可以,后面需要用到的配置中直接寫localhost就行)
hostnamectl set-hostname kafka1
然后去修改config/kraft/server.properties
# 表示此節(jié)點(diǎn),既是broker又可以當(dāng)controller
process.roles=broker,controller
# 節(jié)點(diǎn)id,不重名即可
node.id=1
# controller競爭者,也就是controller將從它們之中誕生(這里的kafka1是剛剛設(shè)置的本機(jī)的域名解析,或者直接寫localhost也行)
controller.quorum.voters=1@kafka1:9093
listeners=PLAINTEXT://:9092,CONTROLLER://:9093
# 監(jiān)聽地址(也就是客戶端連接時(shí)訪問的地址)
advertised.listeners=PLAINTEXT://192.168.1.38:9092
controller.listener.names=CONTROLLER
# kafka數(shù)據(jù)存放地址
log.dirs=/wlh/kafka/data
整理完畢后,初始化一下數(shù)據(jù)存儲目錄
# 生成一個(gè)uuid,后面需要用
./bin/kafka-storage.sh random-uuid
# 示例如下:
NxAPV0sdTtSDsMN2IwDgPA
# 格式化存儲
./bin/kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g -c ./config/kraft/server.properties
格式化完畢后,可以啟動節(jié)點(diǎn)了(守護(hù)進(jìn)程啟動加-daemon
參數(shù))。
./bin/kafka-server-start.sh -daemon ./config/kraft/server.properties
啟動完畢后,可以進(jìn)行連接訪問kafka服務(wù)器了。記得把防火墻關(guān)了,或者只開放9092端口即可。
systemctl stop firewalld
若跨機(jī)器訪問,如使用windows連接,可以先tcping
一下,看看kafka服務(wù)器的狀態(tài)是否正常。
可以看到,沒有問題。kafka可視化管理頁面https://gitee.com/dushixiang/kafka-map/,有興趣可以自行搭建。
這里用cmd命令行測試下。
-
服務(wù)器創(chuàng)建topic–
kafka-test
bin/kafka-topics.sh --create --topic kafka-test --partitions 1 --replication-factor 1 --bootstrap-server kafka1:9092
-
創(chuàng)建生產(chǎn)者、消費(fèi)者
# 生產(chǎn)者 kafka-console-producer.bat --broker-list 192.168.1.38:9092 --topic kafka-test # 消費(fèi)者 kafka-console-consumer.bat --bootstrap-server 192.168.1.38:9092 --topic kafka-test
完事兒收工。
kraft集群模式
集群模式和單機(jī)模式大差不差,就是配置文件多了的問題。由于機(jī)器數(shù)量有限,這里就不展示多臺服務(wù)器的了,看下單臺機(jī)器部署集群。
準(zhǔn)備好3個(gè)kafka,分別是kafka01
、kafka02
、kafka03
,分別到它們的config/kraft/server.properties
中做配置
kafka01
process.roles=broker,controller
node.id=1
controller.quorum.voters=1@localhost:19093,2@localhost:29093,3@localhost:39093
listeners=PLAINTEXT://:19092,CONTROLLER://:19093
advertised.listeners=PLAINTEXT://192.168.1.38:19092
controller.listener.names=CONTROLLER
log.dirs=/wlh/kafka01/data
kafka02
process.roles=broker,controller
node.id=2
controller.quorum.voters=1@localhost:19093,2@localhost:29093,3@localhost:39093
listeners=PLAINTEXT://:29092,CONTROLLER://:29093
advertised.listeners=PLAINTEXT://192.168.1.38:29092
controller.listener.names=CONTROLLER
log.dirs=/wlh/kafka02/data
kafka03
process.roles=broker,controller
node.id=3
controller.quorum.voters=1@localhost:19093,2@localhost:29093,3@localhost:39093
listeners=PLAINTEXT://:39092,CONTROLLER://:39093
advertised.listeners=PLAINTEXT://192.168.1.38:39092
controller.listener.names=CONTROLLER
log.dirs=/wlh/kafka03/data
配置做完后,生成uuid且格式化它們的存儲目錄
# 生成一個(gè)uuid,后面需要用
/wlh/kafka01/bin/kafka-storage.sh random-uuid
# 示例如下:
NxAPV0sdTtSDsMN2IwDgPA
# 格式化存儲
/wlh/kafka01/bin/kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g -c /wlh/kafka01/config/kraft/server.properties
/wlh/kafka02/bin/kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g -c /wlh/kafka02/config/kraft/server.properties
/wlh/kafka03/bin/kafka-storage.sh format -t xtzWWN4bTjitpL3kfd9s5g -c /wlh/kafka03/config/kraft/server.properties
# 分別啟動它們
/wlh/kafka01/bin/kafka-server-start.sh -daemon /wlh/kafka01/config/kraft/server.properties
/wlh/kafka02/bin/kafka-server-start.sh -daemon /wlh/kafka01/config/kraft/server.properties
/wlh/kafka03/bin/kafka-server-start.sh -daemon /wlh/kafka01/config/kraft/server.properties
命令測試一下kafka集群。
kafka1/bin/kafka-topics.sh --create --topic kafka-test --partitions 1 --replication-factor 1 --bootstrap-server 192.168.1.38:19092
# 生產(chǎn)者
kafka-console-producer.bat --broker-list 192.168.1.38:19092,192.168.1.38:29092,192.168.1.38:39092 --topic kafka-test
# 消費(fèi)者
kafka-console-consumer.bat --bootstrap-server 192.168.1.38:19092,192.168.1.38:29092,192.168.1.38:39092 --topic kafka-test
文章來源:http://www.zghlxwxcb.cn/news/detail-682854.html
完事兒,大功告成??!文章來源地址http://www.zghlxwxcb.cn/news/detail-682854.html
到了這里,關(guān)于使用kafka還在依賴Zookeeper,kraft模式了解下的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!