Flume原理剖析

一、介紹

Flume是一個高可用、高可靠,分布式的海量日志采集、聚合和傳輸的系統。Flume支持在日志系統中定制各類數據發送方,用于收集數據;同時,Flume提供對數據進行簡單處理,并寫到各種數據接受方(可定制)的能力。其中Flume-NG是Flume的一個分支,其目的是要明顯簡單,體積更小,更容易部署,其最基本的架構如下圖所示:
在這里插入圖片描述
Flume-NG由一個個Agent來組成,而每個Agent由Source、Channel、Sink三個模塊組成,其中Source負責接收數據,Channel負責數據的傳輸,Sink則負責數據向下一端的發送。

二、模塊說明

名稱說明
SourceSource負責接收數據或通過特殊機制產生數據,并將數據批量放到一個或多個Channel。Source的類型有數據驅動和輪詢兩種。典型的Source類型如下:1.和系統集成的Sources:Syslog、Netcat。2.自動生成事件的Sources:Exec、SEQ。3.用于Agent和Agent之間通信的IPC Sources:Avro。4.Source必須至少和一個Channel關聯。
ChannelChannel位于Source和Sink之間,用于緩存來自Source的數據,當Sink成功將數據發送到下一跳的Channel或最終目的地時,數據從Channel移除。Channel提供的持久化水平與Channel的類型相關,有以下三類:1.Memory Channel:非持久化。2.File Channel:基于WAL(預寫式日志Write-Ahead Logging)的持久化實現。3.JDBC Channel:基于嵌入Database的持久化實現。Channel支持事務,可提供較弱的順序保證,可以和任何數量的Source和Sink工作。
SinkSink負責將數據傳輸到下一跳或最終目的,成功完成后將數據從Channel移除。典型的Sink類型如下:1.存儲數據到最終目的終端Sink,比如:HDFS、HBase。2.自動消耗的Sink,比如:Null Sink。3.用于Agent間通信的IPC sink:Avro。Sink必須作用于一個確切的Channel。

Flume也可以配置成多個Source、Channel、Sink,如下圖所示:
在這里插入圖片描述Flume的可靠性基于Agent間事務的交換,下一個Agent down掉,Channel可以持久化數據,Agent恢復后再傳輸。Flume的可用性則基于內建的Load Balancing和Failover機制。Channel及Agent都可以配多個實體,實體之間可以使用負載分擔等策略。每個Agent為一個JVM進程,同一臺服務器可以有多個Agent。收集節點(Agent1,2,3)負責處理日志,匯聚節點(Agent4)負責寫入HDFS,每個收集節點的Agent可以選擇多個匯聚節點,這樣可以實現負載均衡。
在這里插入圖片描述
Flume的架構和詳細原理介紹,請參見:https://flume.apache.org/releases/1.9.0.html。

三、Flume原理

Agent之間的可靠性
Agent之間數據交換流程如下圖所示。
在這里插入圖片描述

  1. Flume采用基于Transactions的方式保證數據傳輸的可靠性,當數據從一個Agent流向另外一個Agent時,兩個Transactions已經開始生效。發送Agent的Sink首先從Channel取出一條消息,并且將該消息發送給另外一個Agent。如果接受消息的Agent成功地接受并處理消息,那么發送Agent將會提交Transactions,標識一次數據傳輸成功可靠地完成。

  2. 當接收Agent接受到發送Agent發送的消息時,開始一個新的Transactions,當該數據被成功處理(寫入Channel中),那么接收Agent提交該Transactions,并向發送Agent發送成功響應。

  3. 如果在某次提交(commit)之前,數據傳輸出現了失敗,將會再次開始上一次Transactions,并將上次發送失敗的數據重新傳輸。因為commit操作已經將Transactions寫入了磁盤,那么在進程故障退出并恢復業務之后,仍然可以繼續上次的Transactions。

四、Flume與HDFS的關系

當用戶配置HDFS作為Flume的Sink時,HDFS就作為Flume的最終數據存儲系統,Flume將傳輸的數據全部按照配置寫入HDFS中。

五、Flume與HBase的關系

