Kafka是由Apache軟件基金會(huì)開發(fā)一個(gè)開源流處理平臺(tái),使用Scala和Java編寫, 該項(xiàng)目的目標(biāo)是為處理實(shí)時(shí)數(shù)據(jù)提供一個(gè)統(tǒng)一、高吞吐、低延遲的平臺(tái)。其持久化層本質(zhì)上是一個(gè)按照分布式事務(wù)日志架構(gòu)的大規(guī)模發(fā)布/訂閱消息隊(duì)列。這種工作方式使它為企業(yè)級(jí)基礎(chǔ)設(shè)施來處理流失數(shù)據(jù)非常有價(jià)值。
本文的目的是使用Docker容器來部署Kafka, 這樣可以省略Kafka安裝配置的中間過程, 節(jié)省大量時(shí)間。文章中分別從幾個(gè)維度來闡述Kafka的部署過程, 包括:基礎(chǔ)環(huán)境要求、安裝zookeeper、容器內(nèi)的設(shè)置等, 最后給出了一個(gè)從生產(chǎn)者角度向消費(fèi)者發(fā)送消息, 消費(fèi)者成功接收到消息作為結(jié)尾, 最后給出了一個(gè)在全過程當(dāng)中遇到問題排查的正確方法。
Kafka存儲(chǔ)的消息來自任務(wù)多被稱為"生產(chǎn)者"(Producer)的進(jìn)程。數(shù)據(jù)從而可以被分配到不同的"分區(qū)"(Partition)、不同的“Topic”下。在一個(gè)分區(qū)內(nèi), 消息被索引并連同時(shí)間戳存儲(chǔ)在一起。而其它被稱為"消費(fèi)者"(Consumer)的進(jìn)程可以從分區(qū)查詢消息。Kafka運(yùn)行在一個(gè)由一臺(tái)或多臺(tái)服務(wù)器組成的集群上, 并且分區(qū)可以跨集群節(jié)點(diǎn)分布。Kafka的架構(gòu)如下圖所示:
以下列出了Kafka技術(shù)相關(guān)的術(shù)語:
了解了以上概念之后,對(duì)于Kafka的部署已經(jīng)沒有什么障礙, 下面開始正式的部署過程。
大多數(shù)Linux發(fā)行版都支持安裝Kafka,這里我準(zhǔn)備了一臺(tái)ubuntu 22.04.3 LTS版本的虛擬機(jī)作為試驗(yàn)環(huán)境。
登錄到系統(tǒng)輸入:docker -v 命令, 如果出現(xiàn):
Docker version 24.0.5, build 24.0.5-0ubuntu1~22.04.1
類似于這樣的提示信息,說明Docker已安裝,如果沒有,請(qǐng)輸入以下命令安裝Docker:
$ sudo apt update$ sudo apt install docker.io
由于Kafka依賴Zookeeper實(shí)現(xiàn)高可用性和一致性,其為Kafka提供了關(guān)鍵的分布式協(xié)調(diào)服務(wù),因此部署Kafka必須先部署Zookeeper集群作為基礎(chǔ), 以下進(jìn)入部署Zookeeper的過程:
在命令行直接輸入以下命令,docker會(huì)自動(dòng)拉取對(duì)應(yīng)鏡像:
# docker run -d --name zookeeper -p 2181:2181 -v /etc/localtime:/etc/localtime wurstmeister/zookeeper
拉取過程如圖:
Zookeeper安裝成功后, 接著安裝Kafka組件, 在命令行直接輸入以下命令,docker會(huì)自動(dòng)拉取對(duì)應(yīng)鏡像:
# docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=[你的IP地址]:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://[你的IP地址]:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
注意, 我的服務(wù)器IP是192.168.201.206,所以上面的IP要根據(jù)自己的實(shí)際情況進(jìn)行變更,我變更后的命令如下:
# docker run -d --name kafka -p 9092:9092 -e KAFKA_BROKER_ID=0 -e KAFKA_ZOOKEEPER_CONNECT=192.168.201.206:2181 -e KAFKA_ADVERTISED_LISTENERS=PLAINTEXT://192.168.201.206:9092 -e KAFKA_LISTENERS=PLAINTEXT://0.0.0.0:9092 -t wurstmeister/kafka
拉取過程如圖:
Kafka安裝完畢后,還要進(jìn)入到容器中啟動(dòng)生產(chǎn)者和消費(fèi)者,這樣可以驗(yàn)證kafka功能是否正常,順序執(zhí)行命令如下:
# docker ps -a #查看kafka鏡像的容器ID# docker exec -it 容器ID /bin/sh #進(jìn)入到容器內(nèi)部# cd /opt/kafka/bin # 切到容器內(nèi)部kafka執(zhí)行目錄下
執(zhí)行最后的結(jié)果如圖:
在容器里執(zhí)行以下命令啟動(dòng)生產(chǎn)者:
./kafka-console-producer.sh --broker-list localhost:9092 --topic [你的topic名稱]
我這里自己起了一個(gè)topic名稱,名字為test123, 如圖:
產(chǎn)生者腳本啟動(dòng)成功后,會(huì)有一個(gè)">"提示符。
為了看到生產(chǎn)者和消費(fèi)者之間的消息傳遞效果,這里需要另開一個(gè)終端,按照上面的方法進(jìn)入容器對(duì)應(yīng)目錄,并執(zhí)行以下命令:
./kafka-console-consumer.sh --bootstrap-server [你的IP地址]:9092 --topic [你的topic名稱]
注意,這里有兩個(gè)變量需要自己調(diào)整,一個(gè)是IP地址,另一個(gè)是上面建立的Topic名稱, 我這里填入信息后的完整命令如下:
./kafka-console-consumer.sh --bootstrap-server 192.168.201.206:9092 --topic test123
執(zhí)行過程如圖:
切換到生產(chǎn)者窗口,連續(xù)輸入一些信息,如圖:
再切換回消費(fèi)者窗口, 正常的話已經(jīng)可以收到生產(chǎn)者發(fā)送的信息了,如圖:
如果在使用Docker過程中遇到任何錯(cuò)誤, 可以命令:
docker logs 容器ID
通過查看容器日志進(jìn)行故障排查,過程如圖:
在部署Kafka的整個(gè)過程中, 遵循以下部署順序流程:
本文鏈接:http://www.tebozhan.com/showinfo-26-60384-0.htmlLinux下利用Docker快速部署配置Kafka服務(wù)
聲明:本網(wǎng)頁內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。郵件:2376512515@qq.com
上一篇: 線程使用越多程序越快?別瞎整