【Flume】Flume原理简述及示例实践

news2024/12/23 19:40:24

文章目录

  • 1. Flume是什么
  • 2. Flume三大组件
  • 3. Flume高级应用场景
    • 3.1 多路复用
    • 3.2 整合
  • 4. 示例实践
    • 4.1 配置
    • 4.2 运行
      • 4.2.1 运行结果输出
      • 4.2.2 设置后台运行

1. Flume是什么

       Flume是一个高可用,高可靠,分布式的海量日志采集、聚合和传输的系统,能够有效的收集、聚合、移动大量的日志数据。通俗来说就是一个靠谱、方便的日志采集工具。同时,他也是目前大数据领域数据采集最常用的一个框架。

2. Flume三大组件

在这里插入图片描述
       从图中可以看到Flume从Web网站获取信息并上传到HDFS,其组件主要包含Source、Channel和Sink。

  • Source:负责从数据源读取信息,根据读取的数据源类型不同,分为很多类,例如从文件读取数据的Source、从网站日志读取数据的Source等。常用的Source组件有:
    • Exec Source:实现文件监控,可以实时监控文件中的新增内容,类似于Linux中的tail -f效果;
    • NetCat TCP/UDP Source:采集指定端口(TCP、UDP)的数据,可以读取流经端口的每一行数据;
    • Spooling Directory Source:采集文件夹里新增的文件;
    • Kafka Source:从Kafka消息队列中采集数据。
  • Channel:负责临时存储数据,Source会将读取到的信息临时存储在这里,根据存储方式的不同,有很多类Channel,例如基于内存的Channel、基于文件的Channel等。常用的Channel组件有:
    • Memory Channel:使用内存作为数据的存储。优点是效率高,因为就不涉及磁盘IO;缺点有两个:可能会丢数据,如果Flume的agent挂了,那么channel中的数据就丢失了;内存是有限的,会存在内存不够用的情况。
    • File Channel:使用文件来作为数据的存储。优点是数据不会丢失;缺点是效率相对内存来说会有点慢,但是这个慢并没有我们想象中的那么慢,所以这个也是比较常用的一种Channel。
    • Spillable Memory Channel:使用内存和文件作为数据存储,即先把数据存到内存中,如果内存中数据达到阈值再flush到文件中。优点:解决了内存不够用的问题;缺点:还是存在数据丢失的风险。
  • Sink:负责将数据从Channel读取出来并写到目的地,根据写入的地方不同有很多种Sink,例如写入文件的Sink、写入HDFS的Sink等。Channel中的数据直到进入目的地才会被删除,当Sink写入目的地失败后,可以自动重写,不会造成数据丢失,这是有事务保证的。常用的Sink组件有:
    • Logger Sink:将数据作为日志处理,可以选择打印到控制台或者写到文件中,这个主要在测试的时候使用;
    • HDFS Sink:将数据传输到HDFS中,这个是比较常见的,主要针对离线计算的场景
    • Kafka Sink:将数据发送到kafka消息队列中,这个也是比较常见的,主要针对实时计算场景,数据不落盘,实时传输,最后使用实时计算框架直接处理。

3. Flume高级应用场景

3.1 多路复用

在这里插入图片描述
       图中共有两个Agent,表示我们启动了2个Flume的代理,或者可以理解为了启动了2个Flume的进程。首先看左边这个Agent,给他起个名字叫 foo,有一个Source,Source后面接了3个Channel,表示Source读取到的数据会重复发送给每个Channel,每个Channel中的数据都是一样的,针对每个Channel都接了一个Sink,这三个Sink负责读取对应Channel中的数据,并且把数据输出到不同的目的地,Sink1负责把数据写到HDFS中,Sink2负责把数据写到一个Java消息服务数据队列中,Sink3负责把数据写给另一个Agent。
       Sink3把数据输出到了Agent bar中,在Agent bar中同样有三个组件,Source组件获取Sink3发送过来的数据,然后把数据临时存储到自己的Channel4中,最终再通过Sink组件把数据写到其他地方,把采集到的一份数据重复输出到不同的目的地中。

3.2 整合

在这里插入图片描述
       图中共启动了四个Agent,左边的三个Agent都是负责采集对应web服务器中的日志数据,数据采集过来之后统一发送给Agent4,最后Agent4进行统一汇总,最终写入HDFS。
       这种架构的好处是后期如果要修改最终数据的输出目的地,只需要修改Agent4中的Sink即可,不需要修改Agent1、2、3。但是这种架构也有弊端:如果有很多个Agent同时向Agent4写数据,那么Agent4会出现性能瓶颈,导致数据处理过慢;这种架构还存在单点故障问题,如果Agent4挂了,那么所有的数据都断了。不过这些问题可以通过Flume中的负载均衡和故障转移机制解决,会在后续的博客中详细分析。

