flume的一些使用
一、第一层采集通道的编写
1.第一层采集脚本Source的选择
①Source:
数据源在日志文件中!
读取日志中的数据,可以使用以下Source
ExecSource: 可以执行一个linux命令,例如tail -f 日志文件,
讲读取的到的数据封装为Event!
不用!不安全,可能丢数据!
SpoolingDirSource: 可以读取一个目录中的文本文件!
保证目录中没有重名的文件!
保证目录中的文件都是封闭状态,一旦放入目录中,不能再继续写入!
每个日志封闭后,才能放入到SpoolingDir,不然agent就故障!
TailDirSource: 接近实时第读取指定的文件!断点续传功能!
使用此Source!
使用TailDirSource
②Channel:
KafkaChannel:
优点: 基于kafka的副本功能,提供了高可用性!event被存储在kafka中!
即便agent挂掉或broker挂掉,依然可以让sink从channel中读取数据!
应用场景:
①KafkaChannel和sink和source一起使用,单纯作为channel。
②KafkaChannel+拦截器+Source,只要Source把数据写入到kafka就完成
目前使用的场景!
③KafkaChannel+sink,使用flume将kafka中的数据写入到其他的目的地,例如hdfs!
为例在上述场景工作,KafkaChannel可以配置生产者和消费者的参数!
配置参数:
①在channel层面的参数,例如channel的类型,channel的容量等,需要和之前一样,
在channel层面配置,例如:a1.channel.k1.type
②和kafka集群相关的参数,需要在channel层面配置后,再加上kafka.
例如: a1.channels.k1.kafka.topic : 向哪个主题发送数据
a1.channels.k1.kafka.bootstrap.servers: 集群地址
③和Produer和Consumer相关的参数,需要加上produer和consumer的前缀:
例如:a1.channels.k1.kafka.producer.acks=all
a1.channels.k1.kafka.consumer.group.id=atguigu
必须的配置:
type=org.apache.flume.channel.kafka.KafkaChannel
kafka.bootstrap.servers=
可选:
kafka.topic: 生成到哪个主题
parseAsFlumeEvent=true(默认):
如果parseAsFlumeEvent=true,kafkaChannel会把数据以flume中Event的结构作为参考,
把event中的header+body放入ProducerRecord的value中!
如果parseAsFlumeEvent=false,kafkaChannel会把数据以flume中Event的结构作为参考,
把event中body放入ProducerRecord的value中!
a1.channels.k1.kafka.producer.acks=0
2. 拦截器
日志数据有两种类型,一种是事件日志,格式 时间戳|{"ap":xx,"cm":{},"et":[{},{}]}
另一种是启动日志,格式:{"en":"start"}
在1个source对接两个KafkaChannel时,需要使用MulitPlexing Channel Selector,
讲启动日志,分配到启动日志所在的Chanel,讲事件日志分配到事件日志所在的Channel!
MulitPlexing Channel Selector根据event,header中指定key的映射,来分配!
需要自定义拦截器,根据不同的数据类型,在每个Event对象的header中添加key!
功能: ①为每个Event,在header中添加key
②过滤不符合要求的数据(格式有损坏)
启动日志: {},验证JSON字符串的完整性,是否以{}开头结尾
事件日志: 时间戳|{}
时间戳需要合法:
a)长度合法(13位)
b)都是数字
验证JSON字符串的完整性,是否以{}开头结尾
一、第二层采集通道的设计分析
1.目的
讲已经存储在kafka集群中的数据,使用flume上传到HDFS!
2. 架构设计
课件上推荐的:
数据源在kafka,因此需要使用一个可以对接kafka的source,即kafkaSource
为了安全起见,选择filechannel
目的地在hdfs,使用hdfssink
自己尝试:
kafkaChannel+hdfssink
3. 组件分析
①kafkaSource:kafkaSource就是kafka的一个消费者线程,可以从指定的主题中读取数据!
如果希望提供消费的速率,可以配置多个kafkaSource,这些source组成同一个组!
kafkaSource在工作时,会检查event的header中有没有timestamp属性,如果没有,
kafkaSource会自动为event添加timestamp=当前kafkaSource所在机器的时间!
kafkaSource启动一个消费者,消费者在消费时,默认从分区的最后一个位置消费!
必须的配置:
type=org.apache.flume.source.kafka.KafkaSource
kafka.bootstrap.servers=hadoop102:9092,hadoop103:9092,hadoop104:9092
kafka.topics=消费的主题
kafka.topics.regex=使用正则表达式匹配主题
可选的配置:
kafka.consumer.group.id=消费者所在的组id
batchSize=一次put多少数据,小于10000
batchDurationMillis=一次put可以最多使用多少时间
和kafkaConsumer相关的属性:kafka.consumer=consumer的属性名
例如:kafka.consumer.auto.offset.reset
②fileChannel: channel中的event是存储在文件中!比memorychannel可靠,但是效率略低!
必须的配置:
type=file
checkpointDir=checkpoint线程(负责检查文件中哪些event已经被sink消费了,将这些event的文件删除)保存数据的目录!
useDualCheckpoints=false 是否启动双检查点,如果启动后,会再启动一个备用的checkpoint线程!
如果改为true,还需要设置backupCheckpointDir(备用的checkpoint线程的工作目录)
dataDirs=在哪些目录下保存event,默认为~/.flume/file-channel/data,可以是逗号分割的多个目录!
③hdfssink: hdfssink将event写入到HDFS!目前只支持生成两种类型的文件: text | sequenceFile,这两种文件都可以使用压缩!
写入到HDFS的文件可以自动滚动(关闭当前正在写的文件,创建一个新文件)。基于时间、events的数量、数据大小进行周期性的滚动!
支持基于时间和采集数据的机器进行分桶和分区操作!
HDFS数据所上传的目录或文件名可以包含一个格式化的转义序列,这个路径或文件名会在上传event时,被自动替换,替换为完整的路径名!
使用此Sink要求本机已经安装了hadoop,或持有hadoop的jar包!
配置:
必须配置:
type – The component type name, needs to be hdfs
hdfs.path – HDFS directory path (eg hdfs://namenode/flume/webdata/)
参考:
a1.sinks.k1.type = hdfs
#一旦路径中含有基于时间的转义序列,要求event的header中必须有timestamp=时间戳,如果没有需要将useLocalTimeStamp = true
a1.sinks.k1.hdfs.path = hdfs://hadoop101:9000/flume/%Y%m%d/%H/%M
#上传文件的前缀
a1.sinks.k1.hdfs.filePrefix = logs-
#以下三个和目录的滚动相关,目录一旦设置了时间转义序列,基于时间戳滚动
#是否将时间戳向下舍
a1.sinks.k1.hdfs.round = true
#多少时间单位创建一个新的文件夹
a1.sinks.k1.hdfs.roundValue = 1
#重新定义时间单位
a1.sinks.k1.hdfs.roundUnit = minute
#是否使用本地时间戳
a1.sinks.k1.hdfs.useLocalTimeStamp = true
#积攒多少个Event才flush到HDFS一次
a1.sinks.k1.hdfs.batchSize = 100
#以下三个和文件的滚动相关,以下三个参数是或的关系!以下三个参数如果值为0都代表禁用!
#60秒滚动生成一个新的文件
a1.sinks.k1.hdfs.rollInterval = 10
#设置每个文件到128M时滚动
a1.sinks.k1.hdfs.rollSize = 134217700
#每写多少个event滚动一次
a1.sinks.k1.hdfs.rollCount = 0
#以不压缩的文本形式保存数据
a1.sinks.k1.hdfs.fileType=DataStream
flume的一些使用的更多相关文章
- Flume1 初识Flume和虚拟机搭建Flume环境
前言: 工作中需要同步日志到hdfs,以前是找运维用rsync做同步,现在一般是用flume同步数据到hdfs.以前为了工作简单看个flume的一些东西,今天下午有时间自己利用虚拟机搭建了 ...
- Flume(4)实用环境搭建:source(spooldir)+channel(file)+sink(hdfs)方式
一.概述: 在实际的生产环境中,一般都会遇到将web服务器比如tomcat.Apache等中产生的日志倒入到HDFS中供分析使用的需求.这里的配置方式就是实现上述需求. 二.配置文件: #agent1 ...
- Flume(3)source组件之NetcatSource使用介绍
一.概述: 本节首先提供一个基于netcat的source+channel(memory)+sink(logger)的数据传输过程.然后剖析一下NetcatSource中的代码执行逻辑. 二.flum ...
- Flume(2)组件概述与列表
上一节搭建了flume的简单运行环境,并提供了一个基于netcat的演示.这一节继续对flume的整个流程进行进一步的说明. 一.flume的基本架构图: 下面这个图基本说明了flume的作用,以及f ...
- Flume(1)使用入门
一.概述: Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X ...
- 大数据平台架构(flume+kafka+hbase+ELK+storm+redis+mysql)
上次实现了flume+kafka+hbase+ELK:http://www.cnblogs.com/super-d2/p/5486739.html 这次我们可以加上storm: storm-0.9.5 ...
- flume+kafka+spark streaming整合
1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...
- flume使用示例
flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受 ...
- Hadoop学习笔记—19.Flume框架学习
START:Flume是Cloudera提供的一个高可用的.高可靠的开源分布式海量日志收集系统,日志数据可以经过Flume流向需要存储终端目的地.这里的日志是一个统称,泛指文件.操作记录等许多数据. ...
- Flume NG Getting Started(Flume NG 新手入门指南)
Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...
随机推荐
- PyQt(Python+Qt)学习随笔:QTreeView树形视图的animated属性
老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的animated属性用于控制视图在展开或收缩分支时是否展示动画,如果对应 ...
- Scrum 冲刺第四天
一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:搜寻测试相关的资料 今日工作计划:编写测试计划 工作中遇到的困难:对测试接触得较少,有点头疼 张润柏: 昨天已完成的 ...
- js原生方法map实现
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- CSP-S 2019 Solution
Day1-T1 格雷码(code) 格雷码是一种特殊的 \(n\) 位二进制串排列法,要求相邻的两个二进制串恰好有一位不同,环状相邻. 生成方法: \(1\) 位格雷码由两个 \(1\) 位的二进制串 ...
- Luogu-P3205-HNOI2010-合唱队
题目地址 思路 这道题其实是P3146 [USACO16OPEN]248的升级版,但是N的范围很大,为262144.原先的O(N3)的方法自然会TLE,甚至O(N2)的方法也不足以解决. 定义f[i] ...
- 深入理解Java虚拟机(七)——类文件结构
Java的无关性 由于计算机领域中有很多操作系统和硬件平台同时在竞争,所以,很多编程语言的程序设计会与其运行的平台和操作系统产生耦合,这样就大大增加了程序员的工作,为了适应不同的平台,需要修改很多代码 ...
- 箭头函数this指向问题
this指向本质 箭头函数this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this ...
- Python不同包之间调用注意事项
1.不同包之间调用,因为在不同文件夹下,引用的时候加上包名就可以了.运行时,在eclipse直接运行没有问题.但是在,命令行运行时出现找不到模块的错误.原因是,Python只搜索当前目录和内置模块以及 ...
- antDesign中排序sorter的坑
antd中sorter是写在columns中的一个配置,结果为一个回调函数 如图,这是我项目中使用sorter的小例子,参数a,b分别为列表第0项数据和第1项数据.回调函数中return一个值,按照什 ...
- oracle 11.2.0.4下载
Oracle 11.2.0.4下载地址 Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_L ...