一、第一层采集通道的编写

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的一些使用的更多相关文章

  1. Flume1 初识Flume和虚拟机搭建Flume环境

    前言:       工作中需要同步日志到hdfs,以前是找运维用rsync做同步,现在一般是用flume同步数据到hdfs.以前为了工作简单看个flume的一些东西,今天下午有时间自己利用虚拟机搭建了 ...

  2. Flume(4)实用环境搭建:source(spooldir)+channel(file)+sink(hdfs)方式

    一.概述: 在实际的生产环境中,一般都会遇到将web服务器比如tomcat.Apache等中产生的日志倒入到HDFS中供分析使用的需求.这里的配置方式就是实现上述需求. 二.配置文件: #agent1 ...

  3. Flume(3)source组件之NetcatSource使用介绍

    一.概述: 本节首先提供一个基于netcat的source+channel(memory)+sink(logger)的数据传输过程.然后剖析一下NetcatSource中的代码执行逻辑. 二.flum ...

  4. Flume(2)组件概述与列表

    上一节搭建了flume的简单运行环境,并提供了一个基于netcat的演示.这一节继续对flume的整个流程进行进一步的说明. 一.flume的基本架构图: 下面这个图基本说明了flume的作用,以及f ...

  5. Flume(1)使用入门

    一.概述: Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集.聚合和传输的系统. 当前Flume有两个版本Flume 0.9X版本的统称Flume-og,Flume1.X ...

  6. 大数据平台架构(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 ...

  7. flume+kafka+spark streaming整合

    1.安装好flume2.安装好kafka3.安装好spark4.流程说明: 日志文件->flume->kafka->spark streaming flume输入:文件 flume输 ...

  8. flume使用示例

    flume的特点: flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统.支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受 ...

  9. Hadoop学习笔记—19.Flume框架学习

    START:Flume是Cloudera提供的一个高可用的.高可靠的开源分布式海量日志收集系统,日志数据可以经过Flume流向需要存储终端目的地.这里的日志是一个统称,泛指文件.操作记录等许多数据. ...

  10. Flume NG Getting Started(Flume NG 新手入门指南)

    Flume NG Getting Started(Flume NG 新手入门指南)翻译 新手入门 Flume NG是什么? 有什么改变? 获得Flume NG 从源码构建 配置 flume-ng全局选 ...

随机推荐

  1. PyQt(Python+Qt)学习随笔:QTreeView树形视图的animated属性

    老猿Python博文目录 专栏:使用PyQt开发图形界面Python应用 老猿Python博客地址 QTreeView树形视图的animated属性用于控制视图在展开或收缩分支时是否展示动画,如果对应 ...

  2. Scrum 冲刺第四天

    一.每日站立式会议 1.会议内容 1)进行每日工作汇报 张博愉: 昨天已完成的工作:搜寻测试相关的资料 今日工作计划:编写测试计划 工作中遇到的困难:对测试接触得较少,有点头疼 张润柏: 昨天已完成的 ...

  3. js原生方法map实现

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  4. CSP-S 2019 Solution

    Day1-T1 格雷码(code) 格雷码是一种特殊的 \(n\) 位二进制串排列法,要求相邻的两个二进制串恰好有一位不同,环状相邻. 生成方法: \(1\) 位格雷码由两个 \(1\) 位的二进制串 ...

  5. Luogu-P3205-HNOI2010-合唱队

    题目地址 思路 这道题其实是P3146 [USACO16OPEN]248的升级版,但是N的范围很大,为262144.原先的O(N3)的方法自然会TLE,甚至O(N2)的方法也不足以解决. 定义f[i] ...

  6. 深入理解Java虚拟机(七)——类文件结构

    Java的无关性 由于计算机领域中有很多操作系统和硬件平台同时在竞争,所以,很多编程语言的程序设计会与其运行的平台和操作系统产生耦合,这样就大大增加了程序员的工作,为了适应不同的平台,需要修改很多代码 ...

  7. 箭头函数this指向问题

    this指向本质 箭头函数this指向的固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this.正是因为它没有this ...

  8. Python不同包之间调用注意事项

    1.不同包之间调用,因为在不同文件夹下,引用的时候加上包名就可以了.运行时,在eclipse直接运行没有问题.但是在,命令行运行时出现找不到模块的错误.原因是,Python只搜索当前目录和内置模块以及 ...

  9. antDesign中排序sorter的坑

    antd中sorter是写在columns中的一个配置,结果为一个回调函数 如图,这是我项目中使用sorter的小例子,参数a,b分别为列表第0项数据和第1项数据.回调函数中return一个值,按照什 ...

  10. oracle 11.2.0.4下载

    Oracle 11.2.0.4下载地址 Linux x86: https://updates.oracle.com/Orion/Services/download/p13390677_112040_L ...