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全局选 ...
随机推荐
- robot framework 接口自动化测试和关键字开发
https://www.cnblogs.com/laoqing/p/10787593.html 1.实战-接口自动化测试实例 1.1 接口测试 接口测试通常是系统之间交互的接口,或者某个系统对外提供的 ...
- ES6新特性之箭头函数与function的区别
写法不同 // function的写法 function fn(a, b){ return a+b; } // 箭头函数的写法 let foo = (a, b) =>{ return a + b ...
- LeetCode初级算法之数组:350 两个数组的交集 II
两个数组的交集 II 题目地址:https://leetcode-cn.com/problems/intersection-of-two-arrays-ii/ 给定两个数组,编写一个函数来计算它们的交 ...
- 美国SEC主席离任,Panda Global 前瞻数字资产监管政策变化
在上上个周末,也就是6月20号,美国的证券行业发生了一件值得反复回味的的事情--美国SEC现任主席Jay Clayton宣布即将离任,对于数字资产行业而言,未来监管政策将如何演变突然有了无限的遐想空间 ...
- STL-Vector容量问题:
1.clear,erase ,pop_back() 函数只删除对象,并没有释放vec中的内存,若对象是指针还需要delete:2.在erase,clear,pop_back()删除对象的后,size改 ...
- 不会吧不会吧,还有开发不会Java填充PDF模板数据的,赶紧看看吧
思路 根据业务需求,获取实际业务数据,借助itext库功能,将业务数据填充入提前制作好的PDF模板中 操作步骤 制作PDF模板:提前下载好Adobe Acrobat Pro DC 效果展示 准备PDF ...
- 06 python开发之函数
06 python开发之函数 目录 06 python开发之函数 6 函数 6.1 基本使用 6.1.1 基本概念 6.1.2 定义函数 6.2 调用函数与函数返回值 6.2.1 调用函数三种形式 6 ...
- Python使用requests发送请求
Python使用第三方包requests发送请求,实现接口自动化 发送请求分三步: 1.组装请求:包括请求地址.请求头header.cookies.请求数据等 2.发送请求,获取响应:支持get.po ...
- vscode vue快速新建模板
vscode 文件=>首选项 =>用户代码片段 =>新建全局代码片段 { "Print to console": { " ...
- ssh 免密码登陆设置不成功
记一次centos6设置免密码登陆设置不成功的解决.自己挖的坑自己填. ssh 免密码登陆设置( 正常情况下是这样的,设置成功后登陆主机是不需要密码的) [root@master .ssh]# ssh ...