Flume学习总结

1、Flume介绍

  • 一个高可用的、高可靠的、分布式的海量日志采集、聚合和传输的系统。
  • Flume OG(original generation, 2009年7月):分布式日志收集系统, 有Master概念,依赖于Zookeeper,分为agent,collector, storage三种角色;Flume NG(next generation, 2011年10月):代码重构,功能精简, 去掉master,collector角色,专注数据的收集与传递。

2、Flume组成

   2.1、Flume Flow

  • Flow:数据采集流程
  • Event:消息处理的最小单位,带有一个可选的消息头
  • Agent:一个独立的Flume进程,包含组件Source、Channel、Sink
  • Source:以event为单位接收信息,并确保信息被推送(push)到channel
  • Channel:缓存信息,确保信息在被sink处理前不会丢失
  • Sink:从channel中拉取(pull)并处理信息
  • Interceptor:event拦截器,可以修改或丢弃event,做数据的过滤

   2.2、处理流程:

  source以event为单位从数据源接收信息,然后保存到一个或多个channel中 (可以经过一个或多个interceptor的预处理),sink从channel中拉取并处理 信息(保存,丢弃或传递到下一个agent),然后通知channel删除信息

3、Flume安装

     3.1、依赖:jdk1.8
     3.2、步骤

  1. 下载安装包
  2. 解压
  3. 配置flume-env.sh:设置 JAVA_HOME和FLUME_CLASSPATH="/root/hadoop/share/hadoop/common/*:/root/hadoop/share/hadoop/hdfs/*:/root/hadoop/share/hadoop/common/lib/*"

  4. 配置 agent:conf/flume-conf.properties
  5. 启动:  $FLUME_HOME/bin/flume-ng agent -n a1 -c conf -f xxx.properties

 

     3.3、配置模板

     配置agent文件:

     # example.conf: A single-node Flume configuration

     # Name the components on this agent

     a1.sources = r1

     a1.sinks = k1

     a1.channels = c1

     # Describe/configure the source

     a1.sources.r1.type = netcat

     a1.sources.r1.bind = localhost

     a1.sources.r1.port = 44444

     # Describe the sink

     a1.sinks.k1.type = logger

     # Use a channel which buffers events in memory

     a1.channels.c1.type = memory

     #a1.channels.c1.capacity = 1000

     #a1.channels.c1.transactionCapacity = 100

     # Bind the source and sink to the channel

     a1.sources.r1.channels = c1

     a1.sinks.k1.channel = c1

     source可以对应channel,而sink只能对应一个channel

4、source、channel和sink接收数据类型

     4.1、source

名称  描述
Avro  监听地址,接收avro信息
Thrift  监听地址,接收thrift信息
JMS  监听JMS地址,接收jms信息
Exec  监听命令输出,如tail –f xxx.log
Spooling Directory  监听放置到指定文件夹下的新文件,读取文件中的内容
Kafka  监听kafka服务器,接收kafka消息
自定义  自定义的source

     4.2、channel

名称  描述
Memory Channel  Event数据存储在内存中。处理速度快,但是不能保证信息的持久化,而且容 量受限于内存大小。
File Channel  Event数据存储在磁盘文件中。处理速度一般,但是可以保证信息不会丢失, 容量也几乎无限制。
JDBC Channel  Event数据存储在持久化存储中,当前Flume Channel内置支持Derby
Spillable Memory Channel  Event数据存储在内存中和磁盘上,当内存队列满了,会持久化到磁盘文件 (当前为试验性的,不建议生产环境使用)
Custom Channel  自定义Channel实现

     4.3、sink

名称  描述
HDFS 数据写入HDFS
Hive 数据写入Hive
 Logger 数据写入日志文件
Avro 数据被转换成Avro Event,然后发送到配置的RPC端口上
Thrift 数据被转换成Thrift Event,然后发送到配置的RPC端口上
HBase 数据写入HBase数据库
ElasticSearch 数据发送到Elastic Search搜索服务器(集群)
Kafka 数据发送到Kafka
Null 丢弃到所有数据
Custom

自定义Sink实现

5、常见应用场景:

    5.1、离线日志收集

    场景描述:收集服务器的用户访问日志,保存到Hadoop集群中,用于离线的计算与分析

    Flume方案:

  • 在服务器端配置flume agent
  • Source采用Spooling Directory Source(监听文件)
  • Channel采用Memory Channel
  • Sink采用HDFS Sink

    5.2、实时日志收集

    场景描述:收集服务器的系统日志,发送给实时计算引擎进行实时处理

    Flume方案:

  • 在服务器端配置flume agent
  • Source采用Spooling Directory Source或 Exec Source(tail –f xxx)
  • Channel采用Memory Channel
  • Sink采用Kafka Sink

    5.3、系统日志收集

    场景描述:收集服务器的系统日志,发送给实时计算引擎进行实时处理
    Flume方案:

  • 在服务器端配置flume agent
  • Source采用Spooling Directory Source或 Exec Source(tail –f xxx)
  • Channel采用Memory Channel
  • Sink采用Kafka Sink

Flume学习总结_第1张图片

6、使用注意事项

    配置相关

  • Agent的配置中使用统一的命名规则
  • 在启动命令中添加“no-reload-conf”参数为true来取消自动加载配置文件功能
  • 基于配置中心读取统一的配置文件
  • 调大HdfsSink的batchSize,增加吞吐量,减少hdfs的flush次数
  • 适当调大HdfsSink的callTimeout,避免不必要的超时错误

    架构相关

  • 将日志采集系统系统分成三层:采集、汇总和存储,采集只管将数据发送 到汇总层,处理逻辑由汇总层统一处理。好处是简化采集点的管理
  • 采集点(source)不要直接接入应用系统中,以免由于日志收集系统问题影响应用系统
     

你可能感兴趣的:(Flume学习总结)