一、zookeeper和kafka簡(jiǎn)介:
(1)ZooKeeper 是一個(gè)開(kāi)源的分布式協(xié)調(diào)服務(wù)晚岭,由雅虎創(chuàng)建,是 Google Chubby 的開(kāi)源實(shí)現(xiàn)痢法。分布式應(yīng)用程序可以基于 ZooKeeper 實(shí)現(xiàn)諸如數(shù)據(jù)發(fā)布/訂閱踩验、負(fù)載均衡荐虐、命名服務(wù)禽额、分布式協(xié)調(diào)/通知克伊、集群管理捏浊、Master 選舉懂衩、配置維護(hù),名字服務(wù)金踪、分布式同步浊洞、分布式鎖和分布式隊(duì)列等功能。
原文鏈接:https://blog.csdn.net/weijifeng_/article/details/79775738
在zookeeper的集群模式中胡岔,當(dāng)超過(guò)半數(shù)的服務(wù)器正常運(yùn)行時(shí)法希,整個(gè)集群才能夠正常運(yùn)行。如:當(dāng)集群機(jī)器數(shù)量為3時(shí)靶瘸,當(dāng)一臺(tái)服務(wù)器掛掉苫亦,正常運(yùn)行的服務(wù)器數(shù)還有2臺(tái)毛肋,集群依舊可以正常服務(wù),再掛掉一臺(tái)就不能正常服務(wù)了屋剑。
為什么推薦奇數(shù)臺(tái)機(jī)器呢润匙?當(dāng)集群機(jī)器數(shù)量為4時(shí),集群最多允許掛掉一臺(tái)服務(wù)器(掛掉2臺(tái)唉匾,集群中正常運(yùn)行的服務(wù)器沒(méi)超過(guò)半數(shù))孕讳,而集群機(jī)器數(shù)量為3時(shí),也是最多允許掛掉一臺(tái)服務(wù)器巍膘,在可靠性相同的情況下卫病,選擇3臺(tái)比選擇4臺(tái)會(huì)減少一臺(tái)服務(wù)器的資源。
因?yàn)橘Y源有限典徘,本文采用偽分布式集群模式,即一臺(tái)機(jī)器分別安裝部署3個(gè)zookeeper(Linux系統(tǒng))益咬,且版本號(hào)為3.4.14逮诲。
(2)Kafka是最初由Linkedin公司開(kāi)發(fā),是一個(gè)分布式幽告、分區(qū)的梅鹦、多副本的、多訂閱者冗锁,基于zookeeper協(xié)調(diào)的分布式日志系統(tǒng)(也可以當(dāng)做MQ系統(tǒng))齐唆,常見(jiàn)可以用于web/nginx日志、訪問(wèn)日志冻河,消息服務(wù)等等箍邮,Linkedin于2010年貢獻(xiàn)給了Apache基金會(huì)并成為頂級(jí)開(kāi)源項(xiàng)目。
主要應(yīng)用場(chǎng)景是:日志收集系統(tǒng)和消息系統(tǒng)叨叙。
Kafka主要設(shè)計(jì)目標(biāo)如下:
以時(shí)間復(fù)雜度為O(1)的方式提供消息持久化能力锭弊,即使對(duì)TB級(jí)以上數(shù)據(jù)也能保證常數(shù)時(shí)間的訪問(wèn)性能。
高吞吐率擂错。即使在非常廉價(jià)的商用機(jī)器上也能做到單機(jī)支持每秒100K條消息的傳輸味滞。
支持Kafka Server間的消息分區(qū),及分布式消費(fèi)钮呀,同時(shí)保證每個(gè)partition內(nèi)的消息順序傳輸剑鞍。
同時(shí)支持離線數(shù)據(jù)處理和實(shí)時(shí)數(shù)據(jù)處理。
支持在線水平擴(kuò)展爽醋。
原文鏈接:https://www.cnblogs.com/frankdeng/p/9310684.html
因?yàn)橘Y源有限蚁署,本文采用偽分布式集群模式,即一臺(tái)機(jī)器分別安裝部署3個(gè)kafka(Linux系統(tǒng))蚂四,且版本號(hào)為kafka_2.13-2.4.0形用。
二就轧、zookeeper集群的部署
1.在官網(wǎng)http://mirror.bit.edu.cn/apache/zookeeper/
下載zookeeper壓縮包后分別復(fù)制并解壓到home目錄下的zookeeper1,zookeeper2,和zookeeper3文件夾下田度。
2.分別在/home/zookeeper1/zookeeper-3.4.14/妒御,/home/zookeeper2/zookeeper-3.4.14/,/home/zookeeper3/zookeeper-3.4.14/目錄下創(chuàng)建data文件夾(用于存放zookeeper數(shù)據(jù))和logs文件夾(用于存放日志文件)镇饺。以zookeeper1為例:
cd /home/zookeeper1/zookeeper-3.4.14
mkdir data
mkdir logs
分別執(zhí)行以下命令copy配置文件乎莉,以zookeeper1為例:
cd /home/zookeeper1/zookeeper-3.4.14/conf
cp zoo_sample.cfg zoo.cfg
然后在zoo.cfg配置文件中分別設(shè)置數(shù)據(jù)和日志存放路徑,以zookeeper1為例:
dataDir=/home/zookeeper1/zookeeper-3.4.14/data
dataLogDir=/home/zookeeper1/zookeeper-3.4.14/logs
3.運(yùn)行以下命令分別創(chuàng)建zookeeper myid文件:
cd /home/zookeeper1/zookeeper-3.4.14/data
touch myid
vim myid
輸入1奸笤,按Esc+:wq保存退出惋啃。
cd /home/zookeeper2/zookeeper-3.4.14/data
touch myid
vim myid
輸入2,按Esc+:wq保存退出监右。
cd /home/zookeeper3/zookeeper-3.4.14/data
touch myid
vim myid
輸入3边灭,按Esc+:wq保存退出。
注意:myid是zookeeper服務(wù)下的標(biāo)識(shí)健盒,myid內(nèi)容不能重復(fù)绒瘦。
4.分別修改zoo.cfg配置文件信息,配置集群節(jié)點(diǎn):
vim /home/zookeeper1/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper1的運(yùn)行端口號(hào)為2181扣癣,并在尾部添加如下集群節(jié)點(diǎn)信息:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
注意:server.X=A:B:C 其中X是一個(gè)數(shù)字, 表示這是第幾號(hào)server惰帽。A是該server所在的IP地址,B配置該server和集群中的leader交換消息所使用的端口父虑,C配置選舉leader時(shí)所使用的端口.该酗。如果配置的是偽集群模式, 那么各個(gè)server的B,C參數(shù)必須不同士嚎。
vim /home/zookeeper2/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper2的運(yùn)行端口號(hào)為2182呜魄,并在尾部添加如下集群節(jié)點(diǎn)信息:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
vim /home/zookeeper3/zookeeper-3.4.14/conf/zoo.cfg
修改zookeeper3的運(yùn)行端口號(hào)為2183,并在尾部添加如下集群節(jié)點(diǎn)信息:
server.1=127.0.0.1:2888:3888
server.2=127.0.0.1:2889:3889
server.3=127.0.0.1:2890:3890
5.分別啟動(dòng)三個(gè)zookeeper并查看狀態(tài)莱衩,以zookeeper1為例:
cd /home/zookeeper1/zookeeper-3.4.14/bin
./zkServer.sh start
./zkServer.sh status
啟動(dòng)圖片分別如下:
查詢(xún)狀態(tài)圖片分別如下:
其中Mode:leader表示主機(jī)器耕赘,Mode:follower表示從機(jī)器,可參考以下集群角色介紹:
三膳殷、kafka的部署
1.在官網(wǎng)http://kafka.apache.org/downloads下載kafka壓縮包后分別復(fù)制并解壓到home目錄下的kafka1操骡,kafka2,和kafka3文件夾下。
2.分別在/home/kafka1/kafka_2.13-2.4.0/赚窃,/home/kafka2/kafka_2.13-2.4.0/册招,/home/kafka3/kafka_2.13-2.4.0/目錄下創(chuàng)建logs文件夾(用于存放日志文件)。
教程和上方zookeeper類(lèi)似勒极。
3.分別修改配置文件:
(1)vim /home/kafka1/kafka_2.13-2.4.0/config/server.properties
修改內(nèi)容如下:
broker.id=0 //需要保證每一臺(tái)kafka都有一個(gè)獨(dú)立的broker
listeners=PLAINTEXT://127.0.0.1:9092 //ip地址為本地的9092端口log.dirs=/home/kafka1/kafka_2.13-2.4.0/logs //數(shù)據(jù)存放的目錄
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的連接地址信息
(2)vim /home/kafka2/kafka_2.13-2.4.0/config/server.properties
修改內(nèi)容如下:
broker.id=1 //需要保證每一臺(tái)kafka都有一個(gè)獨(dú)立的broker
listeners=PLAINTEXT://127.0.0.1:9093 //ip地址為本地的9092端口log.dirs=/home/kafka2/kafka_2.13-2.4.0/logs //數(shù)據(jù)存放的目錄
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的連接地址信息
(3)vim /home/kafka3/kafka_2.13-2.4.0/config/server.properties
修改內(nèi)容如下:
broker.id=2 //需要保證每一臺(tái)kafka都有一個(gè)獨(dú)立的broker
listeners=PLAINTEXT://127.0.0.1:9094 //ip地址為本地的9092端口log.dirs=/home/kafka3/kafka_2.13-2.4.0/logs //數(shù)據(jù)存放的目錄
zookeeper.connect=127.0.0.1:2181,127.0.0.1:2182,127.0.0.1:2183 //zookeeper的連接地址信息
4.在確保zookeeper集群已經(jīng)啟動(dòng)的情況下啟動(dòng)kafka集群:
分別進(jìn)入項(xiàng)目根目錄執(zhí)行以下命令啟動(dòng)kafka:
bin/kafka-server-start.sh config/server.properties
啟動(dòng)后效果如下:
每張圖片最下面的brokerId即為不同的服務(wù)標(biāo)識(shí)是掰。