Flume学习笔记

news2025/1/8 5:10:29

1 简介

(1) Apache Flume是一个分布式、可信任的数据采集、日志收集弹性系统(框架),用于高效收集、汇聚和移动大规模日志信息从多种不同的数据源到一个集中的数据存储中心(HDFS、Hbase或者本地文件系统)

(2) 可信任是指保证消息有效的处理和传递:

  1. 如果节点出现异常、导致数据传输过程中断,进行数据回滚,或者数据重发;
  2. 对于同一节点,source向channel写数据,是一个一个批次写的,如果该批次内的数据出现异常,则不会写入channel中,同批次其他正常数据也不会写入channel中(但是,如果已经接受到的部分数据,对这部分进行抛弃),依靠上一节点重新发送数据。

(3) 数据来源:Console、RPC、Text、Tail、Syslog、Exec

(4) Flume接收到的数据可以输出到哪里?

磁盘、hdfs、hbase、网络传输给下游、Kafka

(5) Flume的核心:agent,一个完整的数据收集工具

(6) Flume中最基本的数据单元:Event

(7) Flume 基于流式架构,容错性强,也很灵活简单。

(8) Flume、 Kafka 用来实时进行数据收集,Spark、 Storm 用来实时处理数据, impala 用来实时查询。

(9) 数据处理流程:数据源---->数据采集---->缓冲器---->过滤---->转换---->存储---->索引--->分析

Data—>flume—>kafka—>storm—>(Streaming) —>hbase(nosql/httpapi)

2 特点

(1) Flume可以高效率的将多个网站服务器中收集的日志信息存入HDFS/Hbase中。

(2) 使用Flume,可以将从多个服务器中获取的数据迅速的移交给Hadoop中。

(3) 支持各种接入资源数据的类型以及接出数据类型。

(4) 可以被水平扩展和垂直扩展。

(5) 支持多路径流量,多管道接入流量,多管道接出流量,上下文路由等。

多管道接入即多个数据源,比如log1是收集展现日记,log2是收集点击日记,多管道接出即多个后端存储,存储后也可以是不同的存储方法。

(6)flume中的数据存储,两种方法:

  1. 复用机制:后端指定的存储节点才会存储指定的数据(一对一)
  2. 复制机制:后端的所有节点都会存储一份数据(一对多)

3 架构

(1) 数据发生器:即日志服务器,产生的数据被单个的运行在数据发生器所在服务器的agent收集,之后数据收容器从各个agent上汇集数据并将采集的数据存入到HDFS或者Hbase中

(2) agent:代理模块,对消息进行接收和汇集,与日记服务器同一节点

(3) data collector:接收agent之后的数据,处理之后再发送给后端存储

(4) agent与collector是在不同节点,解耦

(5) agent与server机器一比一,多个agent对应一个collector

4 Event

(1) 数据单位:storm(tuple)、HDFS(block)、Flume(Event事件);

(2) Flume使用Event对象来作为传递数据的格式,是内部数据传输的最基本单元;

(3) Event有两部分:转载数据的字节数组(body)+可选头部(header);

(4) Body:是一个字节数组,存储实际数据;

(5) Header:是key/value形式的,根据key给后端分发。相当于partition分桶;

可以用来制造路由决策或者携带其它结构化信息(如事件的时间戳或事件来源的服务器主机名)。可以把它想象成和HTTP头一样提供相同的功能---通过该方法传输正文之外的额外信息。Flume提供不同的source会给其他生成的event添加不同的header。

5 Agent(代理)

(1) Flume内部有一个或多个Agent;

(2) 每一个Agent是一个独立的守护进程(JVM);

(3) 从客户端收集数据,或者从其他Agent那接收数据,然后迅速的将获得的数据传给下一个节点的Agent;

(4) Agent主要由source、channel、sink三个组件组成,必须要有的,可选的有interceptor、selector,根据业务配置。五者位置如下。

6 Source(数据源)

(1) Source是一个Flume源;

(2) 负责一个外部源(数据发生器)数据接收,如一个web服务器传递给它的事件;

(3) Source将接收的数据转换成flume可以识别的格式,这个格式就是event;

(4) 当一个Flume源接收到一个事件时,其将通过一个或者多个通道存储该事件。

7 Channel(通道/存储)

(1) 事件传输的通道;

(2) 采用被动存储的形式,即通道会缓存该事件直到该事件被sink组件异步处理;

(3) Channel是一种短暂的存储容器,它将从source处接收到的event格式的数据存储起来,直到它们被sinks消费掉,它在source和sink间起着一共桥梁的作用,channel是一个完整的事务,这一点保证了数据在收发的时候的一致性,并且它可以和任意数量的source和sink链接;

(4) 可以通过参数设置event的最大个数,流量控制。

(5) 数据从source接收后,会先在channel做缓存,缓存形式有两种,文件形式(FileChannel)和内存形式(Memeory Channel):

  1. Memory Channel:内存存储事务,吞吐率极高,,速度快,但存在丢数据风险;
  2. Flie Channel:本地磁盘的事务实现模式,保证数据不会丢失(WAL实现)。

