亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種生產(chǎn)消息的方法

文檔序號:9420412閱讀:325來源:國知局
一種生產(chǎn)消息的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于消息系統(tǒng)領(lǐng)域,具體涉及一種生產(chǎn)消息的方法。
【背景技術(shù)】
[0002]現(xiàn)有的分布式發(fā)布-訂閱消息系統(tǒng)已經(jīng)開始得到應(yīng)用。典型的如LinkedIn公司開發(fā)的Kafka,之后成為Apache項目的一部分。Kafka是一種快速、可擴(kuò)展的、設(shè)計內(nèi)在就是分布式的,分區(qū)的和可復(fù)制的提交日志服務(wù)。
[0003]Apache Kafka與傳統(tǒng)消息系統(tǒng)相比,有以下不同:?它被設(shè)計為一個分布式系統(tǒng),易于向外擴(kuò)展;?它同時為發(fā)布和訂閱提供高吞吐量;?它支持多訂閱者,當(dāng)失敗時能自動平衡消費者;?它將消息持久化到磁盤,因此可用于批量消費,例如ETL,以及實時應(yīng)用程序。
[0004]Kafka的架構(gòu)包括以下組件:.話題(Topic)是特定類型的消息流。消息是字節(jié)的有效負(fù)載(Payload),話題是消息的分類名或種子(Feed)名。?生產(chǎn)者(Producer)是能夠發(fā)布消息到話題的任何對象。.已發(fā)布的消息保存在一組服務(wù)器中,它們被稱為代理(Broker)或Kafka集群。.消費者可以訂閱一個或多個話題,并從Broker拉數(shù)據(jù),從而消費這些已發(fā)布的消息。
[0005]?話題(Topic)是特定類型的消息流。消息是字節(jié)的有效負(fù)載(Payload),話題是消息的分類名或種子(Feed)名。?生產(chǎn)者(Producer)是能夠發(fā)布消息到話題的任何對象。
[0006].已發(fā)布的消息保存在一組服務(wù)器中,它們被稱為代理(Broker)或Kafka集群。
[0007].消費者可以訂閱一個或多個話題,并從Broker拉數(shù)據(jù),從而消費這些已發(fā)布的消息。
[0008]JMS實現(xiàn),消息消費的位置是有prodiver保留,以便避免重復(fù)發(fā)送消息或者將沒有消費成功的消息重發(fā)等,同時還要控制消息的狀態(tài).這就要求JMS broker需要太多額外的工作.在kafka中,partit1n中的消息只有一個consumer在消費,且不存在消息狀態(tài)的控制,也沒有復(fù)雜的消息確認(rèn)機(jī)制,可見kafka broker端是相當(dāng)輕量級的.當(dāng)消息被consumer接收之后,consumer可以在本地保存最后消息的offset,并間歇性的向zookeeper注冊offset.由此可見,consumer客戶端也很輕量級.
[0009]消息傳送機(jī)制:對于JMS實現(xiàn),消息傳輸擔(dān)保非常直接:有且只有一次(exactlyonce).在kafka中稍有不同:I) at most once:最多一次,這個和JMS中〃非持久化〃消息類似.發(fā)送一次,無論成敗,將不會重發(fā).2)at least once:消息至少發(fā)送一次,如果消息未能接受成功,可能會重發(fā),直到接收成功.3) exactly once:消息只會發(fā)送一次.
[0010]目前具有中心結(jié)點的分布式消息系統(tǒng)都有副本結(jié)點用于容災(zāi)時切換,然而由于中心結(jié)點與副本結(jié)點之間數(shù)據(jù)同步存在不同程度的時延,使得生產(chǎn)者生產(chǎn)的消息容易出現(xiàn)重復(fù)、丟失冋題。
[0011]當(dāng)前生產(chǎn)者一般采用三種方式生產(chǎn)消息:一是At most once方式,生產(chǎn)的消息可能會丟失,但絕不會重復(fù)存儲;二是At least once方式,生產(chǎn)的消息絕不會丟失,但可能會重復(fù)存儲;三是Exactly once方式,生產(chǎn)的消息僅存儲一次,且不會丟失,很多時候這是生產(chǎn)者最理想的消息生產(chǎn)方式。

【發(fā)明內(nèi)容】

