本發(fā)明涉及大數(shù)據(jù)處理和實時計算的技術(shù)領(lǐng)域,尤其涉及一種基于kafka的處理消息的方法。
背景技術(shù):
中國專利申請(申請?zhí)枺篊N201510099439.9)公開了一種基于kafka的消息處理系統(tǒng)及處理方法?,F(xiàn)有基于消息隊列kafka的生產(chǎn)者和消費者應(yīng)用中,上游生產(chǎn)者應(yīng)用生成消息并發(fā)送到kafka,下游消費者應(yīng)用根據(jù)上游生產(chǎn)者應(yīng)用事先定好的消息格式消費kafka中的消息,上游消息模式變更的時候,必須通知下游消費者應(yīng)用,開發(fā)人員對消費者應(yīng)用做代碼調(diào)整和二次開發(fā)以適應(yīng)上游新的消息模式。
但是,現(xiàn)有基于消息隊列kafka的生產(chǎn)者和消費者應(yīng)用中,下游消息消費者應(yīng)用嚴重依賴于上游生產(chǎn)者應(yīng)用生成的消息以及消息模式,當(dāng)個上游應(yīng)用由于需求變更,或者其他原因?qū)е律傻南⒛J桨l(fā)生變化,如果沒有通知到下游應(yīng)用時,會導(dǎo)致下游消費者應(yīng)用拋出異常。即使上游生產(chǎn)者生成的消息模式變更通知到了下游,下游的開發(fā)人員也需要對應(yīng)用做代碼調(diào)整和二次開發(fā)以適應(yīng)上游新的消息模式。
技術(shù)實現(xiàn)要素:
為克服現(xiàn)有技術(shù)的缺陷,本發(fā)明要解決的技術(shù)問題是提供了一種基于kafka的處理消息的方法,其在上游生產(chǎn)者發(fā)往消息隊列kafka中的消息在模式上有變動的情況下,下游消費者應(yīng)用能夠自動識別新消息的消息模式,并能根據(jù)不同消息的消息模式自動使用相應(yīng)的解析方法解析消息,這樣避免了由于上游消息模式變更導(dǎo)致下游應(yīng)用異常的情況。
本發(fā)明的技術(shù)方案是:這種基于kafka的處理消息的方法,模式信息作為消息頭信息的一部分隨消息一起發(fā)送,在消息傳輸時使用Apache Avro為消息傳輸格式。
還提供了另一種基于kafka的處理消息的方法,通過消息模式注冊服務(wù)來實現(xiàn)消息模式變更通知,對于上游生產(chǎn)者應(yīng)用生成的消息在發(fā)往kafka之前先到模式注冊服務(wù)Schema Registrar注冊并生成對應(yīng)的模式編號,而隨消息一起傳遞的是從模式注冊服務(wù)獲取到的該消息模式對應(yīng)的編號,當(dāng)下游消費者應(yīng)用通過kafka獲取到消息時,首先解析消息元數(shù)據(jù)信息,拿到消息模式編號,如果應(yīng)用內(nèi)存中有模式編號對應(yīng)的模式信息,則根據(jù)模式信息解析消息,如果內(nèi)存中沒有模式編號對應(yīng)的模式信息,則應(yīng)用發(fā)起請求根據(jù)模式編號從模式注冊服務(wù)Schema Registrar中獲取模式信息,然后根據(jù)模式信息解析消息,并緩存該模式信息。
本發(fā)明通過模式信息作為消息頭信息的一部分隨消息一起發(fā)送,在消息傳輸時使用Apache Avro為消息傳輸格式,或者消息模式通過模式注冊服務(wù)來實現(xiàn)消息模式變更通知,從而在上游生產(chǎn)者發(fā)往消息隊列kafka中的消息在模式上有變動的情況下,下游消費者應(yīng)用能夠自動識別新消息的消息模式,并能根據(jù)不同消息的消息模式自動使用相應(yīng)的解析方法解析消息,這樣避免了由于上游消息模式變更導(dǎo)致下游應(yīng)用異常的情況。
附圖說明
圖1所示為根據(jù)本發(fā)明的基于kafka的處理消息的方法的一個實施例的流程圖。
圖2所示為根據(jù)本發(fā)明的基于kafka的處理消息的方法的另一個實施例的流程圖。
具體實施方式
這種基于kafka(kafka是一種高吞吐量的分布式發(fā)布訂閱消息系統(tǒng),它可以處理消費者規(guī)模的網(wǎng)站中的所有動作流數(shù)據(jù)。這種動作(網(wǎng)頁瀏覽,搜索和其他用戶的行動)是在現(xiàn)代網(wǎng)絡(luò)上的許多社會功能的一個關(guān)鍵因素。這些數(shù)據(jù)通常是由于吞吐量的要求而通過處理日志和日志聚合來解決。對于像Hadoop的一樣的日志數(shù)據(jù)和離線分析系統(tǒng),但又要求實時處理的限制,這是一個可行的解決方案。kafka的目的是通過Hadoop的并行加載機制來統(tǒng)一線上和離線的消息處理,也是為了通過集群機來提供實時的消費。)的處理消息的方法,模式信息作為消息頭信息的一部分隨消息一起發(fā)送,在消息傳輸時使用Apache Avro為消息傳輸格式。
模式信息作為消息頭信息的一部分隨消息一起發(fā)送,這種方式可以確保每一條生產(chǎn)者生成的消息都帶有消息模式隨消息一起被發(fā)送到消息隊列kafka,下游消費者應(yīng)用在從kafka獲取到消息時,同時也獲取到了消息的模式信息,通過模式信息,下游應(yīng)用就可以正確的解析消息,及時上游生產(chǎn)者生成的消息模式發(fā)生變化,下游消費者也能根據(jù)變化后的消息模式解析消息信息,確保了每一條消息都能夠被正確的解析。為了實現(xiàn)這種方法,在消息傳輸時可以使用Apache Avro為消息傳輸格式,Apache Avro是一個數(shù)據(jù)序列化系統(tǒng),有著諸多優(yōu)良特性。Avro是一種非常節(jié)約空間的二進制序列化格式,Python等動態(tài)語言對它支持非常好,而且不需要生成代碼。最重要的特性是它支持模式演進,這意味著在版本兼容的前提下,寫程序和讀程序可以用不同版本的模式來各自生產(chǎn)和消費數(shù)據(jù)。這就非常完美地把生產(chǎn)者和消費者解耦開了,生產(chǎn)者可以按需要迭代演進數(shù)據(jù)的模式,而不需要消費者亦步亦趨地跟著改變。
所有用Avro編碼的消息都已經(jīng)用有模式定義的消息頭封裝起來了,消息頭包括消息UUID、加密細節(jié)、時間戳、消息編碼所使用的模式信息等。這樣下游消費者程序就可以動態(tài)地在解碼時再獲取模式并解析消息。
因此,通過該方法,在上游生產(chǎn)者發(fā)往消息隊列kafka中的消息在模式上有變動的情況下,下游消費者應(yīng)用能夠自動識別新消息的消息模式,并能根據(jù)不同消息的消息模式自動使用相應(yīng)的解析方法解析消息,這樣避免了由于上游消息模式變更導(dǎo)致下游應(yīng)用異常的情況。
另外,如圖1所示,該方法包括以下步驟:
(1)生產(chǎn)者應(yīng)用生成帶消息模式的消息;
(2)消息隊列kafka存儲帶消息模式的消息;
(3)消費者應(yīng)用從kafka中獲取帶消息模式的消息并消費消息。
另外,該方法還包括步驟(4),如果生產(chǎn)者應(yīng)用生成的消息對應(yīng)的消息模式發(fā)生變更,消費者應(yīng)用直接根據(jù)消息頭獲取到變更后的消息模式,并根據(jù)消息模式解析變更模式之后的消息。
另外,所述步驟(1)中,消息模式封裝到消息頭里面,消息頭還包括消息UUID、加密細節(jié)、時間戳。
另外,所述步驟(2)中,kafka中存儲的消息是帶消息模式的消息。
另外,所述步驟(3)中,消費者應(yīng)用從kafka中獲取帶消息模式的信息,先從消息頭里面拿到消息模式,然后通過消息模式解析消息內(nèi)容。
還提供了另一種基于kafka的處理消息的方法,通過消息模式注冊服務(wù)來實現(xiàn)消息模式變更通知,對于上游生產(chǎn)者應(yīng)用生成的消息在發(fā)往kafka之前先到模式注冊服務(wù)Schema Registrar注冊并生成對應(yīng)的模式編號,而隨消息一起傳遞的是從模式注冊服務(wù)獲取到的該消息模式對應(yīng)的編號,當(dāng)下游消費者應(yīng)用通過kafka獲取到消息時,首先解析消息元數(shù)據(jù)信息,拿到消息模式編號,如果應(yīng)用內(nèi)存中有模式編號對應(yīng)的模式信息,則根據(jù)模式信息解析消息,如果內(nèi)存中沒有模式編號對應(yīng)的模式信息,則應(yīng)用發(fā)起請求根據(jù)模式編號從模式注冊服務(wù)Schema Registrar中獲取模式信息,然后根據(jù)模式信息解析消息,并緩存該模式信息。
因此,通過該方法,在上游生產(chǎn)者發(fā)往消息隊列kafka中的消息在模式上有變動的情況下,下游消費者應(yīng)用能夠自動識別新消息的消息模式,并能根據(jù)不同消息的消息模式自動使用相應(yīng)的解析方法解析消息,這樣避免了由于上游消息模式變更導(dǎo)致下游應(yīng)用異常的情況。
另外,如圖2所示,該方法包括以下步驟:
(a)生產(chǎn)者應(yīng)用生成消息并注冊消息模式;
(b)消息隊列kafka存儲帶消息模式編號的消息;
(c)消費者應(yīng)用從kafka中獲取帶消息模式編號的信息并消費消息。
另外,該方法還包括步驟(d),如果生產(chǎn)者應(yīng)用生成的消息對應(yīng)的消息模式發(fā)生變更,則重新到消息模式注冊服務(wù)Schema Registrar注冊,消費者應(yīng)用獲取到消息新的模式編號,通過模式編號獲取到信息的模式信息,通過新的模式信息解析消息內(nèi)容。
另外,所述步驟(a)中,生產(chǎn)者應(yīng)用生成帶消息,并將消息模式注冊到消息模式注冊服務(wù)Schema Registrar,由模式注冊服務(wù)生成一個消息模式對應(yīng)的模式編號,并將這個模式編號封裝到消息頭里面,消息頭還包括消息UUID、加密細節(jié)、時間戳,消息傳輸格式使用Avro。
本發(fā)明的有益效果如下:
1、消息消費者應(yīng)用可以自動識別消息模式的變更,并能正確解析消息。
2、生產(chǎn)者應(yīng)用生成的消息模式變更能夠自動的傳遞到下游消費者應(yīng)用。
3、消息模式的變更可以采用消息頭和消息模式注冊服務(wù)(Schema Registrar)傳遞。
以上所述,僅是本發(fā)明的較佳實施例,并非對本發(fā)明作任何形式上的限制,凡是依據(jù)本發(fā)明的技術(shù)實質(zhì)對以上實施例所作的任何簡單修改、等同變化與修飾,均仍屬本發(fā)明技術(shù)方案的保護范圍。