(6) Flume通常选择FileChannel,而不使用MemeoryChannel;

(7) 存储到内存还是存储到文件可通过配置文件去配置,建议用文件形式;

(8) 当数据传输完成后,该事件才能被通道移除,保证可靠性。

8 Sink()

(1) Sink会将事件从Channel中移除,并将event放置到外部数据介质(HDFS)上

(2) 例如:通过Flume HDFS Sink将数据放置到HDFS中,或者放置到下一个Flume的Source,等到下一个Flume处理。

(3) 对于缓存在通道中的事件,Source和Sink采用异步处理的方式

(4) Sink成功取出Event后,将Event从channel中移除

(5) Sink必须作用于一个确切的Channel

(6) 数据以哪种存储形式落地是由不同类型的Sink决定的:

  1. 存储event到最终目的的终端:HDFS、Hbase
  2. 自动消耗:Null Sink
  3. 用于Agent之间通信:Avro

9 Interceptor(拦截器)

(1) interceptor是在你的数据源和你的source之间的一个环节,那这个环节相当于就是可以对你的数据源提前会做一个过滤;

(2) Interceptor用于Source的一组拦截器,按照预设的顺序必要地方对events进行过滤和自定义的处理逻辑实现;

(3) 在app(应用程序日志)和source之间的,对app日志进行拦截处理的。也即在日志进入source之前,对日志进行一些包装、清新过滤等等动作;

(4) 官方提供的已有的拦截器有:

Timestamp Interceptor:在event的header中添加一个key叫:timestamp,value为当前的时间戳;

Host Interceptor:在event的header中添加一个key叫:host,value为当前机器的hostname或者ip;

Static Interceptor:可以在event的header中添加自定义的key和value;

Regex Filtering Interceptor:通过正则来清洗或包含匹配的events;

Regex Extractor Interceptor:通过正则表达式来在header中添加指定的key,value则为正则匹配的部分;

(5) Flume的拦截器也是chain(链)形式的,即可以对一个source指定多个拦截器,按先后顺序依次处理。

(6) 这里的拦截并不等于过滤。

10 selector(通道选择器)

(1) selector是有点类似于路由选择

(2) 位于source和channel之间,故称通道选择器,主要有两种类型:

Replicating(复制) ChannelSelector (default):将source过来的events发往所有channel;

Multiplexing(复用) ChannelSelector:而Multiplexing 可以选择该发往哪些channel。

(3) 对于有选择性选择数据源,明显需要使用Multiplexing这种分发方式

(4) 问题:Multiplexing需要判断header里指定key的值来决定分发到某个具体的channel,如果demo和demo2同时运行在同一个服务器上,如果在不同的服务器上运行,可以在source1上加上一个host拦截器,这样可以通过header中的host来判断event该分发给哪个channel,而这里是在同一个服务器上,由于host是是区分不出日志来源的,必须想办法在header中添加一个key来区分日志的来源。

可以通过设置上游不同的Source解决问题。

(5) 广播:复制出多份信息,下游每一个节点都同时接收同样的消息。

11 可靠性

(1) 可靠性:主要和channel类型有关;channel两种类型:file,memory

(2) Flume保证单次跳转可靠性的方式:传送完成后,该事件才会从通道中移除

(3) Flume使用事务性的方法来保证事件交互的可靠性。

(4) 整个处理过程中,如果因为网络中断或者其他原因,在某一步被迫结束了,这个数据会在下一次重新传输。

(5) Flume可靠性还体现在数据可暂存上面,当目标不可访问后,数据会暂存在Channel中,等目标可访问之后,再进行传输。

(6) Source和Sink封装在一个事务的存储和检索中,即事件的放置或者提供由一个事务通过通道来分别提供。这保证了事件集在流动中可靠地进行端到端的传递。

(7) 传递事件过程

  1. Sink开启事务
  2. Sink从Channel中获取数据
  3. Sink把数据传给另一个FlumeAgent的Source中
  4. Source开启事务
  5. Source把数据传给Channel
  6. Source关闭事务
  7. Sink关闭事务

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

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

相关文章

聊聊Go语言的控制语句

在高级编程语言中,控制流语句(control-flow statement)是一类用于控制程序执行流程的语句,以下简称为控制语句。它们可以根据条件或循环执行相应的代码块,或者跳转到指定位置执行代码。 常见的控制语句包括: 条件语句:…

【特征选择】基于二进制粒子群算法的特征选择方法(GRNN广义回归神经网络分类)【Matlab代码#32】

文章目录 【可更换其他算法,获取资源请见文章第6节:资源获取】1. 特征选择问题2. 二进制粒子群算法3. 广义回归神经网络(GRNN)分类4. 部分代码展示5. 仿真结果展示6. 资源获取 【可更换其他算法,获取资源请见文章第6节…

2023年Github学生包认证,提取JetBrains全家桶,认证Copilot 等多种权益