4. 示例实践

需求为配置Flume,使其可以接收通过TCP协议传输的信息并打印到控制台。

4.1 配置

       Flume的运行不需要编写代码,但需要提前写好配置,由于每种组件的参数较多,因此一般直接查阅官网文档就可以。下面这段配置,应该写到Flume的conf目录下,我命名为example.conf。
       这段代码的含义是:配置一个名为a1的Agent,将Source组件命名为r1,Sink组件命名为k1,Channel组件命名为c1。使用NetCat TCP Source组件,监听localhost的44444端口;使用Logger Sink组件;使用Memory Channel组件,Channel中最多存储1000个event,一次事务中写入和读取的event最大数为100;最后设置Source连接的Channel以及Sink连接的Channel。

# example.conf: A single-node Flume configuration

# Name the components on this agent
a1.sources = r1
a1.sinks = k1
a1.channels = c1

# Describe/configure the source
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444

# Describe the sink
a1.sinks.k1.type = logger

# Use a channel which buffers events in memory
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100

# Bind the source and sink to the channel
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

4.2 运行

       运行代码为:

bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 -Dflume.root.logger=INFO,console

       其中--conf指定配置目录,--conf-file指定配置文件,--name指定Agent名称,-D指定特殊参数,如flume.root.logger=INFO,console表示输出结果到控制台,这样便于测试时查看结果。

4.2.1 运行结果输出

       使用telnet命令向localhost的44444端口发送信息,启动Flume服务后,复制一个当前虚拟机的命令窗口,输入:telnet localhost 44444,然后键入要发送的信息即可,如下:

  1. 发送信息"hello world"(字符串"OK"是系统打印的)。
    在这里插入图片描述
  2. Flume接收信息"hello world"并打印在控制台上。
    在这里插入图片描述

4.2.2 设置后台运行

       由于默认Flume服务会在控制台运行且输入"Ctrl+C"后会终止服务(不像Hadoop的MapReduce会偷偷在后台继续运行),因此如果要设置后台运行的话需要在运行命令后面加上Linux的&命令,并且在前面使用nohup命令保证关闭Shell窗口后命令仍然可以运行。完整命令为:

nohup bin/flume-ng agent --conf conf --conf-file conf/example.conf --name a1 -Dflume.root.logger=INFO,console &

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/193643.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

低代码:让企业“活”起来,赋能企业数字转型

低代码作为一种无需或只需少量代码即可快速生成应用程序的开发方式,广义的低代码可以分为低代码和无代码两种,两者面向的群体和场景不同,分别定位于服务IT人员和业务人员。两者都可以降低开发成本和门槛,有助于业务人员和开发人员…

自动驾驶感知——红外传感器

文章目录1. 红外线基本概念1.1 红外线探测的优缺点1.2 红外线相关基础知识1.3 红外辐射的基本知识1.4 黑体、白体和透明体1.5 相关物理定律1.5.1 基尔霍夫定律1.5.2 斯特藩-玻耳兹曼定律1.5.3 维恩位移定律2. 红外线传感器分类2.1 主动式与被动式2.2 光子式红外传感器2.3 热释电…

Redis -- 过期删除策略和内存淘汰策略

1. 过期删除策略 1.1 redis支持三种过期删除策略: 定时删除:在设置键的过期时间的同时,创建一个定时器,让定时器在键的过期时间来临时,立即执行对键的删除操作惰性删除:放任键过期不管,但是每…

Day2 CF713 div3 vp A-G

Dashboard - Codeforces Round #713 (Div. 3) - Codeforces感觉中规中矩,rk4k确实是我现在的水平,一直徘徊在绿灰边缘23333,其实很大原因在于不补题,看了CF Analytics的题目rating,几乎只写1200-的题,1600的…

Qt中的网络编程(TCP)

在Qt中网络编程主要由Qt Network模块来编写基于TCP/Ip的网络程序,其中提供了许多的类: 可以点击该链接查看:Qt网络C类|Qt网络 5.15.12 常见的有: QTcpServer基于 TCP 的服务器QTcpSocketTCP 套接字QUdpSocketUDP 套接字QDtls此类…

End-to-End Entity Resolution for Big Data: A Survey Matching部分学习笔记

