為什麼你要使用這麼強大的分散式消息中間件——kafka

来源:https://www.cnblogs.com/ourtest/archive/2019/07/10/11164013.html
-Advertisement-
Play Games

為什麼是kafka? 在我們大量使用分散式資料庫、分散式計算集群的時候,是否會遇到這樣的一些問題: 我們想分析下用戶行為(pageviews),以便我們設計出更好的廣告位 我想對用戶的搜索關鍵詞進行統計,分析出當前的流行趨勢 有些數據,存儲資料庫浪費,直接存儲硬碟效率又低 這些場景都有一個共同點: ...


為什麼是kafka?

在我們大量使用分散式資料庫、分散式計算集群的時候,是否會遇到這樣的一些問題:

我們想分析下用戶行為(pageviews),以便我們設計出更好的廣告位
我想對用戶的搜索關鍵詞進行統計,分析出當前的流行趨勢
有些數據,存儲資料庫浪費,直接存儲硬碟效率又低

這些場景都有一個共同點:
數據是由上游模塊產生,上游模塊,使用上游模塊的數據計算、統計、分析,這個時候就可以使用消息系統,尤其是分散式消息系統!

知道了我們有必要在數據處理系統中使用一個消息系統,但是我們為什麼一定要選kafka呢?現在的消息系統可不只有kafka。

話說阿裡中間件團隊和LinkedIn團隊都做了一個Kafka、RabbitMQ、RocketMQ的三者對比。這邊就不獻醜了,實際結果可以參考以下兩篇博文:

阿裡測試:http://jm.taobao.org/2016/04/01/kafka-vs-rabbitmq-vs-rocketmq-message-send-performance/

LinkedIn測試:https://blog.csdn.net/SJF0115/article/details/78480433

對比圖

Kafka簡介

Kafka是Linkedin於2010年12月份創建的開源消息系統,它主要用於處理活躍的流式數據。活躍的流式數據在web網站應用中非常常見,這些活動數據包括頁面訪問量(Page View)、被查看內容方面的信息以及搜索情況等內容。 這些數據通常以日誌的形式記錄下來,然後每隔一段時間進行一次統計分析。

傳統的日誌分析系統是一種離線處理日誌信息的方式,但若要進行實時處理,通常會有較大延遲。而現有的消息隊列系統能夠很好的處理實時或者近似實時的應用,但未處理的數據通常不會寫到磁碟上,這對於Hadoop之類,間隔時間較長的離線應用而言,在數據安全上會出現問題。Kafka正是為瞭解決以上問題而設計的,它能夠很好地進行離線和線上應用。

kafka部署結構

消息隊列(Message Queue,簡稱MQ),從字面意思上看,本質是個隊列,FIFO先入先出,只不過隊列中存放的內容是message而已。其主要用途:不同進程Process/線程Thread之間通信。

幾大特性:

高吞吐量:可以滿足每秒百萬級別消息的生產和消費——生產消費。
負載均衡:通過zookeeper對Producer,Broker,Consumer的動態加入與離開進行管理。
拉取系統:由於kafka broker會持久化數據,broker沒有記憶體壓力,因此,consumer非常適合採取pull的方式消費數據
動態擴展:當需要增加broker結點時,新增的broker會向zookeeper註冊,而producer及consumer會通過zookeeper感知這些變化,並及時作出調整。
消息刪除策略:數據文件將會根據broker中的配置要求,保留一定的時間之後刪除。kafka通過這種簡單的手段,來釋放磁碟空間。

消息收發流程:

啟動Zookeeper及Broker.
Producer連接Broker後,將消息發佈到Broker中指定Topic上(可以指定Patition)。
Broker集群接收到Producer發過來的消息後,將其持久化到硬碟,並將消息該保留指定時長(可配置),而不關註消息是否被消費。
Consumer連接到Broker後,啟動消息泵對Broker進行偵聽,當有消息到來時,會觸發消息泵迴圈獲取消息,獲取消息後Zookeeper將記錄該Consumer的消息Offset。

Kafka服務:

對於kafka而言,kafka服務就像是一個大的水池。不斷的生產、存儲、消費著各種類別的消息。那麼kafka由何組成呢?

Broker : Kafka消息伺服器,消息中心。一個Broker可以容納多個Topic。
Producer :消息生產者,就是向Kafka broker發消息的客戶端。
Consumer :消息消費者,向Kafka broker取消息的客戶端。
Zookeeper :管理Producer,Broker,Consumer的動態加入與離開。
Topic :可以為各種消息劃分為多個不同的主題,Topic就是主題名稱。Producer可以針對某個主題進行生產,Consumer可以針對某個主題進行訂閱。
Consumer Group: Kafka採用廣播的方式進行消息分發,而Consumer集群在消費某Topic時, Zookeeper會為該集群建立Offset消費偏移量,最新Consumer加入並消費該主題時,可以從最新的Offset點開始消費。
Partition:Kafka採用對數據文件切片(Partition)的方式可以將一個Topic可以分佈存儲到多個Broker上,一個Topic可以分為多個Partition。在多個Consumer併發訪問一個partition會有同步鎖控制。

