Kafka實戰 實時日誌統計流程

2021-09-06 23:51:15 字數 3049 閱讀 8118

在《kafka實戰-簡單示例》一文中給大家介紹來kafka的簡單示例,演示了如何編寫kafka的**去生產資料和消費資料,今天給大家介紹如何去整合乙個完整的專案,本篇部落格我打算為大家介紹flume+kafka+storm的實時日誌統計,由於涉及的內容較多,這裡先給大家梳理乙個專案的運用這些技術的流程。下面是今天的內容目錄:

下面開始今天的內容分享。

在整合這套方案的時候,專案組也是經過一番討論,在討論中,觀點很多,有人認為直接使用storm進行實時處理,去掉kafka環節;也有認為直接使用kafka的api去消費,去掉storm的消費環節等等,但是最終組內還是一致決定使用這套方案,原因有如下幾點:

我們認為,kafka在整個環節中充當的職責應該單一,這專案的整個環節她就是乙個中介軟體,下面用乙個圖來說明這個原因,如下圖所示:

整個專案流程如上圖所示,這樣劃分使得各個業務模組化,功能更加的清晰明了。

負責從各個節點上實時收集使用者上報的日誌資料,我們選用的是apache的flume ng來實現。

由於收集的資料的速度和資料處理的速度不一定是一致的,因此,這裡新增了乙個中介軟體來做處理,所使用的是apache的kafka,關於kafka集群部署,大家可以參考我寫的《kafka實戰-kafka cluster》。另外,有一部分資料是流向hdfs分布式檔案系統了的,方便於為離線統計業務提供資料來源。

在收集到資料後,我們需要對這些資料做實時處理,所選用的是apache的storm。關於storm的集群搭建部署部落格後面補上,較為簡單。

在使用storm對資料做處理後,我們需要將處理後的結果做持久化,由於對響應速度要求較高,這裡採用redis+mysql來做持久化。整個專案的流程架構圖,如下圖所示:

flume是乙個分布式的、高可用的海量日誌收集、聚合和傳輸日誌收集系統,支援在日誌系統中定製各類資料傳送方(如:kafka,hdfs等),便於收集資料。flume提供了豐富的日誌源收集型別,有:console、rpc、text、tail、syslog、exec等資料來源的收集,在我們的日誌系統中目前我們所使用的是spooldir方式進行日誌檔案採集,配置內容資訊如下所示:

producer.sources.s.type =spooldir

producer.sources.s.spooldir = /home/hadoop/dir/logdfs

當然,flume的資料傳送方型別也是多種型別的,有:console、text、hdfs、rpc等,這裡我們系統所使用的是kafka中介軟體來接收,配置內容如下所示:

producer.sinks.r.type =org.apache.flume.plugins.kafkasink

producer.sinks.r.metadata.broker.list=dn1:9092,dn2:9092,dn3:9092

producer.sinks.r.partition.key=0

producer.sinks.r.partitioner.class=org.apache.flume.plugins.singlepartition

producer.sinks.r.serializer.class=kafka.serializer.stringencoder

producer.sinks.r.request.required.acks=0

producer.sinks.r.max.message.size=1000000

producer.sinks.r.producer.type=sync

producer.sinks.r.custom.encoding=utf-8

producer.sinks.r.custom.topic.name=test

關於,flume的詳細搭建部署,大家可以參考我寫的《高可用hadoop平台-flume ng實戰**篇》。這裡就不多做贅述了。

kafka是一種提供高吞吐量的分布式發布訂閱訊息系統,她的特性如下所示:

kafka的目的是提供乙個發布訂閱解決方案,他可以處理consumer**中的所有流動資料,在網頁瀏覽,搜尋以及使用者的一些行為,這些動作是較為關鍵的因素。這些資料通常是由於吞吐量的要求而通過處理日誌和日誌聚合來解決。對於hadoop這樣的日誌資料和離線計算系統,這樣的方案是乙個解決實時處理較好的一種方案。

關於kafka集群的搭建部署和使用,大家可以參考我寫的:《kafka實戰-kafka cluster》,這裡就不多做贅述了。

storm的主要特點如下:

storm集群由乙個主節點和多個工作節點組成。主節點執行了乙個名為「nimbus」的守護程序,用於分配**、布置任務及故障檢測。每個工作節 點都執行了乙個名為「supervisor」的守護程序,用於監聽工作,開始並終止工作程序。nimbus和supervisor都能快速失敗,而且是無 狀態的,這樣一來它們就變得十分健壯,兩者的協調工作是由apache的zookeeper來完成的。

storm的術語包括stream、spout、bolt、task、worker、stream grouping和topology。stream是被處理的資料。spout是資料來源。bolt處理資料。task是執行於spout或bolt中的 執行緒。worker是執行這些執行緒的程序。stream grouping規定了bolt接收什麼東西作為輸入資料。資料可以隨機分配(術語為shuffle),或者根據字段值分配(術語為fields),或者廣播(術語為all),或者總是發給乙個task(術語為global),也可以不關心該資料(術語為none),或者由自定義邏輯來決定(術語為 direct)。topology是由stream grouping連線起來的spout和bolt節點網路。在storm concepts頁面裡對這些術語有更詳細的描述。

這裡就是為大家介紹的flume+kafka+storm的整體流程,後續會給大家用乙個專案案例來實踐演示這個流程,包括具體的各個模組的編碼實踐。今天大家可以先熟悉下實時計算專案的流程開發。

SYLogManager實時日誌

sylogmanager log日誌檢視工具。特點 檢視日誌按鈕可拖動的任意位置 使用介紹 示例 匯入標頭檔案 import sylogmanager.h 初始化配置 sylogmanager.sharelog config sylogmanager.sharelog.email 151311301...

細述 GoAccess實時日誌監控

本文章基於ubuntu16.04系統 nginx1.10.3日誌環境 注 nginx使用apt get方式安裝,日誌格式為預設 原始碼安裝 apt get install gcc g libncursesw5 dev wget tar xzvf goaccess 1.2.tar.gz cd goac...

開源實時日誌分析ELK

2018 01 04 開源實時日誌分析elk平台部署 日誌主要包括系統日誌 應用程式日誌和安全日誌。系統運維和開發人員可以通過日誌了解伺服器軟硬體資訊 檢查配置過程中的錯誤及錯誤發生的原因。經常分析日誌可以了解伺服器的負荷,效能安全性,從而及時採取措施糾正錯誤。通常,日誌被分散的儲存不同的裝置上。如...