一、概念

flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。

Flume系统中核心的角色是agent,agent本身是一个Java进程,一般运行在日志收集节点。
一个agent内部有三个组件:
Source:采集源,用于跟数据源对接,以获取数据
Channel:agent内部的数据传输通道,用于从source将数据传递到sink
Sink:下沉地,采集数据的传送目的,用于往下一级agent传递数据或者往最终存储系统传递数据

event:Flume内部数据传输的最基本单元,event将传输的数据进行封装。如果是文本文件,通常是一行记录,event也是事务的基本单位。

  event从source,流向channel,再到sink,本身为一个字节数组,并可携带headers(头信息)信息。
  event代表着一个数据的最小完整单元,从外部数据源来,向外部的目的地去。

二、数据传输

2.1 flume传输数据时会使用事务

  source推送数据到channel以及sink从channel拉取数据时都是以事务方式进行的。

  比如sink输出数据完毕后应该将channel中缓存的数据删除,sink输出数据和channel删除数据是一个事务里面的,要么都成功要么都失败

2.2 常见source和sink

类别   类型 描述
source Avro Source Avro Source监听Avro端口,接收从外部Avro客户端发送来的数据流
source Exec Source 这个source在启动时运行给定的Unix命令,并期望该进程在标准输出上连续生成数据
source Spooling Directory Source 监控指定目录内的数据变更
source Netcat Source 监控某个端口,将流经端口的每一个文本行数据作为event输入
source Http Source 基于Http Post或者Get方式的数据源,支持JSON,BLOB表示形式
Channel Memory Channe Event数据存储在内存中
Channel File Channel Event数据存储在磁盘文件中
Sink kafka kafka
Sink hdfs hdfs
Sink hive等技术 hive等技术

2.3 简单配置参考

# 首先先给agent起一个名字 叫a1
# 分别给source channel sink取名字
a1.sources = r1
a1.channels = c1
a1.sinks = k1 # 分别对source、channel、sink进行配置
# 配置source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /usr/local/data/test
a1.sources.r1.fileSuffix = .ok
a1.sources.r1.fileHeader = true # 配置sink
# 使用logger作为sink组件,可以将收集到数据直接打印到控制台
a1.sinks.k1.type = logger # 配置channel
# 将channel的类型设置为memory,表示将event缓存在内存中
a1.channels.c1.type = memory # 组装
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2.4 启动

flume-ng agent -n a1 -f spoolTolog.conf

-n 的含义是agent的名字,与上面conf文件里面的agent名字保持一致
-f 的含义是conf文件位置,这里的spoolTolog.conf 就是我上面编写的conf文件名称

flume1.9 中文文档:https://flume.liyifeng.org/

2.5 新建文件写入些内容,看flume内容

a1.sources.r1.spoolDir = /usr/local/data/test
到这个目录下面创建一个 a.txt 文件,在里面随便写一些数据,然后再来看flume这边

回到a.txt 文件所在的目录下面

上图中消息内容以Event传递,event里面分为两个部分,分别是 header 和 body
header信息,event的头信息,这里显示的内容是file路径,是因为conf文件里面加上了a1.sources.r1.fileHeader = true参数
body信息,body信息又分为两个部分,后半部分的123是 a.txt 文件里面的内容,而前面的31,32,33则分别是 1,2,3的十六进制ASCII码值

2.6 拦截器

flume监听指定目录下的文件数据变更信息,对于这些信息可以全盘保留,然后以指定的sink方式输出。但是也可以通过拦截器的方式,根据需要过滤或者保留一些信息,然后只会把拦截器拦截过后的这一部分信息传输到sink

# 首先先给agent起一个名字 叫a1
# 分别给source channel sink取名字
a1.sources = r1
a1.channels = c1
a1.sinks = k1 # 分别对source、channel、sink进行配置
# 配置source
a1.sources.r1.type = spooldir
a1.sources.r1.spoolDir = /usr/local/data/test
a1.sources.r1.fileSuffix = .ok
a1.sources.r1.fileHeader = true # 给r1这个souces配置一个拦截器并取名为 i1
a1.sources.r1.interceptors = i1
# 将拦截器i1的类型设置为regex_filter 会根据正则表达式过滤数据
a1.sources.r1.interceptors.i1.type = regex_filter
# 配置正则表达式
a1.sources.r1.interceptors.i1.regex = \\d{3,6}
# excludeEvents = true 表示将匹配到的过滤,未匹配到的放行
# excludeEvents = false 表示只传输匹配成功的
a1.sources.r1.interceptors.i1.excludeEvents = true # 配置sink
# 使用logger作为sink组件,可以将收集到数据直接打印到控制台
a1.sinks.k1.type = logger # 配置channel
a1.channels.c1.type = memory # 组装
a1.sources.r1.channels = c1
a1.sinks.k1.channel = c1

