Kafka專案實戰-使用者日誌上報實時統計之應用概述

技術mix呢發表於2017-11-17

1.概述

  本課程的視訊教程地址:《Kafka實戰專案之應用概述

  本課程是通過一個使用者實時上報日誌來展開的,通過介紹 Kafka 的業務和應用場景,並帶著大家搭建本 Kafka 專案的實戰開發環境。下面我們來看看本課程有哪些課時,如下圖所示:

  接下來,我們開始第一課時的學習:《Kafka 回顧》。

2.內容

2.1 Kafka 回顧

  本課時簡述 Kafka 平臺部署的注意事項,以及 Kafka 在企業中的業務場景和應用場景。讓大家瞭解 Kafka 在企業中的使用。

  本課時主要包含以下知識點,如下圖所示:

  首先,我們來看看Kafka的業務場景,其內容包含以下知識點,如下圖所示: 

  • 第一:解除耦合

  在專案啟動之初來預測將來專案會碰到什麼需求,是極其困難的。訊息系統在處理過程中間插入了一個隱含的、基於資料的介面層,兩邊的處理過程都要實現這一介面。這允許你獨立的擴充套件或修改兩邊的處理過程,只要確保它們遵守同樣的介面約束。

  • 第二:增加冗餘

  有些情況下,處理資料的過程會失敗。除非資料被持久化,否則將造成丟失。訊息佇列把資料進行持久化直到它們已經被完全處理,通過這一方式規避了資料丟失風險。許多訊息佇列所採用的put-get-delete正規化中,在把一個訊息從佇列中刪除之前,需要你的處理系統明確的指出該訊息已經被處理完畢,從而確保你的資料被安全的儲存直到你使用完畢。

  • 第三:提高可擴充套件性

  因為訊息佇列解耦了你的處理過程,所以增大訊息入隊和處理的頻率是很容易的,只要另外增加處理過程即可。不需要改變程式碼、不需要調節引數。擴充套件就像調大電力按鈕一樣簡單。

  • 第四:Buffering

  在任何重要的系統中,都會有需要不同的處理時間的元素。例如,載入一張圖片比應用過濾器花費更少的時間。訊息佇列通過一個緩衝層來幫助任務最高效率的執行———寫入佇列的處理會盡可能的快速。該緩衝有助於控制和優化資料流經過系統的速度。

  • 第五:非同步通訊

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

  以上就是Kafka的業務場景介紹,下面我給大家介紹Kafka的應用場景。

  應用場景的主要內容如下圖所示:

  • 首先是:Push Message

  Kafka可以應用與訊息系統,比如:當下較為熱門的訊息推送,這些訊息推送系統的訊息源,可以使用Kafka作為系統的核心中介軟體來完成訊息的生產和訊息的消費。

  • 然後是:Website Tracking

  我們可以將企業的Portal,使用者的操作記錄等資訊傳送到Kafka中,按照實際業務需求,可以進行實時監控,或者離線處理等。

  • 最後一個是:日誌收集中心

  類似於Flume套件這樣的日誌收集系統,但Kafka的設計架構採用push/pull.適合異構叢集,Kafka可以批量提交訊息,對Producer來說,在效能方面基本上是無消耗的,而在Consumer端中,我們可以使用Hadoop,Storm等其他系統化的儲存和分析系統。

  我們在掌握了Kafka的業務和應用場景後,下面我們來看看實時統計平臺搭建需要注意的事項:如下圖所示,這是Kafka叢集的搭建的架構圖。分別由三個kafka節點組成一哥高可用的叢集,由ZooKeeper叢集連線,提供一個快速,高可用,容錯,分散式的協調服務。

  平臺注意事項包含以下知識點:

  • Kafka的HA特性
  • 平臺核心檔案的配置
  • 叢集啟動步驟
  • 叢集演示

  關於詳細過程以及演示步驟大家可以觀看視訊,這裡我就不多做贅述了。《觀看地址

2.2 專案簡要

  本課時講解如何規劃一個專案的整體流程,以及如何獲取一個專案所需要的資料來源和如何去消費這些資料。