當用戶配置HBase作為Flume的Sink時,HBase就作為Flume的最終數據存儲系統,Flume將傳輸的數據全部按照配置寫入HBase中。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/34776.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/34776.shtml
英文地址,請注明出處:http://en.pswp.cn/news/34776.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用阿里云服務器搭建Discuz論壇網站教程基于CentOS系統

阿里云百科分享使用阿里云服務器建站教程,本文是搭建Discuz論壇,Discuz!是一款通用的社區論壇軟件系統,它采用PHP和MySQL組合的基礎架構,為您提供高效的論壇解決方案。本文介紹如何在CentOS 7操作系統的ECS實例上搭建Discuz! X3.4…

Nginx 安裝與部署

文章和代碼已經歸檔至【Github倉庫:https://github.com/timerring/front-end-tutorial 】或者公眾號【AIShareLab】回復 nginx 也可獲取。 文章目錄 虛擬機安裝CentOS7.4Linux配置配置上網配置靜態ip Nginx的安裝版本區別備份克隆 安裝編譯安裝報錯解決 啟動Nginx防…

topo 成績排名

題目描述 每到考試后,學校都會發成績表給每個學生,但是很多同學更關心的是自己在班級里的排名,可惜排名信息并沒有公開。 小雯同學很想知道這次期末考試的全班排名情況,但是她的同學卻不愿意告訴她自己的分數,只告訴她…

分布式 - 消息隊列Kafka:Kafka生產者發送消息的方式

文章目錄 1. Kafka 生產者2. kafaka 命令行操作3. kafka 生產者發送消息流程4. Kafka 生產者的創建5. Kafka 生產者發送消息1. 發送即忘記2. 同步發送3. 異步發送 6. Kafka 消息對象 ProducerRecord 1. Kafka 生產者 不管是把Kafka作為消息隊列、消息總線還是數據存儲平臺&…

wpf控件上移下移,調整子集控件顯示順序

頁面代碼: <!-- 導出A2,自定義導出設置列,添加時間:2023-8-9 14:14:18,作者:whl; --><Window x:Class="WpfSnqkGasAnalysis.WindowGasExportA2"xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"xmlns:x="http:/…

git遠程倉庫的創建及使用

1.倉庫的概念&#xff1a; 1.1 本地倉庫&#xff1a; 了解遠程倉庫前我們先了解一下本地倉庫&#xff0c;本地倉庫開發人員在完成部分代碼的編寫之后&#xff0c;可以將這一部分的代碼做一個提交。這個提交完全就是一個新的版本提交&#xff0c;當然這個提交動作是在開發者的電…

CSS革命:用Sass/SCSS引領前端創新

目錄 前言SCSSSassSass 和 SCSS 的區別 前言 在現代的前端開發中&#xff0c;CSS已成為呈現網頁和應用程序樣式的核心。然而&#xff0c;原生的CSS語法在大型項目中可能變得混亂、冗長且難以維護。 為了解決這些問題&#xff0c;SCSS&#xff08;Sass CSS&#xff09;和Sass&am…

Java基礎篇--數組

目錄 聲明和初始化數組&#xff1a; 訪問和修改數組元素&#xff1a; 數組長度&#xff1a; 遍歷數組&#xff1a; 多維數組的遍歷&#xff1a; 數組的常見操作和方法&#xff1a; 拓展小知識&#xff1a; 數組是Java中的一種數據結構&#xff0c;用于存儲相同類型的多個…

B100-技能提升-線程池分布式鎖

目錄 線程池什么是線程池&#xff1f;為什么用線程池?線程池原理常見四種線程池和自定義線程池 線程池 什么是線程池&#xff1f; 池化技術 為什么用線程池? 1 由于設置最大線程數&#xff0c;防止線程過多而導致系統崩潰。 2 線程復用&#xff0c;不需要頻繁創建或銷毀…

包管理機制pip3

pip3 安裝pip3 安裝pip3 apt install python3-pip yum install python3-pip從倉庫出發的命令 查詢倉庫信息 // 獲取默認pip3源 pip3 config get global.index-url查詢所有軟件包 查詢已經安裝的所有軟件包 pip3 list從軟件包出發的命令 從軟件包名出發查詢其他信息 查詢…

