網(wǎng)頁(yè)設(shè)計(jì)制作網(wǎng)站模板免費(fèi)簡(jiǎn)述seo和sem的區(qū)別
(一)kafka
1、kafka3.0之前依賴于zookeeper
2、kafka3.0之后不依賴zookeeper,元數(shù)據(jù)由kafka節(jié)點(diǎn)自己管理
(二)zookeeper
1、zookeeper是一個(gè)開(kāi)源的、分布式的架構(gòu),提供協(xié)調(diào)服務(wù)(Apache項(xiàng)目)
(1)基于觀察者模式涉及的分布式服務(wù)管理架構(gòu)
(2)存儲(chǔ)和管理數(shù)據(jù),分布式節(jié)點(diǎn)上的服務(wù)接受觀察者的注冊(cè),一旦分布式節(jié)點(diǎn)上的數(shù)據(jù)發(fā)生變化,由zookeeper負(fù)責(zé)同時(shí)分布式節(jié)點(diǎn)上的服務(wù)
2、zookeeper分為:領(lǐng)導(dǎo)者和追隨者leader、follower組成的集群
(1)只要有一半以上的集群存活,zookeeper集群就可以正常工作,適用于安裝奇數(shù)臺(tái)的服務(wù)集群
(2)全局?jǐn)?shù)據(jù)一致,每一個(gè)zookeeper每一個(gè)幾點(diǎn)都保存相同的數(shù)據(jù),維護(hù)監(jiān)控服務(wù)的數(shù)據(jù)一致
(3)數(shù)據(jù)更新的原子性,要么都成功、要么都失敗
(4)實(shí)時(shí)性,只要有變化,立即同步
3、zookeeper的應(yīng)用場(chǎng)景(記)
(1)統(tǒng)一命名服務(wù):在分布式的環(huán)境下,對(duì)所有的應(yīng)用和服務(wù)及女性統(tǒng)一命名
(2)統(tǒng)一配置管理:配置文件同步,kafka的配置文件被修改,可以快速同步到其他節(jié)點(diǎn)
(3)統(tǒng)一集群管理(重點(diǎn)):實(shí)時(shí)掌握所有節(jié)點(diǎn)的狀態(tài)
(4)服務(wù)器動(dòng)態(tài)上下線
(5)實(shí)現(xiàn)負(fù)載均衡,把訪問(wèn)的服務(wù)器的數(shù)據(jù),發(fā)送到訪問(wèn)最少的服務(wù)器處理客戶端的請(qǐng)求
4、zookeeper的選舉機(jī)制:領(lǐng)導(dǎo)者和追隨者
例:3臺(tái)服務(wù)器:leader一旦確定,后續(xù)的服務(wù)器都是追隨者
(1)A先啟動(dòng),發(fā)起第一次選舉,投票給自己,只有1票,不滿半數(shù),A的狀態(tài)是looking
(2)B啟動(dòng),再發(fā)起一次選舉,A和B分別投自己一票,交換選票信息,(myid)A發(fā)現(xiàn)B的myid比A大,A的這一票轉(zhuǎn)而投給B(A 0;B 2),沒(méi)有半數(shù)以上結(jié)果,A、B會(huì)進(jìn)入looking(B有可能成為leader,C也就成為follower)
(3)C啟動(dòng),C的myid最大,A和B都會(huì)把票投給C(A0;B0;C3),C的狀態(tài)變?yōu)閘eader,A和B變成follower
(4)只有兩種情況會(huì)重新開(kāi)啟選舉
①初始化的情況會(huì)產(chǎn)生選舉
②服務(wù)器之間和leader丟失了連接狀態(tài)
*若leader已存在,建立間接即可
*若leader不存在:
服務(wù)器id的勝出
EPOCH大,直接勝出
EPOCH相同,事務(wù)ID大的勝出
*EPOCH是每個(gè)leader任期時(shí)的代號(hào),沒(méi)有l(wèi)eader,大家的邏輯地位相同,每投完一次之后,數(shù)據(jù)是遞增
*事務(wù)id是標(biāo)識(shí)服務(wù)器的每一次變更,每變更一次事務(wù)id就變化一次
*服務(wù)器id,每一個(gè)zookeeper集群中的機(jī)器都有一個(gè)id,每臺(tái)機(jī)器不重復(fù),和myid保持一致
(三)部署zookeeper
20.0.0.10 | zookeeper+kafka(2核4G) |
20.0.0.20 | zookeeper+kafka(2核4G) |
20.0.0.30 | zookeeper+kafka(2核4G) |
1、部署環(huán)境
升級(jí)Java:yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
cp zoo_sample.cfg ?zoo.cfg
2、修改zookeeper的配置文件
server.1=20.0.0.10:3188:3288
1:表示每個(gè)zookeeper集群的初始myid
20.0.0.10:服務(wù)器的ip地址
3188:領(lǐng)導(dǎo)者和追隨者之間交換信息的端口(內(nèi)部通信的端口)
3288:一旦leader丟失響應(yīng),開(kāi)啟選舉,3288就是用來(lái)執(zhí)行選舉時(shí)的服務(wù)器之間的通信端口
(1)創(chuàng)建目錄
(2)分配myid
(3)編寫(xiě)zookeeper的啟動(dòng)腳本
chmod +x /etc/init.d/zookeeper
添加到系統(tǒng)服務(wù)中:chkconfig --add zookeeper
(四)消息隊(duì)列:kafka
1、為什么要引入消息隊(duì)列(MQ)
(1)他也是一個(gè)中間件,在高并發(fā)環(huán)境下,同步請(qǐng)求來(lái)不及處理,來(lái)不及處理的請(qǐng)求會(huì)形成堵塞。比方說(shuō)數(shù)據(jù)庫(kù)就會(huì)形成行鎖或者表鎖,請(qǐng)求線程滿了,超標(biāo)了,too much connection,導(dǎo)致整個(gè)系統(tǒng)雪崩
2、消息隊(duì)列的作用:異步處理請(qǐng)求、流量削峰,應(yīng)用解耦、可恢復(fù)性、緩沖、峰值的處理能力、異步通信
(1)耦合:在軟件系統(tǒng)當(dāng)中,修改一個(gè)組件需要修改所有其他組件,高度耦合
(2)低度耦合:修改其中一個(gè)組件,對(duì)其他影響不大,無(wú)需修改所有
(3)解耦:只要通信保證,其他的修改不影響整個(gè)集群,每一個(gè)組件可以獨(dú)立的擴(kuò)展,修改,降低組件之間的依賴性,依賴點(diǎn)就是接口約束,通過(guò)不同的端口,保證集群通信
(4)可恢復(fù)性:系統(tǒng)當(dāng)中的有一部分組件消失,不影響整個(gè)系統(tǒng),也就是說(shuō)在消息隊(duì)列當(dāng)中,即使有一個(gè)處理消息的進(jìn)程失敗,一旦恢復(fù),還可以重新加入到隊(duì)列當(dāng)中,繼續(xù)處理消息
(5)緩沖:可以控制和優(yōu)化數(shù)據(jù)經(jīng)過(guò)系統(tǒng)的時(shí)間和速度,解決生產(chǎn)消息和消費(fèi)消息處理速度不一致的問(wèn)題
(6)峰值的處理能力:消息隊(duì)列在峰值的情況下,能夠頂住突發(fā)的訪問(wèn)壓力(核心作用),避免專門(mén)為了突發(fā)情況而對(duì)系統(tǒng)進(jìn)行修改
(7)異步通信:允許用戶把一個(gè)消息放入隊(duì)列,但是不立即處理,等用戶想處理的時(shí)候再處理
3、消息隊(duì)列的模式
(1)點(diǎn)對(duì)點(diǎn):一對(duì)一,消息的生產(chǎn)者發(fā)送消息到隊(duì)列中,消費(fèi)者從隊(duì)列中提取消息,消費(fèi)者取完之后,隊(duì)列中被提取的消息將會(huì)被移除,后續(xù)的消費(fèi)者不能再繼續(xù)消費(fèi)隊(duì)列當(dāng)中的消息,消息隊(duì)列可以有多個(gè)消費(fèi)者,但是一個(gè)消息只能由一個(gè)消費(fèi)者提取(RABBITMQ)
(2)發(fā)布/訂閱模式:一對(duì)多(觀察者模式),消費(fèi)者提取數(shù)據(jù)之后,隊(duì)列中的消息不會(huì)被清除。生產(chǎn)者發(fā)布一個(gè)消息到主題,所有消費(fèi)者都是通過(guò)主題獲取消息
組件:
①主題:topic,topic類似一個(gè)數(shù)據(jù)流的管道,生產(chǎn)者把消息發(fā)布到主題,消費(fèi)者從主題中訂閱數(shù)據(jù)(獲取數(shù)據(jù)),主題可以分區(qū),每個(gè)分區(qū)都有自己的偏移量
②分區(qū):partition。每個(gè)主題都可以分成多個(gè)分區(qū),每個(gè)分區(qū)是數(shù)據(jù)的有序子集,分區(qū)可以允許kafka進(jìn)行水平擴(kuò)展,以處理大量數(shù)據(jù)。消息在分區(qū)按照偏移量存儲(chǔ),消費(fèi)者可以獨(dú)立讀取每個(gè)分區(qū)的數(shù)據(jù)(存儲(chǔ)生產(chǎn)者發(fā)布的數(shù)據(jù))
③偏移量:是每個(gè)消息在分區(qū)中唯一的標(biāo)識(shí),消費(fèi)者可以通過(guò)偏移量來(lái)跟蹤獲取已讀或者未讀消息的位置,也可以提交偏移量來(lái)記錄已處理的信息
④生產(chǎn)者:producer,生產(chǎn)者把數(shù)據(jù)發(fā)送給kafka的主題當(dāng)中,負(fù)責(zé)寫(xiě)入消息
⑤消費(fèi)者:consumer,從主題當(dāng)中讀取數(shù)據(jù),消費(fèi)者可以是一個(gè)也可以是多個(gè),每個(gè)消費(fèi)者有一個(gè)唯一的消費(fèi)者組id,kafka通過(guò)消費(fèi)者實(shí)現(xiàn)負(fù)載均衡和容錯(cuò)性
⑤經(jīng)紀(jì)人:broker,每個(gè)kafka節(jié)點(diǎn)都有一個(gè)broker,每一個(gè)負(fù)責(zé)一臺(tái)kafka服務(wù)器,id唯一,處理存儲(chǔ)主題分區(qū)當(dāng)中的數(shù)據(jù),處理生產(chǎn)和消費(fèi)者的請(qǐng)求,維護(hù)元數(shù)據(jù)(zookeeper)
⑥zookeeper:zookeeper負(fù)責(zé)保存元數(shù)據(jù),元數(shù)據(jù)就是topic的相關(guān)信息(發(fā)布在哪臺(tái)主機(jī)上,指定了多少分區(qū),以及副本數(shù),偏移量)。
zookeeper默認(rèn)自建的主題:_consumer_offsets。
*3.0之后不依賴zookeeper的核心:元數(shù)據(jù)由kafka節(jié)點(diǎn)自己管理
(五)kafka的工作流程
1、至少一次語(yǔ)義:只要消費(fèi)者進(jìn)入,確保消息至少被消費(fèi)一次
(六)zookeeper+kafka(2.7.0)——配置kafka(2.7.0)
2181:zookeeper對(duì)外服務(wù)的端口
9092:kafka的默認(rèn)端口
1、安裝kafka
2、聲明環(huán)境變量
export KAFKA_HOME=/opt/kafka
export PATH=$PATH:$KAFKA_HOME/bin
3、修改配置文件
4、設(shè)置kafka的啟動(dòng)腳本
chmod +x /etc/init.d/kafka
chkconfig --add kafka
service kafka start
5、設(shè)置主機(jī)映射(否則識(shí)別不到)
6、創(chuàng)建主題(在kafka的bin目錄下執(zhí)行命令)
kafka-topics.sh --create --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181 --replication-factor 2 --partitions 3 --topic hyde1
創(chuàng)建主題:創(chuàng)建主題:創(chuàng)建主題,必須創(chuàng)建分區(qū),指定副本
(1)在kafka的bin目錄下,是所有kafka可執(zhí)行命名文件
(2)--zookeeper:指定的是zookeeper的地址和端口,保存kafka的元數(shù)據(jù)
(3)--replication-factor 2:指定分區(qū)的副本數(shù)(實(shí)現(xiàn)冗余)
(4)partition 3 :指定主題的分區(qū)數(shù)
(5)--topic test1 指定主題的名稱。
查看主題的詳細(xì)信息:
kafka-topics.sh --describe --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181
kafka-topics.sh --describe --zookeeper 20.0.0.10:2181,20.0.0.20:2181,20.0.0.30:2181 --topic hyde1
7、發(fā)布消息和消費(fèi)消息
(1)發(fā)布消息
kafka-console-producer.sh --broker-list 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1
(2)消費(fèi)消息
①全部獲取:
kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1 --from-beginning
②實(shí)時(shí)獲取:
kafka-console-consumer.sh --bootstrap-server 20.0.0.10:9092,20.0.0.20:9092,20.0.0.30:9092 --topic hyde1
8、不同主機(jī)訂閱不同主題
(1)指定創(chuàng)建主題
kafka-topics.sh --create --zookeeper 20.0.0.20:2181 --replication-factor 1 --partitions 1 --topic hyde2
(2)發(fā)布消息
kafka-console-producer.sh?--broker-list 20.0.0.20:9092 --topic hyde2
(3)消費(fèi)消息
kafka-console-consumer.sh?--bootstrap-server 20.0.0.20:9092 --topic hyde3?--from-beginning
9、修改分區(qū)數(shù)
kafka-topics.sh?--zookeeper 20.0.0.20:2181?--alter?--topic hyde2 --partitions 3
kafka-topics.sh?--describe?--zookeeper 20.0.0.20:2181 --topic hyde2
10、刪除主題:(只是打上“刪除”的標(biāo)記,并不是真正的刪除,還保存在元數(shù)據(jù)中)
kafka-topics.sh --delete --zookeeper 20.0.0.20:2181 --topic hyde2
11、查看內(nèi)部保存的元數(shù)據(jù)信息
總結(jié):
1、zookeeper:主要是分布式、觀察者模式,統(tǒng)一各個(gè)服務(wù)器節(jié)點(diǎn)的數(shù)據(jù)
在kafka當(dāng)中,zookeeper主要是收集、保存kafka的元數(shù)據(jù)
2、kafka消息隊(duì)列,訂閱發(fā)布模式(速度快,處理大數(shù)據(jù))
???RABDIT MQ(輕量級(jí)):實(shí)現(xiàn)rabbit MQ消息隊(duì)列
3、kafka的組件
(1)主題
(2)分區(qū)(存儲(chǔ)消息的位置)
(3)偏移量
(七)配置kafka(3.4.1)(還是依賴于zookeeper)
1、部署zookeeper組件
2、安裝kafka(3.4.1)
3、修改配置文件