kafka筆記

初識kafka

kafka(分佈式提交日誌、分佈式流平臺)是一個分佈式發佈-訂閱消息系統;強大的隊列。前端

能夠處理大量數據,並可以使消息從一個斷點傳遞另外一個斷點。redis

適合離線和在線消息消費。數據庫

kafka消息保留在磁盤上,並在羣集內複製,以防止數據丟失。數組

kafka構建在zk同服務之上。與Apache Storm和spark很是好的集成,用於實時流式數據分析。服務器

kafka的優勢:微信

性能(對於發佈和訂閱消息具備高吞吐量,即便TB消息,也能保證穩定的)、可靠性、耐用性(分佈式提交日誌,這保證了消息儘量快保留在磁盤上,所以是持久的)、可擴展性(Kafka消息傳遞系統輕鬆縮放,無需停機)。網絡

kafka數據處理步驟:異步

一、Producer產生消息,發送到Broker中分佈式

二、Leader狀態的Broker接收消息,寫入到相應topic中post

三、Leader狀態的Broker接收完畢之後,傳給Follow狀態的Broker做爲副本備份

四、Consumer消費Broker中的消息

發佈-訂閱

數據(消息)的發送者(發佈者)不會直接把消息發送給接收者,這是發佈與訂閱消息系統的一個特色。發佈者以某種方式對消息進行分類,接收者(訂閱者)訂閱它們。以便接收特定類型的消息。發佈與訂閱系統通常會有一個broker,也就是發佈消息的中心點。

  • 消息和批次

kafka的數據單元:消息

能夠將消息當作數據庫裏的一個「數據行「或者一條「記錄「。消息由字節數據組成。

對於Kafka,消息裏的數據沒有特別的格式或含義。 消息能夠有一個可選的元數據(鍵)。 鍵也是一個字節數組,與消息同樣,對Kafka來講也沒有特殊含義。 當消息以一種可控的方式寫入不一樣的分區時,會用到鍵。

最簡單的例子:爲鍵生成一個一致性散列值,而後使用散列值對主題分區數進行取模,爲消息選取分區。 這樣能夠保證具備相同鍵的消息老是被寫到相同的分區上。

爲了提升效率,消息被分批次寫入Kafka。批次(一組消息),這些消息屬於同一個主題和分區。若是每個消息都單獨穿行於網絡,會致使大量的網絡開銷,把消息分紅批次傳輸能夠減小網絡開銷。不過,,這要在時間延遲和吞吐量之間做出權衡:批次越大,單位時間內處理的消息就越多,單個消息的傳輸時間就越長。 批次數據會被壓縮,這樣能夠提高數據的傳輸和存儲能力,但要作更多的計算處理。

  • 消息和分區

Kafka的消息經過主題進行分區。主題就比如數據庫的表,或者文件系統的文件夾。主題能夠被分爲若干個分區,一個分區就是一個提交日誌。消息以追加的方式寫入分區,而後先入先出的順序讀取。 要注意,因爲一個主題通常包含幾個分區,所以沒法在整個主題範圍內保證消息的順序,但能夠保證消息在單個分區內的順序。

主題有4個分區,消息被追加寫入每一個分區的尾部。Kafka經過分區來實現數據冗餘和伸縮性。分區能夠分佈在不一樣的服務器上。一個主題能夠橫跨多個服務器,以此來提供比單個服務器更強大的性能。

公司分佈式項目用到了kafka消息中間件,所以對kafka有一個初步的認識,後續逐漸深刻探索kafka的神奇之處。

項目中怎麼運用:

某一個業務操做觸發EventBus事件,經過異步的方法監聽此事件,發佈kafka消息,處理複雜的業務邏輯。我在作項目時,好比直播開播消息提醒,病例解答完後,發各類消息(系統消息、短信消息、彈窗推送、微信消息),

  • 考慮消息的同步和異步:作視頻直播打點記錄用戶的觀看記錄時,經過發異步消息時,進程外事件監聽,處理複雜業務邏輯(由於視頻打點太頻繁,若是直接立刻處理,有異常的話,須要前端感知,其實前端不care這種異常;例如:相似定火車票同樣,,用戶不關注後續搶票流程,用戶感知不到。)須要保證消息冪等,不可重發。

  • 考慮消息冪等的實現: 數據庫能夠加字段squence;存儲redis中,而後查詢該消息是否已經發過。

感謝 資料

相關文章
相關標籤/搜索