230. 二叉搜索樹中第K小的元素

介紹 中序遍歷&#xff1a;左子樹 -> 中 -> 右子樹 二叉搜索樹&#xff1a;中序遍歷可以得到有序的序列 遞歸法 1.使用函數循環遞歸處理 2.使用一個數組來保存 k, 保證在個個遞歸函數中都能看到 看的變化&#xff1b;每訪問一個節點&#xff0c;這個數減一&#xff0c…

軟件測試基礎篇——Redis

Redis Redis數據庫的配置與連接 解壓redis數據庫的安裝包&#xff08;建議把解壓后的安裝包放到磁盤的根目錄&#xff0c;方便訪問操作&#xff09;打開【命令行窗口】&#xff1a;winR在命令行窗口&#xff0c;進入到redis安裝目錄中 ? 格式一&#xff1a;cd /d redis目錄…

Linux安裝Zookeeper

1、Zookeeper簡介 ZooKeeper是一個分布式的&#xff0c;開放源碼的分布式應用程序協調服務&#xff0c;是Google的Chubby一個開源的實現&#xff0c;是Hadoop和Hbase的重要組件。它是一個為分布式應用提供一致性服務的軟件&#xff0c;提供的功能包括&#xff1a;配置維護、域…

自然語言處理從入門到應用——LangChain:記憶(Memory)-[記憶的類型Ⅲ]

分類目錄&#xff1a;《自然語言處理從入門到應用》總目錄 對話令牌緩沖存儲器ConversationTokenBufferMemory ConversationTokenBufferMemory在內存中保留了最近的一些對話交互&#xff0c;并使用標記長度來確定何時刷新交互&#xff0c;而不是交互數量。 from langchain.me…

基于灰狼優化(GWO)、帝國競爭算法(ICA)和粒子群優化(PSO)對梯度下降法訓練的神經網絡的權值進行了改進(Matlab代碼實現)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;歡迎來到本博客????&#x1f4a5;&#x1f4a5; &#x1f3c6;博主優勢&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客內容盡量做到思維縝密&#xff0c;邏輯清晰&#xff0c;為了方便讀者。 ??座右銘&a…

環保行業如何開發廢品回收微信小程序

廢品回收是近年來受到越來越多人關注的環保行動。為了推動廢品回收的普及和方便&#xff0c;我們可以利用微信小程序進行制作&#xff0c;方便人們隨時隨地參與廢品回收。 首先&#xff0c;我們需要注冊并登錄喬拓云賬號&#xff0c;并進入后臺。喬拓云是一個提供微信小程序制作…

數據結構(一):順序表詳解

在正式介紹順序表之前&#xff0c;我們有必要先了解一個名詞&#xff1a;線性表。 線性表&#xff1a; 線性表是&#xff0c;具有n個相同特性的數據元素的有限序列。常見的線性表&#xff1a;順序表、鏈表、棧、隊列、數組、字符串... 線性表在邏輯上是線性結構&#xff0c;但…

【云原生】Pod詳講

目錄 一、Pod基礎概念1.1//在Kubrenetes集群中Pod有如下兩種使用方式&#xff1a;1.2pause容器使得Pod中的所有容器可以共享兩種資源&#xff1a;網絡和存儲。1.3kubernetes中的pause容器主要為每個容器提供以下功能&#xff1a;1.4Kubernetes設計這樣的Pod概念和特殊組成結構有…

Django中級指南:理解并實現Django的模型和數據庫遷移

Django 是一個極其強大的 Python Web 框架&#xff0c;它提供了許多工具和特性&#xff0c;能夠幫助我們更快速、更便捷地構建 Web 應用。在本文中&#xff0c;我們將會關注 Django 中的模型&#xff08;Models&#xff09;和數據庫遷移&#xff08;Database Migrations&#x…

上傳代碼到GitCode

Git 全局設置 git config --global user.name "AnyaPapa" git config --global user.email "fangtaihongqq.com" 添加SSH密鑰 Mac終端輸入命令 cd existing_folder git init git remote add origin gitgitcode.net:Java_1710/test.git git add . git co…