一種分布式消息處理系統及其中的設備和方法
【技術領域】
[0001] 本發明涉及消息處理領域,具體涉及一種分布式消息處理系統及其中的設備和方 法。
【背景技術】
[0002] 目前用于消息(如日志)處理的消息系統有很多,比較流行的是分布式消息系統。 分布式消息系統的具體形式有很多,如Spread、Kafka等。
[0003] 下面僅以常用的一種分布式消息系統Kafka為例進行說明。
[0004] Kafka是用于日志處理的分布式消息系統,主要針對日志數據容量大,但對可靠性 要求不是很高的業務。這些系統中的日志數據主要包括用戶行為,例如,登錄、瀏覽、點擊、 分享以及喜歡等,還包括系統運行日志,例如,CPU(Central Processing Unit,中央處理 器)、內存、磁盤、網絡、系統及進程等的運行狀態。
[0005] 圖1為相關技術中Kafka系統架構示意圖。該Kafka系統包括以下四個角色: Producer(消息產生者,簡稱TO) 11、Broker(簡稱BK) 12、Consumer(消息處理者,簡稱 CS) 13以及Zooke印er(管理者,簡稱ZK) 14,每個角色都可以是多個。Consumer13在Kafka 系統中負責處理消息;Producer11在Kafka系統中負責產生消息;Broker12是Kafka系 統中用來存放消息的地方,負責接收Producer11發來的消息,當Consumer13有請求時, 將這些消息返回給Consumer13;ZooKeeper14是一個開放源碼的分布式應用程序協調服 務,包含一個簡單的原語集,是Hadoop和Hbase的重要組件,分布式應用可以使用它來實現 諸如:統一命名服務、配置管理、分布式鎖服務、集群管理等功能。Producerll發送消息到 Broker12,消息持久化存儲在Broker12上,Consumer13再從Broker12取得消息進行 處理。Zookeeper14 用來存儲Producer11,Consumer13,與Broker12 的一些狀態信息。
[0006] Kafka系統對消息的處理是采用pull(拉)的方式,每次由Consumer 13從Broker 12上獲取要處理的消息。成功處理的消息的位置Offset由Consumer 13來保存。
[0007] 在上述消息處理方式中,Consumer13需要自己對成功處理的消息的位置Offset 進行管理、保存,Offset-般保存在Consumer13所屬的消息處理設備的內存或者本地磁 盤上,當消息處理設備意外終止或者機器磁盤壞掉后,之前保存的Offset就丟失了。當重 新啟動消息處理設備后,將從最近一次保存的Offset、或者從頭開始消費,Consumer13無 法緊接上次成功處理的消息的位置繼續對消息進行處理。
【發明內容】
[0008] 鑒于上述問題,提出了本發明以便提供一種克服上述問題或者至少部分地解決上 述問題的分布式消息處理系統及其中的設備和方法。
[0009] 依據本發明的一個方面,提供了一種在分布式消息處理系統中的消息管理設備, 該分布式消息處理系統還包括一個或多個消息存儲設備和一個或多個消息處理設備,其中 每條消息具有相應的主題,消息存儲設備為相應主題建立一個或者多個存儲分區,并且根 據消息的主題將消息存儲在相應主題的存儲分區之一中,消息管理設備包括:消息分布狀 態存儲器,被配置為至少存儲每個消息存儲設備中有關存儲分區的信息、以及每個存儲分 區中有關消息處理設備當前要處理的消息的位置信息;傳輸接口,被配置為接收消息處理 設備發送的消息處理請求,消息處理請求至少包括所請求處理消息的主題;分區狀態查詢 器,被配置為在消息分布狀態存儲器中查詢與消息處理請求中的主題相對應的存儲分區信 息,并經由傳輸接口將所查詢到的存儲分區信息發送給相應消息處理設備;以及消息位置 管理器,被配置為處理通過傳輸接口接收的、來自消息處理設備的消息位置查詢請求,從消 息分布狀態存儲器中獲取與該消息位置查詢請求中的存儲分區相對應的存儲分區的當前 要處理消息的位置信息、并經由傳輸接口發送給相應消息處理設備;以及被配置為處理通 過傳輸接口接收的、來自消息處理設備的消息位置更新請求,基于消息位置更新請求中的 消息大小,更新消息分布狀態存儲器中、與消息位置更新請求中的存儲分區相對應的存儲 分區的當前要處理消息的位置信息。
[0010] 可選的,消息分布狀態存儲器中還存儲有消息處理設備每次所要處理的消息的大 小;分區狀態查詢器還被配置為在消息分布狀態存儲器中查詢相應消息處理設備所要處理 的消息的大小,并通過傳輸接口發送給相應消息處理設備。
[0011] 根據本發明的另一個方面,還提供了一種在分布式消息處理系統中的消息處理設 備,該分布式消息處理系統還包括一個或多個消息存儲設備和消息管理設備,其中每條消 息具有相應的主題,消息存儲設備為相應主題建立一個或者多個存儲分區,并且根據消息 的主題將消息存儲在相應主題的存儲分區之一中,消息管理設備中存儲有每個消息存儲設 備中有關存儲分區的信息以及每個存儲分區中當前要處理的消息的位置信息,該消息處理 設備包括:存儲信息獲取器,被配置為生成消息處理請求,消息處理請求至少包括所請求處 理消息的主題;傳輸接口,被配置為將消息處理請求發送給消息管理設備,并接收消息管理 設備發送的與消息處理請求中的主題相對應的一個或者多個存儲分區信息;消息位置管理 器,被配置為選擇存儲分區信息之一,從消息管理設備中獲取所選擇的存儲分區的當前要 處理消息的位置信息;以及消息獲取器,被配置為生成消息獲取請求,消息獲取請求包括所 請求處理消息的主題、所選擇的存儲分區、該存儲分區的當前要處理消息的位置信息和所 要處理的消息大小;傳輸接口還被配置為將消息獲取器生成的消息獲取請求發送給該存儲 分區所在的消息存儲設備,以及接收該存儲分區所在的消息存儲設備發送的對應于消息獲 取請求的消息。
[0012] 根據本發明的又一個方面,還提供了一種分布式消息處理系統,包括:如上的消息 管理設備;一個或者多個如上的消息處理設備;以及一個或多個消息存儲設備。
[0013] 根據本發明的再一個方面,還提供了一種消息管理方法,該方法適于在分布式消 息處理系統中的消息管理設備上執行,該分布式消息處理系統還包括一個或多個消息存儲 設備和一個或多個消息處理設備,其中每條消息具有相應的主題,消息存儲設備為相應主 題建立一個或者多個存儲分區,并且根據消息的主題將消息存儲在相應主題的存儲分區之 一中,消息管理方法包括:接收消息處理設備發送的消息處理請求,消息處理請求至少包括 所請求處理消息的主題;查詢與消息處理請求中的主題相對應的存儲分區信息,并將所查 詢到的存儲分區信息發送給相應消息處理設備,其中,消息管理設備中至少存儲每個消息 存儲設備中有關存儲分區的信息、以及每個存儲分區中有關消息處理設備當前要處理的消 息的位置信息;以及處理來自消息處理設備的消息位置查詢請求,查詢與該消息位置查詢 請求中的存儲分區相對應的存儲分區的當前要處理消息的位置信息、并發送給相應消息處 理設備;以及處理來自消息處理設備的消息位置更新請求,基于消息位置更新請求中的消 息大小,更新與消息位置更新請求中的存儲分區相對應的存儲分區的當前要處理消息的位 置信息。
[0014] 可選的,上述消息管理方法還包括:查詢相應消息處理設備所要處理的消息的大 小、并發送給相應消息處理設備,其中消息管理設備中還存儲有消息處理設備每次所要處 理的消息的大小。
[0015] 根據本發明的又一個方面,還提供了一種消息處理方法,該方法適于在分布式消 息處理系統中的一個或者多個消息處理設備上執行,該分布式消息處理系統還包括一個或 多個消息存儲設備和消息管理設備,其中每條消息具有相應的主題,消息存儲設備為相應 主題建立一個或者多個存儲分區,并且根據消息的主題將消息存儲在相應主題的存儲分區 之一中,消息管理設備中存儲有每個消息存儲設備中有關存儲分區的信息以及每個存儲分 區中當前要處理的消息的位置信息,該消息處理方法包括:生成消息處理請求,消息處理請 求至少包括所請求處理消息的主題;將消息處理請求發送給消息管理設備,并接收消息管 理設備發送的與消息處理請求中的主題相對應的一個或者多個存儲分區信息;選擇一個或 者多個存儲分區信息之一,從消息管理設備中獲取所選擇的存儲分區對應的當前要處理消 息的位置信息;生成消息獲取請求,消息獲取請求包括所請求處理消息的主題、所選擇的存 儲分區、該存儲分區的當前要處理消息的位置信息和所要處理的消息大小;以及將消息獲 取請求發送給該存儲分區所在的消息存儲設備,以及接收該存儲分區所在的消息存儲設備 發送的對應于消息獲取請求的消息。
[0016] 本發明的技術方案在消息管理設備上存儲有每個消息存儲設備中有關存儲分區 的信息、以及每個存儲分區中有關消息處理設備當前要處理的消息的位置信息,當消息處 理設備獲取要處理的消息時,只需從消息管理設備查詢消息處理設備處理的主題下的消息 在消息存儲設備上的存儲分區信息,以及消息處理設備在相應的存儲分區的當前要處理的 消息的位置信息,即可發送請求消息從消息存儲設備獲取消息進行處理,這樣,即使消息處 理設備發生故障,在消息處理設備恢復正常后,仍然可以緊接上次成功處理消息的位置獲 取消息進行處理,避免了消息的重復處理或遺漏。
[0017] 上述說明僅是本發明技術方案的概述,為了能夠更清楚了解本發明的技術手段, 而可依照說明書的內容予以實施,并且為了讓本發明的上述和其它目的、特征和優點能夠 更明顯易懂,以下特舉本發明的【具體實施方式】。
【附圖說明】
[0018] 通過閱讀下文優選實施方式的詳細描述,各種其他的優點和益處對于本領域普通 技術人員將變得清楚明了。附圖僅用于示出優選實施方式的目的,而并不認為是對本發明 的限制。而且在整個附圖中,用相同的參考符號表示相同的部件。在附圖中:
[0019] 圖1示出了一種Kafka系統架構示意圖;
[0020] 圖2示出了根據本發明一個實施例的分布式消息處理系統的示意圖;
[0021] 圖3示出了根據本發明一個實施例的消息存儲設備內部存儲結構的示意圖;
[0022] 圖4示出了根據本發明一個實施例的消息管理方法的流程圖;以及 [0023] 圖5示出了根據本發明一個實施例的消息處理方法的流程圖。
【具體實施方式】
[0024] 下面將參照附圖更詳細地描述本公開的示例性實施例。雖然附圖中顯示了本公開 的示例性實施例,然而應當理解,可以以各種形式實現本公開而不應被這里闡述的實施例 所限制。相反,提供這些實施例是為了能夠更透徹地理解本公開,并且能夠