1. 程式人生 > >基於Kafka的服務端使用者行為日誌採集

基於Kafka的服務端使用者行為日誌採集

本文來自網易雲社群

作者:李勇

背景

隨著網際網路的不斷髮展,使用者所產生的行為資料被越來越多的網站重視,那麼什麼是使用者行為呢?所謂的使用者行為主要由五種元素組成:時間、地點、人物、行為、行為對應的內容。為什麼要做使用者的行為分析?因為只有做了使用者行為分析才能知道使用者畫像、才能知道使用者在網站上的各種瀏覽、點選、購買背後的商業真相,從而給企業帶來商業價值。

網易美學是一個供使用者發現和分享美妝及護膚的社群。既然是一個社群,其中的使用者行為分析扮演著舉足輕重的角色。對應網易美學來說,使用者行為主要有以下幾個應用場景:

  • 推薦系統。目前的推薦是基於使用者的行為,然後運用不同的演算法計算出使用者應該展現的推薦資料。

  • 拉新。對於一個產品來說,不斷的獲取新使用者是其中一個目標,有更多的新使用者使用產品,就意味著該產品能夠得到更多人的認可。

  • 轉化率。一個使用者從註冊到各個頁面的瀏覽等行為組成一個漏斗模型,漏斗的每個模型可以看到使用者的留存狀況。

  • 留存率。一個產品不但能讓更多的新使用者使用,也要保證老的使用者不流失。

  • 促活率。所謂的促活率,就是讓老使用者經常使用該產品,讓使用者喜歡上這個平臺。

埋點技術

使用者的行為對於一個網際網路產品來說很重要,因此如何採集使用者的行為就變得非常至關重要了。對使用者的行為採集可以通過埋點的方式實現,埋點主要有以下幾種方式:

  • 前端埋點。在某個控制元件操作發生時通過預先寫好的程式碼來發資料的程式碼埋點。

  • 客戶端埋點。即app使用一些sdk對使用者的行為進行收集然後批量傳送到一個收集平臺。

  • 服務端埋點。服務端埋點就是通過攔截使用者的請求介面,對使用者的一些行為資訊進行採集。

服務端日誌採集

下面我詳細介紹下網易美學的服務端日誌採集系統使用的技術,總體架構,部署圖,運作流程以及配置相關資訊。

1. 技術選型

服務端日誌採集主要通過在Controller的介面中進行埋點,然後通過AOP技術、Kafka訊息系統以及logback對使用者行為進行採集。

之所以使用AOP技術是因為AOP的以下重要特定:

  • 程式碼的侵入性小。對於業務程式碼的侵入性小,只需要在Controller的介面上添加註解,然後在其他模組對使用者行為進行採集。

  • 重用性。對於相同作用的程式碼可以進行重用。

  • 擴充套件性。能夠很好的對系統進行擴充套件。

由於使用非同步方式對使用者行為資訊進行收集,因此需要使用訊息中介軟體。目前訊息中介軟體非常多,比較流行的有ActiveMQ、ZeroMQ、RabbitMQ、Kafka等。每個訊息中介軟體都有各種的優勢劣勢,之所以使用Kafka訊息中介軟體,是因為以下幾點因素:

  • 高效能。每秒鐘可以處理數以千計生產者生成的訊息。

  • 高擴充套件性。可以通過簡單的增加伺服器橫向擴充套件Kafka叢集的容量。

  • 分散式。訊息來自數以千計的服務,使用分散式來解決單機處理海量資料的瓶頸。

  • 永續性。Kafka中的訊息可以持久化到硬碟上,這樣可以防止資料的丟失。

因為使用者的行為資料最終是以日誌的形式持久化的,因此使用logback對日誌持久化到日誌伺服器中。

2.總體架構

 

圖1 總體架構圖