[0012]為了確保出現(xiàn)網(wǎng)絡(luò)故障、中心結(jié)點切換時不會導(dǎo)致生產(chǎn)消息丟失、重復(fù),本發(fā)明設(shè)計了一種Exactly once方式生產(chǎn)消息的方法。
[0013]技術(shù)方案,詳細(xì)如下:一種生產(chǎn)消息的方法,包括當(dāng)前中心結(jié)點存儲消息進(jìn)程和所有副本結(jié)點同步消息進(jìn)程;
[0014]步驟一、當(dāng)前中心結(jié)點接收消息生產(chǎn)者生產(chǎn)的消息,判斷其是否為重試消息,如為重試消息,進(jìn)入步驟二,否則進(jìn)入步驟三;
[0015]步驟二、判斷消息狀態(tài)及其處理結(jié)點:當(dāng)前中心結(jié)點在數(shù)據(jù)庫中查詢并獲取重試消息狀態(tài)及其處理結(jié)點,如其狀態(tài)為“成功”或其狀態(tài)為“處理中”且其處理結(jié)點為當(dāng)前中心結(jié)點,則返回相應(yīng)的響應(yīng)給消息生產(chǎn)者,結(jié)束當(dāng)前生產(chǎn)消息進(jìn)程;如其狀態(tài)為“失敗”或其狀態(tài)為“處理中”且其處理結(jié)點非當(dāng)前中心結(jié)點,則進(jìn)入步驟三;
[0016]步驟三、當(dāng)前中心結(jié)點開始存儲此消息,若存儲失敗,設(shè)置此消息狀態(tài)為“失敗”并將消息狀態(tài)及其處理結(jié)點保存到數(shù)據(jù)庫中,返回失敗響應(yīng)給消息生產(chǎn)者,結(jié)束當(dāng)前生產(chǎn)消息進(jìn)程;如存儲成功,設(shè)置此消息狀態(tài)為“處理中”并將消息狀態(tài)及其處理結(jié)點保存到數(shù)據(jù)庫中,當(dāng)前中心結(jié)點在設(shè)定的等待時間內(nèi)等待所有副本結(jié)點同步消息;
[0017]所有副本結(jié)點同步消息進(jìn)程步驟與當(dāng)前中心結(jié)點存儲消息進(jìn)程同步進(jìn)行,包括以下步驟:
[0018]步驟一:各個副本結(jié)點周期性地向當(dāng)前中心結(jié)點發(fā)起消息同步請求,同步請求里含有其當(dāng)前已存儲的消息位置;
[0019]步驟二:中心結(jié)點接收到消息同步請求,讀取各個副本結(jié)點當(dāng)前已存儲的消息位置,記錄所有副本結(jié)點共同到達(dá)的消息位置,即消息水位,將所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在消息水位及之前的消息狀態(tài)設(shè)置為“成功”,同時向各個副本結(jié)點發(fā)送其當(dāng)前已存儲消息位置之后的消息及所記錄的消息水位;
[0020]步驟三:各個副本結(jié)點存儲消息,同時進(jìn)行步驟一;
[0021]進(jìn)一步的,當(dāng)前中心結(jié)點存儲消息進(jìn)程步驟一中判斷是否為重試消息和步驟二中判斷消息狀態(tài)及其處理結(jié)點,使得當(dāng)網(wǎng)絡(luò)故障或中心結(jié)點切換等情況發(fā)生時,不會生產(chǎn)重復(fù)消息。
[0022]進(jìn)一步的,所有副本結(jié)點同步消息進(jìn)程的步驟二中,當(dāng)前中心結(jié)點向各個副本結(jié)點發(fā)送所記錄的消息水位,當(dāng)前中心結(jié)點切換時,所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)清除處在消息水位之后的數(shù)據(jù),使得不會生產(chǎn)重復(fù)消息。
[0023]—種生產(chǎn)消息的方法,當(dāng)前中心結(jié)點存儲消息進(jìn)程的步驟三中當(dāng)前中心結(jié)點存儲消息成功,設(shè)置此消息狀態(tài)為“處理中”和所有副本結(jié)點同步消息進(jìn)程的步驟二中消息水位的記錄以及將所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在消息水位及之前的消息狀態(tài)設(shè)置為“成功”,保證所有結(jié)點處在消息水位及之前的數(shù)據(jù)一致性,使得當(dāng)網(wǎng)絡(luò)故障或中心結(jié)點切換等情況發(fā)生時,不會丟失消息。
[0024]—種生產(chǎn)消息的方法,當(dāng)前中心結(jié)點存儲消息進(jìn)程和所有副本結(jié)點同步消息進(jìn)程同步進(jìn)行后即完成當(dāng)前生產(chǎn)消息進(jìn)程,具體有兩種結(jié)果:
[0025]結(jié)果1:在等待時間內(nèi),消息水位到達(dá)當(dāng)前生產(chǎn)的消息位置,所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在當(dāng)前生產(chǎn)的消息位置及之前的消息狀態(tài)設(shè)置為“成功”;
[0026]結(jié)果2:在等待時間內(nèi),消息水位未到達(dá)當(dāng)前生產(chǎn)的消息位置,所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在消息水位及之前的消息狀態(tài)設(shè)置為“成功”,當(dāng)前中心結(jié)點處在消息水位之后的消息狀態(tài)仍為“處理中”。
[0027]本發(fā)明的有益效果,其顯著優(yōu)點為:
[0028](I)判斷是否為重試消息、判斷消息狀態(tài)及其處理結(jié)點以及當(dāng)前中心結(jié)點切換時所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)清除處在消息水位之后的數(shù)據(jù),保證當(dāng)網(wǎng)絡(luò)故障或中心結(jié)點切換等情況發(fā)生時,不會生產(chǎn)重復(fù)消息;
[0029](2)當(dāng)前中心結(jié)點存儲消息成功時設(shè)置此消息狀態(tài)為“處理中”、消息水位的記錄以及將所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在消息水位及之前的消息狀態(tài)設(shè)置為“成功”,保證所有結(jié)點處在消息水位及之前的數(shù)據(jù)一致性,使得當(dāng)網(wǎng)絡(luò)故障或中心結(jié)點切換等情況發(fā)生時,不會丟失消息。
【附圖說明】
[0030]圖1為本發(fā)明實施例1生產(chǎn)消息前當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲示意圖。
[0031]圖2為本發(fā)明實施例生產(chǎn)消息的流程圖。
[0032]圖3為本發(fā)明實施例生產(chǎn)消息后當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲示意圖。
[0033]圖4為本發(fā)明實施例切換當(dāng)前中心結(jié)點后所有結(jié)點消息存儲示意圖,亦作為本發(fā)明實施例2生產(chǎn)消息前當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲示意圖。
【具體實施方式】
[0034]為了使本發(fā)明的目的、技術(shù)方案和優(yōu)點更加清楚,下面結(jié)合附圖和具體實施例對本發(fā)明進(jìn)行詳細(xì)描述。
[0035]如圖1所示,為本發(fā)明實施例1生產(chǎn)消息前當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲示意圖。消息存儲時有一個中心結(jié)點和兩個副本結(jié)點,本實施例1假設(shè)消息生產(chǎn)者已生產(chǎn)消息5,給出生產(chǎn)消息者生產(chǎn)消息6前當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲的兩種情形:上方A情形示出當(dāng)前消息水位到達(dá)消息4(消息水位即所有副本結(jié)點共同到達(dá)的消息位置),其中當(dāng)前中心結(jié)點處在消息水位之后的消息狀態(tài)為“處理中”,即當(dāng)前中心結(jié)點消息5的消息狀態(tài)為“處理中”,當(dāng)前中心結(jié)點和副本結(jié)點2已存儲的消息5對消息消費者不可見;下方B情形示出當(dāng)前消息水位到達(dá)消息5。兩種情形均滿足所有結(jié)點(包括當(dāng)前中心結(jié)點和所有副本結(jié)點)處在消息水位及之前的消息狀態(tài)為“成功”,已“成功”生產(chǎn)的消息才對消費者可見。
[0036]如圖2所示,為本發(fā)明實施例生產(chǎn)消息的流程圖。本發(fā)明實施例1生產(chǎn)消息前當(dāng)前中心結(jié)點與所有副本結(jié)點消息存儲示意圖如圖1所示,此流程圖對于圖1的A、B兩種情形均適用。本實施例1假設(shè)生產(chǎn)者生產(chǎn)消息6。
[0037]當(dāng)前中心結(jié)點存儲消息進(jìn)程,包括以下步驟:
[0038]步驟201:當(dāng)前中心結(jié)點接收消息生產(chǎn)者生產(chǎn)的消息,判斷其是否為重試消息,如為重試消息,進(jìn)入步驟202,否則進(jìn)入步驟203 ;本實施例1消息6不為重試消息。
[0039]步驟202:當(dāng)前中心結(jié)點在數(shù)據(jù)庫中查詢并獲取重試消息狀態(tài)及其處理結(jié)點,如其狀態(tài)為“成功”或其狀態(tài)為“處理中”且其處理結(jié)點為當(dāng)前中心結(jié)點,則返回相應(yīng)的響應(yīng)給消息生產(chǎn)者,結(jié)束當(dāng)前生產(chǎn)消息進(jìn)程,如其狀態(tài)為“失敗”或其狀態(tài)為“處理中”且其處理結(jié)點非當(dāng)前中心結(jié)點,則進(jìn)入步驟203。
[0040]步驟203:當(dāng)前中心結(jié)點存儲此消息,若存儲失敗,設(shè)置此消息狀態(tài)為“失敗”并將消息狀態(tài)及其處理結(jié)點保存到數(shù)據(jù)庫中,返回失敗響應(yīng)給消息生產(chǎn)者,結(jié)束當(dāng)前生產(chǎn)消息進(jìn)程,如存儲成功,設(shè)置此消息狀態(tài)為“處理中”并將消息狀態(tài)及其處理結(jié)點保存到數(shù)
當(dāng)前第1頁1 2 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1