第1章 Kafka概述

2022-06-28 02:45:13 字數 3556 閱讀 3697

(一對一,消費者主動拉取資料,訊息收到後訊息清除):點對點模型通常是乙個基於拉取或者輪詢的訊息傳送模型,這種模型從佇列中請求資訊,而不是將訊息推送到客戶端。這個模型的特點是傳送到佇列的訊息被乙個且只有乙個接收者接收處理,即使有多個訊息監聽者也是如此。(這種方式缺點是需要有乙個執行緒實時監聽訊息佇列,訊息的推送速度由客戶端控制)

(一對多,資料生產後,推送給所有訂閱者)發布訂閱模型則是乙個基於推送的訊息傳送模型。發布訂閱模型可以有多種不同的訂閱者,臨時訂閱者只在主動監聽主題時才接收訊息,而持久訂閱者則監聽主題的所有訊息,即使當前訂閱者不可用,處於離線狀態。(感知不到消費者的接收速度,可能造成消費者的資源浪費)

1、佇列主動推送:各個消費者的接受速度不一致,容易導致資源浪費。

2、消費者主動拉取資料(kafka):消費者的消費速度由自己決定,缺點是:消費者需要長輪詢去監控新訊息的產生。長時間沒有新訊息時,浪費資源

1、解耦

允許你獨立的擴充套件或修改兩邊的處理過程,只要確保它們遵守同樣的介面約束。

2、冗餘(儲存資料)

訊息佇列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丟失風險。許多訊息佇列所採用的"插入-獲取-刪除"正規化中,在把乙個訊息從佇列中刪除之前,需要你的處理系統明確的指出該訊息已經被處理完畢,從而確保你的資料被安全的儲存直到你使用完畢。

3、擴充套件性(集群)

因為訊息佇列解耦了你的處理過程,所以增大訊息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。

4、靈活性&峰值處理能力(集群使得處理資料能力提公升)

在訪問量劇增的情況下,應用仍然需要繼續發揮作用,但是這樣的突發流量並不常見。如果為以能處理這類峰值訪問為標準來投入資源隨時待命無疑是巨大的浪費。使用訊息佇列能夠使關鍵元件頂住突發的訪問壓力,而不會因為突發的超負荷的請求而完全崩潰。

5、可恢復性(資料可備份,丟失可恢復)

系統的一部分元件失效時,不會影響到整個系統。訊息佇列降低了程序間的耦合度,所以即使乙個處理訊息的程序掛掉,加入佇列中的訊息仍然可以在系統恢復後被處理。

6、順序保證(佇列資料有序)

在大多使用場景下,資料處理的順序都很重要。大部分訊息佇列本來就是排序的,並且能保證資料會按照特定的順序來處理。(kafka保證乙個partition內的訊息的有序性)

7、緩衝

有助於控制和優化資料流經過系統的速度,解決生產訊息和消費訊息的處理速度不一致的情況。更多的是解決生產速度大於消費速度。

8、非同步通訊

很多時候,使用者不想也不需要立即處理訊息。訊息佇列提供了非同步處理機制,允許使用者把乙個訊息放入佇列,但並不立即處理它。想向佇列中放入多少訊息就放多少,然後在需要的時候再去處理它們。

kafka 是乙個分布式的基於發布/訂閱模式訊息佇列(message queue),主要應用於大資料實時處理領域,由scala寫成。kafka對訊息儲存時根據topic進行歸類。

kafka詳細架構圖

同乙個消費者組的消費者不能同時消費同乙個分割槽。訊息生產者,就是向kafka broker發訊息的客戶端;

producer

訊息生產者,就是向kafka broker發訊息的客戶端;

consumer

息消費者,向kafka broker取訊息的客戶端;

topic

可以理解為乙個佇列;每個topic(如果很大)可以分很多個分割槽來儲存,每個分割槽又可以有多個副本(leader/follower:生產者和消費者只和leader互動,不和follower互動。)

consumer group (cg)

這是kafka用來實現乙個topic訊息的廣播(發給所有的consumer)和單播(發給任意乙個consumer)的手段。乙個topic可以有多個cgtopic的訊息會複製(不是真的複製,是概念上的)到所有的cg,但每個partion只會把訊息發給該cg中的乙個consumer。如果需要實現廣播,只要每個consumer有乙個獨立的cg就可以了。要實現單播只要所有的consumer在同乙個cg。用cg還可以將consumer進行自由的分組而不需要多次傳送訊息到不同的topic;

broker

一台kafka伺服器就是乙個broker。乙個集群由多個broker組成。乙個broker可以容納多個topic;

partition(分割槽)

為了實現擴充套件性,乙個非常大的topic可以分布到多個broker(即伺服器)上乙個topic可以分為多個partition每個partition是乙個有序的隊。partition中的每條訊息都會被分配乙個有序的id(offset)。kafka只保證按乙個partition中的順序將訊息發給consumer,不保證乙個topic的整體(多個partition間)的順序;提高負載能力,和併發度。

offset

資料檔案的名稱。kafka的儲存檔案都是按照offset.kafka來命名,用offset做名字的好處是方便查詢。例如你想找位於2049的位置,只要找到2048.kafka的檔案即可。第乙個offset是00000000000.kafka。

replication

副本(follower/leader都是副本)

第1章 概述

tcp ip協議族分為四層 鏈路層 網路層 運輸層和應用層,每一層各有不同的責任。在tcp ip中,網路層和運輸層之間的區別是最為關鍵的 網路層 i p 提供點到點的服務,而運輸層 tcp和udp 提供端到端的服務。乙個網際網路是網路的網路。構造網際網路的共同基石是路由器,它們在 i p層把網路連在...

第1章 概述

j a ee j2ee j a企業版或j a企業平台,可以構建企業級的服務應用。j a ee平台包含了j a se平台,並增加了附加類庫,以便支援目錄管理 交易管理和企業級訊息處理等功能。j a me j2me j a微型版或j a小型平台。j a me是一種很小的j a執行環境,用於嵌入式的消費產...

第1章 語言概述

1.1 c語言的發展簡史和特點 1.2 語言程式的結構與書寫規則 1.3 c語言的語句和關鍵字 1.4 turbo c v2.0的基本操作 1.1 c語言的發展簡史和特點 1 語言的誕生與發展 1 在c語言誕生以前,系統軟體主要是用組合語言編寫的。由於組合語言程式依賴於計算機硬體,其可讀性和可移植性...