2.7 测试拦截器

12
123
123456
12345678
ab
abcde
123abc

这里只输出了 12,ab,abcde,以及最后的一个空行

a1.sources.r1.interceptors.i1.excludeEvents = true,true表明匹配正则表达式成功则被拦截,不会放行

2.8 hbase输出日志到hdfs

# 起名字
a.sources = r1
a.sinks = k1
a.channels = c1 # 配置source,这次选用 exec source
a.sources.r1.type = exec
# 指定exec source通过执行什么命令来获取信息
a.sources.r1.command = tail -f /usr/local/soft/hbase-1.4.6/logs/hbase-root-master-master.log #配置sink
a.sinks.k1.type = hdfs
a.sinks.k1.hdfs.path = /flume/data/dir2
a.sinks.k1.hdfs.filePrefix = hbaselog
a.sinks.k1.hdfs.rollSize = 102400
a.sinks.k1.hdfs.rollCount = 1000
a.sinks.k1.hdfs.fileType = DataStream
a.sinks.k1.hdfs.writeFormat = text
a.sinks.k1.hdfs.fileSuffix = .txt #配置channel
a.channels.c1.type = memory
a.channels.c1.capacity = 1000
a.channels.c1.transactionCapacity = 100 # 组装
a.sources.r1.channels = c1
a.sinks.k1.channel = c1

2.9 监听端口输出到控制台

# 起名字
a.sources = r1
a.sinks = k1
a.channels = c1 # 配置source
a.sources.r1.type = netcat
# 0.0.0.0表示接收任意ip的用户提交的信息
a.sources.r1.bind = 0.0.0.0
# 设置监听端口
a.sources.r1.port = 8888 #配置sink
a.sinks.k1.type = logger # 配置channel
a.channels.c1.type = memory
a.channels.c1.capacity = 1000
a.channels.c1.transactionCapacity = 100 # 组装
a.sources.r1.channels = c1
a.sinks.k1.channel = c1

如果a.sources.r1.bind = 0.0.0.0 这里设置的bind是127.0.0.1表示,只接受这个ip发来的信息,其余ip的信息不会被被flume接收。而设置为0.0.0.0则是任意ip的信息都会被flume监听接收

先启动flume,然后通过telnet在8888端口发送信息

参考链接:https://blog.csdn.net/qq_44823756/article/details/121832406