有的時候,不光是燈紅酒綠的世界可以讓人沉迷,技術的世界也同樣如此。而且有的時候,技術的世界比前者更加可怕,它不但能讓你悄無聲息的陷入進去,還能讓你產生一種你很上進,你很努力的假象,以至於等到你恍然大悟那天,已經悔之晚矣。這裡向大家推薦一個測試交流圈q裙:790047143。

所以大家一定要找準自己的方向,不能因為今天阿裡招聘需求這麼寫就去學這些,明天看到一個技術很牛逼又去學那個。

未來Kafka中間件

目前該中間件只完成了初級階段功能,很多功能都不完善不深入,隨著應用業務的拓展及Kafka未來版本功能支持。以Kafka消息中間件為中心的大數據處理平臺還有很多任務去實現。

一般在互聯網中所流動的數據由以下幾種類型:

需要實時響應的交易數據,用戶提交一個表單,輸入一段內容,這種數據最後是存放在關係資料庫(Oracle, MySQL)中的,有些需要事務支持。
活動流數據,準實時的,例如頁面訪問量、用戶行為、搜索情況等。我們可以針對這些數據廣播、排序、個性化推薦、運營監控等。這種數據一般是前端伺服器先寫文件,然後通過批量的方式把文件倒到Hadoop(離線數據分析平臺)這種大數據分析器裡面,進行慢慢的分析。
各個層面程式產生的日誌,例如http的日誌、tomcat的日誌、其他各種程式產生的日誌。這種數據一個是用來監控報警,還有就是用來做分析。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 1.通過require的方式來引入css,我們來看具體的方法,首先需要安裝css-loader, style-loader(安裝style-loader的目的是為了在html中以style的方式嵌入css)。 cnpm install css-loader --save-dev cnpm insta ...
  • AST模塊其實要寫的話,100篇都寫不完,我將一些簡單知識點翻譯成JavaScript代碼來進行講解(v8內部的複雜性永遠都能超出我的意料,現在看到萬行的源碼都已經沒感覺了),如果誰想看C++源碼,就去翻我前面的流水賬。 先寫幾個結論。 案例中,單個詞法'Hello'屬於原始字元串,由AstRawS ...
  • 1、W3C標準 萬維網聯盟(外語縮寫:W3C)標準不是某一個標準,而是一系列標準的集合。網頁主要由三部分組成:結構(Structure)、表現(Presentation)和行為(Behavior)。萬維網聯盟創建於1994年,是Web技術領域最具權威和影響力的國際中立性技術標準機構。到目前為止,W3 ...
  • flex 佈局學習 尋根溯源話佈局 一切都始於這樣一個問題:怎樣通過 CSS 簡單而優雅的實現水平、垂直同時居中。記得剛開始學習 CSS 的時候,看到 float 屬性不由得感覺眼前一亮,順理成章的聯想到 Word 文檔排版中用到的的左對齊、右對齊和居中對齊,然而很快就失望的發現 CSS 中並不存在 ...
  • 第一步: 在iconfont庫中,找到你想要的圖標,加入到購物車,再在購物車中將圖標加入到你的項目中去 第二步: 在項目中,可以看到剛剛加入的圖標,這裡是你在項目中所有用到的iconfont,選擇下載至本地 第三步: 將下載的壓縮包解壓,將其中的css、eot、svg、ttf、woff文件放入到你的 ...
  • 通過前篇文章 "《設計模式:工廠模式,解除耦合的利器》" 的介紹,我們對工廠模式有了深入的瞭解,今天繼續介紹一種特殊的工廠模式,也就是抽象工廠模式。 定義 抽象工廠模式:提供一個創建一系列相關或相互依賴對象的介面,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬於對象創建型模式,是工廠方法模 ...
  • SpringCloud系列教程 | 第十一篇:使用Spring Cloud Sleuth和Zipkin進行分散式鏈路跟蹤 Springboot: 2.1.6.RELEASE SpringCloud: Greenwich.SR1 如無特殊說明,本系列教程全採用以上版本 在分散式服務架構中,需要對分散式 ...
  • 微服務概述 1.1 易於擴展 1.2 部署簡單 1.3 技術異構性 資料庫的服務化切分 2.1 什麼是“分庫分表”? 2.2 資料庫擴展的幾種方式 2.3 分庫分表的幾種方式 2.4 引入分庫分表中間件後面臨的問題 2.5 現有分庫分表中間件的橫向對比 微服務架構中的分散式事務 3.1 什麼是事務? ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...