Matching ER的核心是匹配任务,它接收一个块集合作为输入,对于一个块中的每一对候选匹配,它决定它们是否指向相同的真实世界实体。 Preliminaries 匹配决策通常由匹配函数MMM做出,它将每一对实体描述(ei,ej)(e_{i}, e_{j})(ei​…

全网最详细的手把手模拟实现Cache

前言:本文内容较多(字数1w),不仅包含理论知识,还进行了全面实践。本文对前三章理论内容粗略解释,建议去b站观看哈工大和王道考研的操作系统中虚拟存储相关章节,然后对于设计实现就游刃有余了。 …

C++数论————质数筛法(单独判断一个数,判断N个数) 埃氏筛法

质数想必大家都不陌生从小学到大质数的概念:一个数如果除了1和本身之外没有其他的因子,那么这个数被称为质数今天要讲两个知识点:在C中如何判断一个数是否为质数在C中如何判断1-N之间哪些数为整数在C中如何判断一个数是否为质数这个知识点较为…

当湖北《汉川》遇到湖南《早安隆回》,杨语莲会是下一个袁树雄吗

古有花木兰,替父去从军。如今在中国华语乐坛,继《早安隆回》袁树雄之后,又出现了《汉川》杨语莲。之所以把这两首歌曲,以及这两位音乐人,放在一起来做对比,是因为这两首歌曲,甚至这两位音乐人&a…

Java中weekOfYear和weekOfWeekBasedYear的区别

这其实是计算一年中的周数(某日属于一年中的第几周)的两种算法。 简单来说,前者保证了1周不会跨越自然年的边界;后者保证了1周一定有7天,一定从某个DayOfWeek(如周一)开始,并且1周只…

时序预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络时间序列预测

时序预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络时间序列预测 目录时序预测 | MATLAB实现GWO-BiLSTM灰狼算法优化双向长短期记忆神经网络时间序列预测预测效果基本介绍模型描述程序设计参考资料预测效果 基本介绍 MATLAB实现GWO-BiLSTM灰狼算法优化双向长短…

每天花2小时恶补腾讯T8纯手打688页SSM框架和Redis,成功上岸美团

前言 我相信大家也都跟我一样,每天不是在加班就是在加班的路上,辛辛苦苦付出,可是得到的却不是很多。 这可能是大部分程序员的现状吧!! 最关键的是,整天都在CRUD、实现需求,真的想跟产品经理…

广发证券基于分布式架构的新一代估值系统实践

文 / 广发证券信息技术部 来源 / 金融电子化 随着信息技术应用创新试点范围不断扩大,能否胜任更多业务场景,是各行各业当前阶段选型数据库的关键。早在 2019 年,广发证券即开启对分布式架构的数据库产品进行调研,并经历了单主从读…

Git 提交模式

Git 对我们 Devs 的使用是必不可少的,无论是在个人项目中,还是在多人开源项目或整个社区中。鉴于此,正确使用 git commit很重要。拥有连贯和标准化的语言有助于参与项目的每个人理解已经发生的变化。在上图中,我们看到了评论不当的…

Camtasia2023简体中文版支持4K超清屏幕录屏

Camtasia 2023是TechSmith出品的一款屏幕录像和编辑的软件,可轻松录制和分享高质量的截屏视频,提供所需的工具和功能。功能强大的视频编辑器,通过记录您的屏幕活动和网络摄像头流,帮助您创建具有专业外观的截屏视频。软件提供了强…

“华为杯”研究生数学建模竞赛2005年-【华为杯】B题:空中加油问题的递推模型与调度策略

赛题描述 对飞行中的飞机进行空中加油,可以大大提高飞机的直航能力。为了简化问题,便于讨论,我们作如下假设。 少辅机架数两种情况给出你的作战方案。 论文 摘要 : 本文首先对空中加油问题进行了分析,提取了相关性质,在此基础上 建立了问题的递推模型。根据该模型,文…

使用DcokerCompose部署微服务项目详解

一、项目结构 我这里准备了一个微服务项目。 里面包含三个服务模块: card-service、use-rservice以及网关gateway。 一个公共模块: fegin-api。 其中fegin-api被card-service和user-service引用。 二、基于项目构建部署目录结构 这个springcloud-a…

电子档案备份相对于数据备份的特别之处

最近在和档案馆信息部门领导交流过程中,他们提出了一个很实际的困惑:《“十四五”全国档案事业发展规划》(以下简称:《十四五规划》)中明确提出了“电子档案备份中心”建设,并且要求“扎实做好档案数字资源…

检索业务:排序和价格区间及库存

排序 点击某个排序时首先按升序显示,再次点击再变为降序,并且还会显示上升或下降箭头 页面排序跳转的思路是通过点击某个按钮时会向其class属性添加/去除desc,并根据属性值进行url拼接 点击排序时 $(".sort_a").click(function () …

如何恢复回收站被清空的文件?你必须要知道的4种方法

电脑回收站里面有很多我们之前删除的文件,如果想要恢复这些文件,直接还原就可以了。但是回收站里面的数据被清空了怎么办?如何恢复回收站被清空的文件?接下来就给大家分享一些恢复回收站文件被删除的方法! 方法一、使用…