Kafka學習筆記(一) 訊息佇列

2021-09-29 19:34:53 字數 2589 閱讀 5183

二、訊息佇列的應用場景

三、訊息佇列的缺點

四、訊息佇列的兩種模式

訊息(message)是指在應用之間傳送的資料,訊息可以非常簡單,比如只包含文字字串,也可以更複雜,可能包含嵌入物件。

訊息佇列(message queue)是一種應用間的通訊方式,訊息傳送後可以立即返回,有訊息系統來確保資訊的可靠專遞,訊息發布者只管把訊息發布到mq中而不管誰來取,訊息使用者只管從mq中取訊息而不管誰發布的,這樣發布者和使用者都不用知道對方的存在。

兩個應用系統或者模組之間資料的傳遞就叫做訊息傳遞,傳遞訊息時將資料快取在佇列中,這個專門用於快取訊息的佇列就叫做訊息佇列。

訊息佇列是全域性有序,先進先出。

非同步請求

客戶端發起請求

服務端響應接收請求,直接返回請求完成

快取所有使用者的請求,處理使用者的請求

訊息佇列在實際應用中包括如下四個場景:

應用耦合:多應用間通過訊息佇列對同一訊息進行處理,避免呼叫介面失敗導致整個過程失敗;

非同步處理:多應用對訊息佇列中同一訊息進行處理,應用間併發處理訊息,相比序列處理,減少處理時間;

限流削峰:廣泛應用於秒殺或搶購活動中,避免流量過大導致應用系統掛掉的情況;

訊息驅動的系統:系統分為訊息佇列、訊息生產者、訊息消費者,生產者負責產生訊息,消費者(可能有多個)負責對訊息進行處理;

具體場景:使用者使用qq相簿上傳一張,人臉識別系統會對該進行人臉識別,一般的做法是,伺服器接收到後,上傳系統立即呼叫人臉識別系統,呼叫完成後再返回成功,如下圖所示:

該方法有如下缺點:

人臉識別系統被調失敗,導致上傳失敗;

延遲高,需要人臉識別系統處理完成後,再返回給客戶端,即使使用者並不需要立即知道結果;

上傳系統與人臉識別系統之間互相呼叫,需要做耦合;

若使用訊息佇列:

客戶端上傳後,上傳系統將資訊如uin、批次寫入訊息佇列,直接返回成功;而人臉識別系統則定時從訊息佇列中取資料,完成對新增的識別。

此時上傳系統並不需要關心人臉識別系統是否對這些資訊的處理、以及何時對這些資訊進行處理。事實上,由於使用者並不需要立即知道人臉識別結果,人臉識別系統可以選擇不同的排程策略,按照閒時、忙時、正常時間,對佇列中的資訊進行處理。

具體場景:購物**開展秒殺活動,一般由於瞬時訪問量過大,伺服器接收過大,會導致流量暴增,相關系統無法處理請求甚至崩潰。而加入訊息佇列後,系統可以從訊息佇列中取資料,相當於訊息佇列做了一次緩衝。

該方法有如下優點:

請求先入訊息佇列,而不是由業務處理系統直接處理,做了一次緩衝,極大地減少了業務處理系統的壓力;

佇列長度可以做限制,事實上,秒殺時,**佇列的使用者無法秒殺到商品,這些請求可以直接被拋棄,返回活動已結束或商品已售完資訊;

具體場景:使用者新上傳了一批**, 人臉識別系統需要對這個使用者的所有**進行聚類,聚類完成後由對賬系統重新生成使用者的人臉索引(加快查詢)。這三個子系統間由訊息佇列連線起來,前乙個階段的處理結果放入佇列中,後乙個階段從佇列中獲取訊息繼續處理。

該方法有如下優點:

避免了直接呼叫下乙個系統導致當前系統失敗;

每個子系統對於訊息的處理方式可以更為靈活,可以選擇收到訊息時就處理,可以選擇定時處理,也可以劃分時間段按不同處理速度處理;

維護變得更加繁瑣:保證每一層資料傳輸的安全

問題:

訊息佇列包括兩種模式,點對點模式(point to point, queue)和發布/訂閱模式(publish/subscribe,topic)

點對點模式下包括三個角色:

訊息佇列

傳送者(生產者)

接收者(消費者)

訊息傳送者生產訊息傳送到queue中,然後訊息接收者從queue中取出並且消費訊息。訊息被消費以後,queue中不再有儲存,所以訊息接收者不可能消費到已經被消費的訊息。

點對點模式特點

發布/訂閱模式下包括三個角色:

角色主題(topic)

發布者(publisher)

訂閱者(subscriber)

發布者將訊息傳送到topic,系統將這些訊息傳遞給多個訂閱者。

發布/訂閱模式特點

訊息佇列 Kafka學習

kafka是乙個分布式的訊息佇列,學習見apache kafka文件,中文翻譯見kafka分享,乙個簡單的入門例子見kafka 入門例項。本文只針對自己感興趣的點記錄下。producer consumer 訊息的生成者和使用者。broker kafka server充當broker角色,起到訊息佇列...

訊息佇列 Kafka學習

kafka是乙個分布式的訊息佇列,學習見apache kafka文件,中文翻譯見kafka分享,乙個簡單的入門例子見kafka 入門例項。本文只針對自己感興趣的點記錄下。producer consumer 訊息的生成者和使用者。broker kafka server充當broker角色,起到訊息佇列...

訊息佇列 訊息佇列 kafka

kafka是乙個分布式的基於發布 訂閱模式的訊息佇列,主要用於大資料實時處理領域。要理解kafka首先要有分布式的概念,要有訊息佇列的概念。分布式系統最大的優勢就是解耦和削峰,這種情況下,a系統生成了乙個訊息,b系統非同步獲取,那麼就需要乙個存放訊息的訊息佇列 mq 相比較傳統的訊息佇列,訊息被消費...