讓大家從中掌握專案的開發流程,為後續的專案分析與設計階段做好準備。

  其主要知識點包含以下內容,如下圖所示:

  接下來,我們從專案的整體流程入手去簡述,如下圖所示:

  這是一個專案的整體流程,本專案是以一個使用者日誌上報系統為案例,從流程可以看出,我們將該專案的流程分為四個模組:資料收集,資料接入,實時流式計算,資料輸出。

  使用這套方案的優點有以下:

  • 業務模組化
  • 功能元件化

  我們認為,Kafka在整個環節中充當的職責應該單一,這專案的整個環節她就是一箇中介軟體。整個專案流程如上圖所示,這樣劃分使得各個業務模組化,功能更加的清晰明瞭。

  • 首先是資料收集模組:我們採用的是Apache的Flume NG來實現的,主要負責從各個節點上實時收集使用者上報的日誌資料。
  • 接著是資料接入模組:由於收集的資料的速度和資料處理的速度不一定是一致的,因此,這裡我們新增一箇中介軟體來做處理,所使用的是Apache的Kafka,另外,這裡有一部分資料是流向HDFS分散式檔案系統的,方便於為離線統計業務提供資料來源。
  • 然後接下來是實時流式:我們在收集到資料後,我們需要對這些資料做實時處理,所選用的是Apache的Storm。關於Storm叢集的安裝比較簡單,具體安裝細節,大家可以去觀看視訊,《觀看地址》。
  • 在我們完成流式計算模組後,最後是資料輸出模組:在使用Storm對資料做處理後,我們需要將處理的結果做持久化,由於對響應速度要求較高,這裡採用Redis和MySQL來做持久化。

  這就算整個流程的架構圖。在介紹完整個架構的流程圖,接下來,我們來看看資料來源生產介紹,如下圖所示:

  從圖中,我們可以看出由Flume NG組建的日誌收集叢集,將日誌集中收集起來,然後通過Flume的Sink元件將資料傳送到指定的Kafka中介軟體中,這樣在Kafka的Producer端,就有了資料來源。從Flume到Kafka,通過Sink來完成資料來源的生產階段。

  在完成了資料來源的生產後,下面我們來看看如何去消費這些資料。關於資料來源的消費,我們來看看下面這張圖:

  從上圖中,我們可以看出資料來源存在Kafka中,通過KafkaSpout將資料輸送到Storm,然後Storm將Kafka中的資料進行消費處理,通過Storm的計算模組,按照業務需求將資料做對應的處理,完成資料的消費,最後將統計的結果持久化到DB庫當中。

  關於更加詳細的內容,大家可以去觀看視訊教程,《觀看地址》。

2.3 Kafka 工程準備

  本課時講解建立一個本專案的工程,以及編寫本專案需要準備的基礎環境,包含 Kafka 的監控系統,Storm 群的準備。為完成編碼實踐奠定良好的基礎。

  其主要知識點包含以下內容,如下所示:

 

  下面,我們來看看,基礎環境需要準備有哪些內容。內容如下所示:

  • 概述。
  • 基礎軟體介紹。
  • 使用技巧。
  • 預覽及演示。

  在Kafka專案時,在消費端使用Storm來做計算處理,因而,我們使用的開發語言是Java,編寫Java的相關程式碼都是在IDE中來完成的,IDE為開發者編碼提供了方便。課程中所使用的IDE是JBoss Studio 8,這是RedHat公司開發的一款IDE,其本質是Eclipse,只是該IDE整合的外掛比較豐富,大家若是需要可以到它的官網去下載。另外,在開發過程當中,我們還需要一個比較重要的外掛 —— Kafka的監控工具。這個工具可以給我們觀察Kafka資料生產和消費提供方便,另外一個就Storm的UI管理介面,我們可以通過Storm UI來觀察Storm作業的執行情況。

  在熟悉基礎軟體和外掛的使用後,我們來建立Kafka工程,在建立Kafka工程時需要注意以下幾點:

  • 相關基礎環境的準備,如:Java的基礎開發包JDK,這個需要準備好,不然,我們無法編譯執行相關Java程式碼

另外,準備好Maven環境,方便打包我們的工程。

  • 在我們已有的基礎環境下,我們來建立相關Kafka工程。下面為大家演示具體的操作流程。

  關於演示詳細過程,大家可以去觀看視訊,這裡我就不多做贅述了。《觀看地址》。

3.總結

  本課程我們回顧了 Kafka的相關內容,簡述了專案的基本流出以及基礎軟體的使用等知識,我們應該掌握以下知識點,如下圖所示:

4.結束語

  這就是本課程的主要內容,主要就對 Kafka 專案做前期準備,對後續學習 Kafka 專案實戰內容奠定良好的基礎。

  如果本教程能幫助到您,希望您能點選進去觀看一下,謝謝您的支援!

  轉載請註明出處,謝謝合作!

   本課程的視訊教程地址:《Kafka實戰專案之應用概述

 

相關文章