B I T C项目7 Flume日志采集系统任务7.2 Flume采集方案说明与可靠性保证主讲教师:马东波学习目标Title Works About Help章节概要在大数据系统的开发中,数据收集工作无疑是开发者首要解决的一个难题,但由于生产数据的源头丰富多样,其中包含网站日志数据、后台监控数据、用户浏览网页数据等,数据工程师要想将它们分门别类的采集到HDFS系统中,就可以使用Apache Flume(数据采集)系统。
本章将针对Flume系统的基本概念、安装及应用方式详细讲解,让读者掌握Flume系统的原理与应用。
C O N T E N T SFlume采集方案说明PART 01Flume的可靠性保证PART 02Flume Sources在编写Flume采集方案时,首先必须明确采集的数据源类型、出处;接着,根据这些信息与Flume已提供支持的Flume Sources进行匹配,选择对应的数据采集器类型(即sources.type);再根据选择的数据采集器类型,配置必要和非必要的数据采集器属性,Flume提供并支持的Flume Sources种类如下所示。
Avro Source Thrift Source Exec SourceJMS Source Spooling Directory Source Twitter 1% firehose SourceKafka Source NetCat TCP Source NetCat UDP SourceSequence GeneratorSyslog TCP Source Multiport Syslog TCP SourceSourceSyslog UDP Source HTTP Source Stress SourceAvro Legacy Source Thrift Legacy Source Custom SourceScribe Source Taildir SourceTitle Works About HelpFlume Sources监听Avro端口并从外部Avro客户端流中接收event数据,当与另一个Flume Agent 上的Avro Sink配对时,可创建分层集合拓扑,利用Avro Source可以实现多级流动、扇出流、扇入流等效果,Avro Source常用配置属性如下。
属性名称默认值相关说明channels–type–组件类型名需必须是avrobind–要监听的主机名或IP地址port–要监听的服务端口threads–要生成的工作线程的最大数目ssl false 将此设置为true以启用SSL加密,则还必须指定“keystore”和“keystore-password”keystore–SSL所必需的通往Java密钥存储路径keystore-password–SSL所必需的Java密钥存储的密码Title Works About HelpTitle Works AboutHelpFlume Sources使用Avro Source采集器配置一个名称为a1的Agent示例如下:a1.sources=r1a1.channels=c1a1.sources.r1.type=avroa1.sources.r1.channels=c1a1.sources.r1.bind=0.0.0.0a1.sources.r1.port=4141Flume Sources•Spooling Directory Source允许对指定磁盘上的文件目录进行监控来提取数据,它将查看文件的指定目录的新增文件,并将文件中的数据读取出来。
•Spooling Directory Source常用配置属性如下表所示。
属性名称默认值相关说明channels–type–组件类型名需必须是spooldirspoolDir–从中读取文件的目录PLETED附加到完全摄取的文件后缀deletePolicy never 何时删除已完成的文件:never或immediatefileHeader false是否添加存储绝对路径文件名的标头includePattern^.*$正则表达式,指定要包含的文件ignorePattern^$正则表达式,指定要忽略的文件Title Works About HelpFlume Sources使用Spooling Directory Source采集器配置一个名称为a1的Agent示例如下:a1.channels=ch-1a1.sources=src-1a1.sources.src-1.type=spooldira1.sources.src-1.channels=ch-1a1.sources.src-1.spoolDir=/var/log/apache/flumeSpoola1.sources.src-1.fileHeader=trueTitle Works About HelpFlume SourcesTaildir Source用于观察指定的文件,几乎可以实时监测到添加到每个文件的新行。
如果文件正在写入新行,则此采集器将重试采集它们以等待写入完成,Source常用配置属性如下所示。
属性名称默认值相关说明channels–type–组件类型名需必须是TAILDIRfilegroups–以空格分隔的文件组列表filegroups.<filegroupName>–文件组的绝对路径idleTimeout120000关闭非活动文件的时间(毫秒)Flume Sources续表属性名称默认值相关说明writePosInterval3000写入位置文件上每个文件的最后位置的间隔时间batchSize100一次读取和发送到通道的最大行数backoffSleepIncrement1000当最后一次尝试未找到任何新数据时,每次重新尝试轮询新数据之间的最大时间延迟fileHeader false是否添加存储绝对路径文件名的标头fileHeaderKey file 将绝对路径文件名附加到event header时使用的header关键字Flume Sources使用Taildir Sources采集器配置一个名称为a1的Agent示例如下:a1.sources=r1a1.channels=c1a1.sources.r1.type=TAILDIRa1.sources.r1.channels=c1a1.sources.r1.positionFile=/var/log/flume/taildir_position.jsona1.sources.r1.filegroups=f1 f2a1.sources.r1.filegroups.f1=/var/log/test1/example.loga1.sources.r1.headers.f1.headerKey1=value1a1.sources.r1.filegroups.f2=/var/log/test2/.*log.*a1.sources.r1.headers.f2.headerKey1=value2a1.sources.r1.headers.f2.headerKey2=value2-2a1.sources.r1.fileHeader=trueFlume SourcesHTTP Source可以通过HTTP POST和GET请求方式接收event数据,GET通常只能用于测试使用,POST请求发送的所有的events都被认为是一个批次,会在一个事务中插入channel,Taildir Source常用配置属性如下所示。
属性名称默认值相关说明channels–type组件类型名需必须是httpport–采集源要绑定的端口bind0.0.0.0要监听绑定的主机名或IP地址handler org.apache.flume.source.http.JSONHandlerhandler类的全路径名Flume Sources使用HTTP Source采集器配置一个名称为a1的Agent示例如下:a1.sources=r1a1.channels=c1a1.sources.r1.type=httpa1.sources.r1.port=5140a1.sources.r1.channels=c1a1.sources.r1.handler=org.example.rest.RestHandlera1.sources.r1.handler.nickname=random propsFlume ChannelsChannels通道是event在Agent上暂存的存储库,Source向Channel中添加event,Sink在读取完数据后再删除它。
在配置Channels时,需要明确的就是将要传输的sources数据源类型;根据这些信息结合开发中的实际需求,选择Flume已提供的支持的FlumeChannels;再根据选择的Channel类型,配置必要和非必要的Channel属性,Flume提供并支持的Flume Channels种类如下所示。
Memory Channel JDBC Channel Kafka ChannelFile Channel Spillable Memory Channel Pseudo Transaction ChannelCustom ChannelFlume ChannelsMemory Channel会将event存储在具有可配置最大尺寸的内存队列中,适用于需要更高吞吐量的流量,但在Agent发生故障时会丢失部分阶段数据,下表为Memory Channel常用配置属性。
属性名称默认值相关说明type–组件类型名需必须是memorycapacity100存储在channel中的最大event数transactionCapacity100channel从source接收或向sink传递的每个事务中最大event数keep-alive3添加或删除event的超时时间(秒)byteCapacityBuffer Percentage 20定义byteCapacity与channel中所有event所占百分比byteCapacity等于JVM可用的最大允许此channel中所有event的的最大内Flume Channels使用Memory Channel通道配置一个名称为a1的Agent示例如下:a1.channels=c1a1.channels.c1.type=memorya1.channels.c1.capacity=10000a1.channels.c1.transactionCapacity=10000a1.channels.byteCapacityBufferPercentage=20a1.channels.byteCapacity=800000Flume ChannelsFile Channel是Flume的持久通道,它将所有event写入磁盘,因此不会丢失进程或机器关机、崩溃时的数据。