nginx 开源 Windows 编程 centos wordpress apache shell Ubuntu linux php Android 微软 java 程序员 mysql Firefox google Python 云计算

Kafka項目實戰-用戶日誌上報實時統計之分析與設計

1.概述

  本課程的視頻教程地址:《Kafka實戰項目之分析與設計》

   本課程我通過一個用戶實時上報日誌案例作為基礎,帶著大家去分析Kafka這樣一個項目的各個環節,從而對項目的整體設計做比較合理的規劃,最終讓大家能夠通過本課程去掌握類似Kafka項目的分析與設計。下面,我給大家介紹本課程包含的課時內容,如下圖所示:

  接下来,我们开始第一课时的学习:《项目整体概述》。

2.內容

2.1 項目整體設計

  項目整體概述主要講解一個項目產生的背景,以及該項目背後的目的,從而讓大家更好的去把握項目的需求。

  本課時所涉及的主要知識點,如下圖所示:

  那么,接下来,我就先从背景来给大家简述一个项目,背景包含一下知识点,如下图所示:

 

 前面我已經給大家說明了,這是一個實時統計項目,我們可以實時的訪問記錄, 通過實時流式計算後,得到用戶實時的訪問行跡。這個和離線計算有所區別,離線計算任務,不能立馬得到我們想要的結果。

  那麽,這樣一個項目我們能得到什麽好處,舉個例子:

  業績部門的同事需要知道當天的用戶實時瀏覽行跡,而針對這一需求,我們可以通過實時計算後,將統計後的結果 通過圖表可視化出來,讓業績部門的同事可以非常清晰的知道,公司的用戶對公司的那些業務模塊趕興趣,需求量比較大, 那麽業績部門的同事,可以這一塊重點投入,對那些不是很趕興趣,需求量較小的模塊,業績部門的同事可以投入的成本相對低一些。

  以上便是我為大家介紹的項目背景,下面我給大家介紹項目的目的。

  項目的目的所包含的內容,如下圖所示:

  关于详细的目的内容,这里我就不多做赘述了。《观看地址

2.2 Producer 模块分析

  Producer模块分析一课给大家介绍数据生产环节,我带着大家去分析生产数据来源,让大家掌握数据如何收集到 Kafka 的 Producer 模块。

  其主要知识点包含以下内容,如下所示:

  

下面,我們先去分析數據來源。我們知道,在日誌記錄中一條日誌記錄代表用戶的一次活動形跡,下面我我從實時日誌記錄中抽取的一條用戶記錄,如下所示:

121.40.174.237 yx12345 [21/July/2015 13:25:45 +0000] chrome appid_5 "http://www.***.cn/sort/channel/2085.html"
  那麽通過觀察分析這條記錄,我們可以從示例數據中得到那些信息量,這裏我給大家總結到一張圖上了,如下圖所示:

在分析了日誌記錄的信息量,我們接下來去看看是如何收集到這些數據的,整個收集數據的流程是怎麽樣的,下面我用一張圖來給大家,如下圖所示:

 

 從圖中,我們可以看出,數據的產生的源頭是用戶,從圖的左邊開始看起,用戶通過自己手上的終端(有可能是: PC機,手機,pad等設備去訪問公司的網站),而這裏訪問的記錄都會被實時的記錄到服務器,我們在部署網站的的節點上添加 Flume的Agent代理,將這些實時記錄集中收集起來,然後我們在Flume的Sink組件處添加輸送的目標地址,這裏我們是要將這些 實時的記錄輸送到Kafka集群的,所以在Sink組件處填寫指向Kafka集群的信息,這樣收集的實時記錄就被存儲在Kafka的 Producer端,然後,這部分數據我們就可以在下一個階段,也就是消費階段去消費這些數據。

  以上就是整個實時數據的采集過程,由用戶產生,Flume收集並傳輸,最後存放與Kafka集群的Producer端等待被消費。

  關於具體細節,這裏就不贅述了。《觀看地址》

