生產(chǎn)者均衡圖解 如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?1.先上圖,明確一個(gè)消息發(fā)送和消費(fèi)的流程2.消息消息首先需要定義消息協(xié)議,比如ActiveMQ,Stomp,XMPP等3.消息協(xié)議定義好了,明確消息隊(duì)列需要滿足什么場景是否需
如何設(shè)計(jì)一個(gè)MQ消息隊(duì)列?
1.先上圖,明確一個(gè)消息發(fā)送和消費(fèi)的流程
2.消息消息首先需要定義消息協(xié)議,比如ActiveMQ,Stomp,XMPP等
3.消息協(xié)議定義好了,明確消息隊(duì)列需要滿足什么場景
是否需要保證消息可靠性,如果需要就要做存儲的高可用
是否需要支持同步和異步消息
是否需要保證消息的順序
是否需要支持延時(shí)消息
具體可以參照很多開源實(shí)現(xiàn)的特性,比如RocketMQ就是高可靠的,Kafka就是高吞吐量的,但是不是高可靠的。
日志采集系統(tǒng)flume和kafka有什么區(qū)別及聯(lián)系?
Flume和Kafka有一部分功能是相同的,但是整體來看,兩者的差別還是很大的;它們使用的場景有所不同,但是可以相互配合使用。
Flume
簡單的說,F(xiàn)lume是分布式日志收集系統(tǒng),它把各個(gè)服務(wù)器上的日志收集起來,傳送到制定的地方,比如傳送到HDFS中。
Kafka
Kafka的定位是分布式消息中間件,自帶存儲,提供push和pull存取數(shù)據(jù)功能。
使用場景
在實(shí)際應(yīng)用中,系統(tǒng)實(shí)時(shí)產(chǎn)生的日志需要最后進(jìn)入HDFS,但是生產(chǎn)上的日志數(shù)量會(huì)有波動(dòng),比如由于訪問量的增加,導(dǎo)致突然之間產(chǎn)生大量的日志,這時(shí)候可能會(huì)導(dǎo)致日志寫入HDFS失敗,所以這時(shí)候可以先把日志數(shù)據(jù)寫入到Kafka中,再由Kafka導(dǎo)入到HDFS中。
總結(jié):在日志采集系統(tǒng)中,把Kafka當(dāng)做日志緩存更加合適,F(xiàn)lume做數(shù)據(jù)采集,因?yàn)樗梢远ㄖ坪芏鄶?shù)據(jù)源,減少開發(fā)量,所以Flume和Kafka可以配合起來一起工作。
整體的流程是這樣的:
服務(wù)器上的日志<--Flume-->Kafka-->HDFS-->離線計(jì)算
服務(wù)器上的日志<--Flume-->Kafka-->Storm
希望我的回答能夠幫助到你!