Flume概念和启动过程分析的更多相关文章

  1. [HDFS_add_1] HDFS 启动过程分析

    0. 说明 HDFS 文件概念 && HDFS 启动过程分析 1. HDFS 文件概念 [1.1 NameNode 职能] 存储文件类型.大小.权限.路径等等元数据 通过 edits( ...

  2. ASP.Net Core MVC6 RC2 启动过程分析[偏源码分析]

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢? .NET Web Development and Tools Blog ASP.NE ...

  3. 【Bootloader】bootloader启动过程分析

    Boot Loader启动过程分析 一.    Boot Loader的概念和功能 1.嵌入式Linux软件结构与分布在一般情况下嵌入式Linux系统中的软件主要分为以下及部分: (1)引导加载程序: ...

  4. Net Core MVC6 RC2 启动过程分析

    入口程序 如果做过Web之外开发的人,应该记得这个是标准的Console或者Winform的入口.为什么会这样呢?.NET Web Development and Tools Blog ASP.NET ...

  5. Linux内核分析(三)内核启动过程分析——构造一个简单的Linux系统

    一.系统的启动(各历史节点) 在最开始的时候,计算机的启动实际上依靠一段二进制码,可以这么理解,他并不是一个真正的计算机启动一道程序.计算机在开始加电的时候几乎是没有任何用处的,因为RAM芯片中包括的 ...

  6. 开机SystemServer到ActivityManagerService启动过程分析

    开机SystemServer到ActivityManagerService启动过程 一 从Systemserver到AMS zygote-> systemserver:java入层口: /** ...

  7. CDH中flume是已经启动着了…

    文章来自:http://www.cnblogs.com/hark0623/p/4174646.html   转发请注明 在CDH中用了几天flume后才发现,原来CDH中的flume默认是启动的……… ...

  8. Neutron分析(2)——neutron-server启动过程分析

    neutron-server启动过程分析 1. /etc/init.d/neutron-server DAEMON=/usr/bin/neutron-server DAEMON_ARGS=" ...

  9. linux视频学习7(ssh, linux启动过程分析,加解压缩,java网络编程)

    回顾数据库mysql的备份和恢复: show databases; user spdb1; show tables; 在mysql/bin目录下 执行备份: ./mysqldump -u root - ...

  10. Activity启动过程分析

    Android的四大组件中除了BroadCastReceiver以外,其他三种组件都必须在AndroidManifest中注册,对于BroadCastReceiver来说,它既可以在AndroidMa ...

随机推荐

  1. go 编译超时解决

    转载请注明出处: 在编译go项目时,遇到依赖下载超时,异常输出如下: CGO_ENABLED=0 GOOS=linux GO111MODULE=on go build -a -ldflags '-ex ...

  2. ZCMU-1156

    思路: 要改变的是一个范围的情况,所以正常情况下会超时. 查阅后知道应该用一个叫做树状数组的结构. 查阅和树状数组的后续情况 这个也不错 注意: 我没怎么看懂,可能没太仔细看. 树状数组当中存在的是前 ...

  3. C#委托的前世今生

    一.前言 大家好!我是付工. 十年前,刚开始学C#编程的时候,被委托困扰了很久. 今天跟大家分享一下关于委托的那些事儿. 二.委托原理 什么是委托? 抛开编程,委托是一个汉语词语,指的是把事情托付给别 ...

  4. PL/SQL中文乱码修正

    我根据需求,,需要修改 数据库的部分表格的部分字段,然而在Update的时候,出现了中文乱码(Type字段). 此时,我用的是客户端,服务器没有安装,在另一台机器上,所以,我需要做的是修改客户端编码: ...

  5. Prometheus 3.0.0 升级中遇到的 `--storage.tsdb.retention` 错误的修复方法

    在将 Prometheus 升级到 3.0.0 后,许多用户会遇到以下错误: Error parsing command line arguments: unknown long flag '--st ...

  6. 一款渗透测试信息收集集成工具--mitan密探

    本工具仅供安全测试人员运用于授权测试, 禁止用于未授权测试, 违者责任自负.作者及本公众号相关负责人不对您使用该工具所产生的任何后果负任何法律责任,在扫描模块使用多线程,在测试过程中根据目标的实际情况 ...

  7. Mplus数据分析:性别差异gendergap的相关研究如何做?

    再出一篇用mplus做的多组比较和中介分析的文章,专门谈谈诸如性别差异的各种研究的分析方法,从本文中大家不止可以知道性别差异,各种差异,各种gap只要你感兴趣都可以套进来这个方法来进行你的研究设计. ...

  8. 2.mysql授权认证

    权限系统介绍 ● 什么是权限系统 权限系统是授予来自某个主机的某个用户可以查询.插入.修改.删除等数据库操作的权限 不能明确的指定拒接某个用户的连接 权限控制(授权与收回)的执行语句包括 create ...

  9. 【C#】【平时作业】习题-6-静态成员

    习题-6静态成员 一.概念题 1. 什么是静态成员 被static修饰的成员,叫做静态成员.静态成员是属于类的.通过类名直接访问. 当类第一次被访问的时候,就会将这个类下面的所有的静态成员创建在内存当 ...

  10. 区块链技术已经衰落了吗?(区块链已die)

    区块链技术已经好多年没有听到有人提了,不过比特币却一直是不是的又新闻出现,当然国内已经把比特币交易归入到了不合法的地位了.区块链技术是国家战略的技术,但是这个技术说实话确实不是很高深,或者说蛮easy ...