什么是GIthub学生包 1 Github学生包简而言之是可以白嫖100美刀的微软Azure(每年),200美刀的DigitalOcean金额(一年有效期)总计300刀可用来购买云服务器。 2 一年免费的.tech .me .live三种顶级域名(可以分…

Kubernetes 云原生 Gateway 网关

一、云原生定义 CNCF 对云原生的定义中提到了几个关键的点: 1、强调应用环境的动态性,像公有云、私有云、混合云等新型的动态环境已成为大多数应用的首选; 2、强调在跨多云部署应用时具备非云平台绑定的属性; 3、还强调了弹性扩展…

Python系列模块之标准库shutil详解

感谢点赞和关注 ,每天进步一点点!加油! 目录 一、shutil介绍 二 、使用详解 2.1 复制函数 2.1.1 shutil.copy 2.1.2 shutil.copy2 2.1.3 shutil.copyfile 2.1.4 shutil.copytree 2.2 移动文件 2.2.1 shutil.move 2.3 删除文件 2.3…

Vue-后台管理项目001---侧边栏

从浏览器上可以看出,他的返回值是promise(pending),所以我们可以用async,await来简化这个操作 await只能用在被async修饰的方法中,需要把仅挨着await的方法修饰成async 需要把仅挨着await的方法修饰成异步的async现在可以将这个da…

1-1 统计数字问题

题目: 我的答案: 一、信息 二、分析 1.如何选择数据结构? 2.如何选择算法有很多思路? 3.如何用文件实现输入输出? 三、思考 疑问1 我选择了一开始数组选择使用数组是一个不错的选择,尤其在这个问题中…

【网络协议详解】——DHCP系统协议(学习笔记)

目录 🕒 1. DHCP概述🕒 2. 工作过程🕒 3. DHCP的报文格式🕒 4. DHCP中继代理🕒 5. 实验:DHCP配置 🕒 1. DHCP概述 动态主机配置协议DHCP(Dynamic Host Configuration Protocol&…

TA-lib第三方库安装问题

因为学习的需要,用到Talib库做写指标分析,但是百度了好久,说是去要某某网站下载对应版本的文件进行本地安装,但是把…404 Not found 然后通过查找,Ta-lib库的安装已经迁移到这里了 https://github.com/TA-Lib/ta-lib-p…

【SpringBoot教程】SpringBoot+MybatisPlus数据库连接测试 用户收货信息接口开发

⛪ 专栏地址 系列教程更新中 🚀 文章介绍: SpringBootMybatisPlus组合可以大大加快开发效率,紧接上一篇文章的内容,这篇文章进行数据库的连接与查询测试,并配置日志输出调试 🚀 源码获取: 项目中的资料可以通过文章底部…

数据安全治理科技系统能力-数据安全复合治理框架和模型解读(3)

数据治理,数据安全治理行业在发展,在实践,所以很多东西是实践出来的,哪有什么神仙理论指导,即使有也是一家之说,但为了提高企业投产比,必要的认知是必须的,落地数据安全治理科技水平差异直接决定产品和项目是否可持续性,当前和未来更需要专业和有效创新。数据安全治理…

《数据库》期末考试复习手写笔记-第11章 并发控制(锁)【10分】

目录 知识点:封锁活锁死锁可串行化调度 考题1:可串行化调度 考题2:调度正确判断&共享锁写锁 考题3: 事务调度死锁 知识点:封锁活锁死锁可串行化调度 考题1:可串行化调度 考题2:调度正确判…

杨立昆:科学之路读书笔记2

杨立昆:科学之路读书笔记2 人工智能的低谷人工智能无所不能吗?谁将从AI人工智能革命中获益结语 一起学AI系列博客:目录索引 人工智能的低谷 上回分享了读书缘由,杨立昆的背景及其对人工智能的研究看法,这回分享他如何…

15.Kafka系列之事务原理及实践

我们先来回顾下6.Kafka系列之设计思想(四)-消息传递语义中的一些内容 1. 消息传递保证 At most once:最多一次。消息可能会丢失,但永远不会重新传递At least once:至少一次。消息永远不会丢失,但可能会重新传递Exactly once&…

rust 初识基础: 变量、数据类型、函数、所有权、枚举

了解到 rust 和 WebAssembly 的结合使用,可以构建前端应用,而且性能也比较好。初步学习使用 rust 是预编译静态类型语言。 安装 rust 官网下载 rust-CN , 大致了解下为什么选择:高性能、可靠性、生产力。 打开控制台啊,执行安装…

【Servlet】

目录 🎂1. 第一个 Servlet 程序:使用 Servlet 写 hello world 🥞1.1 创建项目 🍳1.2 引入依赖 🎃1.3 创建目录 🍘1.4 开始写代码 🌍1.5 打包代码 🍤1.6 部署 👑1…

如何在华为OD机试中获得满分?Java实现【获取最大软件版本号】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

使用kotlin用回溯法解决电话号码的字母组合问题

17. 电话号码的字母组合 难度中等 2474 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。 示例 1: 输入&#…

23种设计模式中之中介者模式(Mediator Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的迭代器模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。 如果文章有什么需要改进的地方还请大佬…

运维工程师面试总结(含答案)

运维工程师面试总结 原文链接:https://www.cuiliangblog.cn/detail/article/2 一、linux 1. linux系统启动流程 第一步:开机自检,加载BIOS第二步:读取MBR第三步:Boot Loader grub…