當前位置:編程學習大全網 - 源碼下載 - 易於使用的設計源代碼

易於使用的設計源代碼

Apache Kafka(簡稱Kafka)最初是Linkedln開發的分布式消息系統,現在是Apache的子項目,Kafka社區也非常活躍,已經成為該領域使用最廣泛的消息系統。從版本上看,卡夫卡的口號從“壹個高吞吐量、分布式的消息系統”變成了“壹個分布式的流媒體平臺”。

關於卡夫卡,我準備從入門開始,直到實現它的底層邏輯原理和源代碼。建議妳耐心從頭讀起。我相信妳會有所收獲。

作為壹個流數據平臺,最重要的是具備以下特點。

消息系統:

消息系統也叫消息隊列)主要有兩種消息模型:隊列和發布訂閱。卡夫卡利用了壹個消費群體。當Kafka使用隊列模型時,它可以將處理平均分配給消費者組中的消費者成員。

下面我們將從不同角度分析卡夫卡的幾個基本概念,並試圖解決以下問題。

生產者將消息發布到fk集群後,消費者會使用兩種消息消費模型:push模型(pu)和pull模型(基於push模型的消息系統,其中消息代理記錄消費者的消費狀態,在將消息推送給消費者後,將消息標記為已消費。

但是,這種方法不能很好地保證消息的處理語義。例如,消息代理發送消息後,當消費進程掛斷或由於網絡原因未收到消息時,消息可能會丟失(因為消息代理已將消息標記為自己消費,但實際上並未對消息進行實際處理)。為了確保消息的處理語義,消息代理應該在發送消息後將狀態設置為“Sent”。只有在收到消費者的確認請求後才會更新為“已消費”,這就需要在消息代理中記錄所有消息的消費狀態,這也是不可取的。

Kafka中每個主題的多個分區日誌分布存儲在Kafka集群中。同時,為了容錯,每個分區將被復制到多個消息代理節點,其中壹個將是主副本,其節點將是備份副本(從副本,也稱為從副本)。

主副本將負責所有客戶端讀寫操作,備份副本僅同步主副本中的數據。當主拷貝IH現在出現故障時,備份拷貝中的拷貝將被選為新的主拷貝。因為每個分區中只有主副本接受讀寫,所以每臺服務器都會是部分分區的主副本和其他分區的備份副本,這樣Kafka集群中的所有服務器作為壹個整體對客戶端進行負載均衡。

消息系統通常由生產者“消費者”和消息代理人(經紀人)組成。生產者將消息寫入消息代理,消費者將從消息代理讀取消息。對於消息代理來說,生產者和消費者屬於客戶端:生產者和消費者會向服務器發送客戶端請求,服務器會分別存儲消息和獲取消息,最後服務器會向客戶端返回響應結果。

新的生產者應用程序使用af應用程序對象來表示生產者客戶端進程。生產者希望發送消息,而不是直接發送到服務端,而是首先將消息放入客戶端的隊列中,然後消息發送線程從隊列中發送消息。以salt形式向服務器Kafka發送消息的Reco dACCUl'lUlato負責緩存生產者客戶端生成的消息,發送線程(Sende)負責讀取聚合器的批量網絡並發送給服務器。為了保證客戶端網絡請求的快速響應,Kafka使用選擇器(選擇網絡連接讀寫,讓網絡連接(Netwo kCl i.ent)處理客戶端網絡請求。

將消息追加到記錄收集器時,它們按分區分組,並放入batches集合。每個分區的隊列保存要發送到對應於該分區的節點的記錄。客戶端的發送線程只能使用Sende線程疊加批處理的每個分區,獲取分區對應的主腳本節點,取出分區對應的列中的批處理記錄來發送消息。

消息發送線程有兩種方式直接根據分區發送消息,分區的目標節點重疊。假設有兩臺帶有分區的服務器,那麽每臺服務器都有壹個分區。消息發送線程遍歷批的每個抽頭,以將消息發送到分區的主副本節點,並且總是有請求。我會先把它們按照分區的主副本節點分組,屬於同壹個節點的所有分區都放在壹起,所以總是只有兩個請求,這樣可以大大減少網絡。

消息系統由生產者存儲系統和消費者組成。本章分析了生產者向服務器發送消息的過程。本章分析了消費者從服務器存儲系統中讀取生產者編寫的消息的過程。首先,我會了解壹些消費者的基本知識。

作為分布式消息系統,Kafka支持多個生產者和消費者,生產者可以將消息發布到集群中不同節點的不同分區。小菲還可以在壹個集群中的多個節點的多個分區上消費消息。編寫消息時,多個生成器可以讀取同壹分區中的消息。如果多個用戶同時讀取多個分區,為了保證日誌文件的不同數據分布到不同的用戶,需要采用鎖定同步等方法在分區級別控制日誌文件。

相反,如果約定“同壹個分區只能由壹個消費者處理”,則不需要鎖定同步,從而提高了消費者的處理能力,而且這並不違反消息的處理語義:原來需要多個消費者來處理,現在也可以交給壹個消費者來處理。3-給出了消息系統最簡單的部署方式。制作人的數據來源多樣,都是合著者。Kafka cluster處理消息時,有多個消費者共享任務,這些消費者的處理邏輯是相同的。

因為分區將被重新分配,並且分區的所有者將發生變化,所以在分區被重新分配之前,所有消費者將停止現有的撤銷過程。同時,在將分區分配給消費者時,所有者信息將記錄在ZK中,因此應首先刪除ZK上的節點數據。只有當與該分區相關的所有者拉線程被釋放時,才能分配該分區。

如果在重新分配分區之前沒有發布這些信息,那麽在重新平衡之後,同壹個分區可能被多個使用者擁有。例如,分區Pl最初由消費者所有。如果不釋放撤銷過程和ZK節點,那麽重新平衡後的分區Pl將分配給消費者,這樣消費者和消費者都將享受分區Pl,這顯然不符合fka中“壹個分區只能分配給壹個消費者”的限制。重新平衡操作的步驟如下。

如果協調器節點失敗,服務器將有自己的容錯機制來選擇壹個新的協調器部分來管理使用者組中的所有使用者。消費者客戶沒有權利做這項工作。它所能做的就是等待壹段時間,並詢問服務器是否已經選擇了新的協調器節點。如果消費者發現現在有壹個管理協調器的協調器節點,他將連接這個新的協調器部分。因為這個協調器節點是服務器新選擇的,所以每個消費者都應該重新連接協調器節點。

當壹個消費者重新加入壹個消費者組時,它將在被分配到壹個分區之前和之後對消費者的拉取工作產生影響。在發送“加入群組請求”之前,消費者應該停止拉取消息,而在接收到“加入群組響應”中的分區後,客戶端還可以在加入群組前後設置自定義的“消費者再平衡監聽器”,以便適當處理分區的變化。

  • 上一篇:關於Delphi的TMemo控件
  • 下一篇:高精度定位的技術有哪些?
  • copyright 2024編程學習大全網