1. 程式人生 > >Apache kafka簡介

Apache kafka簡介

第一個挑戰是如何收集大量的資料,第二個挑戰是分析收集的資料。為了克服這些挑戰,你必須需要一個訊息系統。

kafka專門分散式高吞吐量系統而設計。kafka往往工作的很好,作為一個更傳統的訊息代理的替代品。與其他訊息傳遞系統相比,kafka具有更好的吞吐量,內建分割槽,複製和固有的容錯能力,這使的它非常適合大規模訊息處理應用程式。

2.什麼是訊息系統?

訊息系統負責將資料從一個應用程式傳輸到另一個應用程式,因此應用程式可以專注於資料,但不擔心如何共享它。分散式訊息傳遞基於可靠訊息佇列的概念。訊息在客戶端應用程式和訊息傳遞系統之間非同步排隊。有兩種型別的訊息模式可用-- 一種是點對點,另一種是釋出-- 訂閱(pub -sub)訊息系統。大多數訊息模式遵循pub-sub。

3.點對點訊息系統

在點對點系統中,訊息被保留在佇列中。一個或多個消費者可以消耗佇列中的訊息,但是特定訊息只能由最多一個消費者消費。一旦消費者讀取佇列中的訊息,它就從該佇列中消失,該系統的典型示例是訂單處理系統,其中每個訂單將由一個訂單處理器處理,但多個訂單處理器也可以同時工作,下圖描述了結構。

                                    

釋出---訂閱者訊息系統

在釋出---訂閱系統中,訊息被保留在主題中。與點對點系統不同,消費者可以訂閱一個或多個主題中的所有訊息。在釋出--訂閱系統中,訊息生產者稱為釋出者,訊息使用者稱為訂閱者。一個現實生活的例子是Dish電視,它釋出不同的渠道,如遠動,電影,音樂等,任何人都可以訂閱自己的頻道集,並獲得他們訂閱的頻道時可用。

 

       

4. 什麼是kafka?

Apache kafka是一個分散式釋出---訂閱訊息系統和一個強大的佇列,可以處理大量的資料,並使能夠將訊息從一個端點傳遞到另一個端點。kafka適合離線和線上訊息消費。kafka訊息保留在磁碟上,並在叢集內複製以防止資料丟失。kafka構建在Zookeeper同步服務之上。它與Apache storm和Spark非常好的整合,用於實時流式資料分析。

好處

1.可靠性---kafka是分散式,分割槽,複製和容錯的。

2.可擴充套件性---kafka訊息傳遞系統輕鬆縮放,無需停機。

3. 耐用性:kafka使用分散式提交日誌,這意味著訊息會盡可能快的保留在磁碟上,因此他是持久的。

4. 效能  : kafka對於釋出和訂閱訊息都具有高吞吐量,即使儲存了許多TB的訊息,它也儲存穩定的效能。

kafka 非常快,並保證零停機和零資料丟失。

指標 ---kafka通常用於操作監控資料,這涉及聚合來自分散式應用程式的統計資訊,以產生操作資料的集中饋送。

日誌聚合解決方案 ---kafka 可用於跨組織從多個服務收集日誌,並使它們以標準格式提供給多個伺服器。

流處理---流行的框架(如Storm 和Spark Streaming)從主題中讀取資料,對其進行處理,並將處理後的資料寫入新主題,供使用者和喲、應用程式使用。kafka的強耐久性在流處理的上下文中也非常有用。

需要Kafka

kafka是一個統一的平臺,用於處理所有實時資料Feed。Kafka支援低延遲訊息傳遞,並在出現機器故障時提供對容錯的保證。它具有處理大量不同消費者的能力。kafka非常快,執行2百萬寫/秒。kafka將所有資料儲存到磁碟,這實質上意味著所有寫入都會進入作業系統(RAM)頁面快取,這使得將資料從頁面快取傳輸到網路套接字非常有效。

Apache kafka---基礎

在深入學習Kafka之前,您必須瞭解主題,經紀人,生產者和消費者等主要術語。 下圖說明了主要術語,表格詳細描述了圖表元件

                    

元件和說明

1. topic (主題) 屬於特定類別的訊息流稱為主題。資料儲存在主題中。主題被拆分成分割槽,對於每個主題,kafka儲存一個分割槽的迷你媽媽,每個這樣的分割槽包含不同變有序序列的訊息。分割槽被實現為具有相等大小的一組分段檔案。

2.partition(分割槽) 主題可能有許多分割槽,因此他可以處理任意數量的資料。

3. Partition offset(分割槽偏移) 每個分割槽訊息具有稱為offset的唯一序列標識。

4. Replicas of partition(分割槽備份) 副本只是一個分割槽的備份。副本從不讀取或寫入資料。他們用於防止資料丟失。

5. Brokers(經紀人)  代理是負責維護髮布資料的簡單系統。每個代理可以代理每個主題具有零個或多個分割槽。假設,如果在一個主題和N個代理中有N個分割槽,每個代理將有一個分割槽。

 

(分割槽少,代理多)假設在一個主題中有N個分割槽並且多於N個代理(n+m),則第一個N代理將有一個分割槽。

*(分割槽少,代理多)假設在一個主題中有N個分割槽並且多於N個代理(n+m),則第一個N代理將具有一個分割槽,並且下一個M代理將不具有用於該特定主題的任何分割槽。

(分割槽多,代理少)假設在一個主題中有N個分割槽並且小於N個代理(n-m),每個代理將在他們之間具有一個或多個分割槽共享。由於帶六之間的負載分佈不相等,不推薦使用此方案。

6. kafka Cluster(kafka叢集)

kafka 有多個代理被稱為kafka叢集。可以擴充套件kafka叢集,無需停機。這些叢集用於管理訊息資料的永續性和複製。

7.Producer(生產者)

生產者是傳送給一個或多個kafka主題的訊息的釋出者。生產者向kafka經紀人傳送資料。每當生產者將資訊釋出給代理時,代理只需要將訊息附加到最後一個段檔案。實際上,該訊息將附加到分割槽。生產者還可以向他們選擇的分割槽傳送訊息。

8.Consumers(消費者)

ConSumers從經紀人處讀取資料。消費者訂閱一個或多個主題,並通過從代理中提取資料來使用已釋出的訊息。

9. Leader(領導者)

Leader是負責給定分割槽的所有讀取和寫入的節點。每個分割槽都有一個伺服器充當Leader.

10. Follower (追隨者)

跟隨領導者指令的節點被稱為Follower。如果領導失敗,一個追隨者將自動成為新的領導者。跟隨者作為正常消費者,拉取訊息並更新其自己的資料儲存。