《Apache Kafka》學習筆記

2021-07-11 16:15:34 字數 3627 閱讀 5198

1.什麼是kafka

kafka是乙個高通過率分布式訊息系統

2.訊息佇列(message queue)mq的模型

訊息佇列的簡單架構圖

3個核心概念:

message queue

訊息佇列:訊息排隊,訊息就是資料。通過訊息模型可以完成乙個系統和另乙個系統的互動,系統的通訊也就是系統與系統的呼叫。

訊息佇列容易和soa混淆

soa系統是直接的呼叫,通過**對另個系統呼叫,也叫rpc的解決方案。

作為訊息的架構和作為soa的rpc最大的區別:不是直接的呼叫關係,訊息作為異構系統的整合是通過訊息的傳遞完成彼此之間的互動解耦合,彼此之間協調的處理。

訊息佇列的好處:1.解耦合  沒有系統的侵入性 2.提高系統的響應時間 

比如訂單支付本來是需要完成123,這樣會響應等待時間較長。

訂單支付成功的方法()

改進 :把使用者最需要得到的響應操作放在訂單支付成功的方法()中

訂單支付成功的方法()

另外2個非主要功能可以借用訊息系統傳送到訊息佇列中,由消費者來消費。

2、計算會員積分

3、通知物流進行配送

3.訊息佇列的分類

兩種:點對點和發布訂閱

點對點問題:

1.如果訊息被某個系統消費,但是其他系統就不能再消費

2.為了效能的提高我們還是希望有多點來消費,因為只能有乙個消費者,所以這樣就無法實現。

所以點對點用的很少。

kafka也屬於發布訂閱。

4.其他常見訊息佇列

rabbitmq:支援的協議多,非常重量級訊息佇列,對路由(routing),負載均衡(load balance)或者資料持久化都有很好的支援。

負載和路由:系統設計中,訊息佇列也許是要集群,集群就會訊息在生產之後往哪個集群中的節點去傳送資料。

持久化:有些訊息佇列可以檔案等形式儲存訊息,目的是以防意外訊息丟失。保證訊息安全,但是由於其有io所以效能有損失。

zeromq:號稱最快的訊息佇列系統,尤其針對大吞吐量的需求場景,擅長的高階/複雜的佇列,但是技術也複雜,並且只提供非永續性的佇列。

不支援持久化。

activemq:很早出現了,apache下的乙個子項,類似zeromq,能夠以**人和點對點的技術實現佇列 。jms的乙個實現者。ejb可以對其訪問。

redis:本質上不是訊息佇列而是乙個key-value的nosql資料庫,但也支援mq功能,資料量較小效能優於rabbitmq,資料超過10k就很慢,10k之內效率在上面三者之上。

5.kafka簡介

kafka是伴隨大資料產生的,只要處理大資料,主要是記憶體計算,實時計算。kafka作為乙個非常重要的緩衝者完成記憶體計算或者實時計算的資料支援。

kafka 是分布式發布-訂閱訊息系統,linkedin開源,scala語言編寫。

kafka 是分布式發布-訂閱訊息系統。是乙個分布式的,可劃分的(對訊息進行分割槽),多訂閱者,冗餘備份的永續性的日誌服務(訊息從生產者傳送到kafka之後會存到其日誌中)。它主要用於處理活躍的流式資料(幾分鐘左右,區別有mapreduce的幾個小時)。

6.kafka的特點

1.同時為發布和訂閱提供高吞吐量。據了解,kafka 每秒可以生產約 25 萬訊息(50 mb),每秒處理 55 萬訊息(110 mb)

2.可進行持久化操作。將訊息持久化到磁碟,因此可用於批量消費,例如 etl,以及實時應用程式。通過將資料持久化到硬碟以及 replication 防止資料丟失。

3.分布式系統,易於向外擴充套件。所有的 producer、broker(對於mq的表達,訊息伺服器叫broker) 和 consumer 都會有多個,均為分布式的。無需停機即可擴充套件機器。擴充套件需要依賴於zookeeper做節點負載均衡和master節點擊舉。

4.訊息被處理的狀態是在consumer 端維護,而不是由 server 端維護。當失敗時能自動平衡。

由哪個 consumer消費,消費了多少broker不管。broker只管存訊息,刪訊息,不維護訊息狀態,是無狀態服務。consumer需要zookeeper配合完成,訊息來了,需要 consumer 去watch到zookeeper中的變化,zookeeper會記錄消費的內容。

5.支援 online 和 offline 的場景。

7.效能測試

在虛擬機器上做的效能測試。

測試環境:cpu: 雙核   記憶體 :2gb   硬碟:60gb

結論訊息堆積壓力測試

單個kafka broker節點測試,啟動乙個kafka broker和producer,producer不斷向broker傳送資料,

直到broker堆積資料為18gb為止(停止producer執行)。啟動consumer,不間斷從broker獲取資料,

直到全部資料讀取完成為止,最後檢視producer==consumer資料,沒有出現卡死或broker不響應現象

資料大量堆積不會出現broker卡死

或不響應現象

生產者速率

1.200byte/msg,4w/s左右。2.1kb/msg,1w/s左右

效能上是完全滿足要求,其效能主要由磁碟決定

消費者速率

1.200byte/msg,4w/s左右。2.1kb/msg,1w/s左右

效能上是完全滿足要求,其效能主要由磁碟決定

參考:8.kafka的邏輯架構

produces生產訊息放到topic中,會有多個topic,訊息有分類,不同的訊息對應不同的topic。

Apache Kafka學習教程之基礎知識

深入卡夫卡之前,您必須了解主題 topics brokers 生產者 producers 和消費者 consumers 等主要術語。下圖說明了主要術語,詳細描述了圖表元件。在上圖中,主題被配置為三個分割槽。分割槽1具有兩個偏移因子0和1.分割槽2具有四個偏移因子0,1,2和3.分割槽3具有乙個偏移因...

Apache Kafka教程A系列 介紹

在大資料中,使用了大量的資料。關於資料,我們有兩個主要挑戰。第乙個挑戰是如何收集大量資料,第二個挑戰是分析收集的資料。為了克服這些挑戰,您必須使用訊息傳遞系統。卡夫卡專為分布式高吞吐量系統而設計。卡夫卡傾向於非常好地取代傳統的資訊 者。與其他訊息系統相比,kafka具有更好的吞吐量,內建分割槽,複製...

Apache Kafka系列之Kafka介紹

kafka是乙個分布式的 分割槽的 多複本的日誌提交服務。它通過一種獨一無二的設計提供了乙個訊息系統的功能。所有的這些意味著什麼?1 kafka維護按類區分的訊息,稱為主題 topic 2 生產者 producer 向kafka的主題發布訊息 3 消費者 consumer 向主題註冊,並且接收發布到...