2.3 Consumer 模塊分析

  該課時我給大家介紹數據消費環節,帶著大家從消費的角度去分析消費的數據源,讓大家掌握數據如何在Kafka中被消費。

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

  那么,下面我先带着大家去分析消费数据来源,关于消费数据来源的统计的KPI指标,如下图所示:

 

 

 從圖中,我們可以看出,由以下KPI指標:

業務模塊的訪問量:這裏通過記錄中的App Id來統計相關指標。
頁面的訪問量:關於PV,這裏我們可以使用瀏覽記錄來完成這部分的指標統計。
當天時段模塊的訪問量:而時間段的訪問量,可以通過用戶訪問的時間戳,來完成這部分的指標統計。
訪問者的客戶端類型:在每條訪問記錄中,都含有對應的訪問瀏覽設備類型,我們提取這部分內容來完成相應的統計指標。
  以上便是我給大家分析消費數據的相關信息所設計的內容。

  接下來,我帶著大家去看看本課時的另一個比較重要的知識點,那就是關於數據源的消費流程。這裏,我用一張圖來給大家描述了整個消費過程,如下圖所示:

 

 我們先從圖的最左邊看起,這個是Kafka的集群,在這個集群中,存放著我們即將要被消費的數據,這裏,我們通過KafkaSpout 將Kafka和Storm聯系起來,將Kafka集群中要消費的數據,通過KafkaSpout輸送到Storm集群,然後數據進入到Storm集群後, 通過Storm的實時計算模型,按照業務指標做對應的計算,並將計算之後的結果持久化到DB庫當中去,這裏同時采用mysql和Redis 來做持久化。

  以上,便是我給大家描述的如何去消費Kafka集群中數據的流程。《觀看地址》

2.4 項目整體設計

  該課時我給大家介紹設計一個項目的整體架構和流程開發,以及 KPI 的設計,讓大家能夠通過本課時去掌握一個項目的設計流程。

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

  下面,我先给大家去分析本项目的详细设计流程,这里我绘制了一张图来描述整个项目设计流程的相关信息,如下图所示:

  

從圖的最左邊開始,依次是:

數據源:這部分數據在用戶訪問公司網站的時候就會產生對應的記錄,我們只需要在各個網站節點添加對應的Flume的Agent代理即可。
數據收集:這裏我們使用Flume集群去收集訪問的日誌記錄,在收集完數據後,進入到下一階段。
數據接入:在該模塊下,使用Kafka來充當一個消息數據的核心中間件,通過Flume的Sink組件,將數據 發送到Kafka集群,這樣在Kafka的生產端就有了數據,這些數據等待去被消費。那麽接下來,通過KafkaSpout 將Kafka集群和Storm集群關聯起來,將Kafka集群中的數據,由KafkaSpout輸送到Storm集群,這樣消費端的數據就流向了Storm集群。
流式計算:在數據進入到Storm集群後,通過Storm的實時計算模型,將數據按照業務需要完成對應的指標計算,並將統計的 結果持久化到DB庫當中。
持久化層:在持久化層,這裏選用MySQL和Redis來做持久化存儲,統計結果出來後,進入到下一階段。
數據接口層:這裏我們可以編寫一個RPC服務,統一的將統計結果共享出去,這裏RPC服務所采用的是Thrift,完成數據的共享。
可視化層:這裏由前端統一查詢Thrift數據共享接口,將統計結果展示出來,完成數據的可視化。
  以上,便是我給大家介紹本項目的整個流程設計的相關內容。關於其他的細節內容,這裏就不多贅述了。《觀看地址》

3.總結

  本課程我們對項目進行了整體分析,並指導大家去分析 Kafka 的 Producer 模塊和 Consumer 模塊,以及幫助大家去設計項目的開發流程等知識,我們應該掌握以下知識點,如下圖所示:

4.結束語

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

延伸阅读

    评论