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