服務端日誌採集系統主要由兩個工程組成:beauty-bi-core和beauty-bi-service。由於網易美學的使用dubbo框架,因此有服務提供方和服務消費方。beauty-bi-core被web、wap和mainsite服務消費方依賴。此外,beauty-bi-service也依賴於beauty-bi-core,主要是依賴於其中的一些實體類及工具類。

beauty-bi-core工程為Kafka訊息的生產者,主要封裝實現切面的具體邏輯,其主要職責如下:

  • 解析使用者請求的Request資訊:從Request中提取使用者的基本資訊,如裝置型號、使用者的供應商、ip、裝置的解析度、裝置平臺、裝置的作業系統、裝置id、app渠道等。

  • 介面對應的引數:通過切面可以提取介面的引數值,從而知道使用者的業務資訊。

  • 應用層返回的結果資訊:因為切面使用AfterReturning方式,因此可以獲取用層的返回結果,從返回結果中可以提取有用的資訊。

  • 使用者的基本資訊:使用者的id資訊。

  • 資訊格式化:將資訊轉化成JSON字串。

  • 傳送訊息:將最終需要傳送的訊息放入本地阻塞佇列中,通過另一個執行緒非同步從阻塞佇列中獲取訊息併發送到Kafka Broker中。

beauty-bi-service工程為Kafka訊息的消費者,其主要職責如下:

  • 實時從Kafka中拉取最新的資料。

  • 將JSON字串轉化成,方便進一步對用資訊進行加工。

  • 對使用者的ip進行解析,獲取ip對應的地區以及經緯度資訊。

  • 將加工好的最終資訊持久化到log檔案中。

3.部署圖

圖2 部署圖

  上圖為網易美學與日誌系統系統相關的部署圖,App、Wap和Mainsite伺服器叢集分別對應不同終端的應用。Kafka叢集使用杭研的叢集,目前有10個Broker。日誌伺服器有兩臺,通過Kafka的均衡策略對日誌進行消費。

4.日誌採集的流程

日誌採集流程圖如下所示:

 

圖3 日誌打點流程圖

上圖為訊息生產者和訊息消費者共同組成的流程圖。

訊息生產者的具體步驟如下:

  • 通過切面攔截使用者的請求。

  • 從切面中提取請求頭的基本資訊,如裝置資訊,cookie資訊,ip資訊等。

  • 提取請求的介面引數資訊。

  • 從介面返回值中提取相關資訊,如id,pvid等。

  • 將提取的資訊封裝成JSON字串,放到阻塞佇列中,假如阻塞佇列溢位會有三次重試機制。

  • 非同步執行緒從本地阻塞佇列中獲取資料,並將資訊組裝傳送到Kafka的Broker中,此時訊息生產者結束。

訊息消費者的具體步驟如下:

  • 實時從Kafka Broker中批量拉取訊息。

  • 將拉取的訊息轉化成物件。

  • 解析ip對應的國家、省份、城市、經緯度資訊。

  • 對不同業務場景的資訊進一步解析。

  • 將日誌資訊轉化成JSON字串,持久化到log檔案中。

5. 相關配置

  • application-XXX.properties:該配置放Kafka的相關屬性,包括topic、groupId、server等資訊。

  • beauty-log-msg.xml:該配置放在app-web,mainsite-web,wap-web的src/main/resources目錄下,主要是初始化kafka生產者的資訊。

  • beauty-bi-service.xml:該配置放在beauty-bi-service工程的src/main/resources目錄下,主要用於載入kafka消費者的配置資訊,並且啟動kafka消費者服務。

  • logback.xml:該配置放在beauty-bi-service工程的src/main/resources目錄下,主要用於宣告日誌檔案存放的目錄,需要持久化的日誌的package路徑,以及日誌持久化的格式。

  • ip_conf.txt:該配置放在beauty-bi-service工程的src/main/resources目錄下,用於解析ip對應的地域、經緯度等資訊。

本文來自網易雲社群,經作者勇授權釋出。

相關推薦

no