主要是分析Flume的基础的原理.Flume的官方网站:http://flume.apache.org/
同时Flume的地址:链接:https://pan.baidu.com/s/1r3sMD3ns-i9m04loMopZ-w 提取码:lxia
Flume概述Flume是的一个分布式、高可用、高可靠的海量日志采集、聚合和传输的系统,支持在日志系统中定制各类数据发送方,用于收集数据,同时提供了对数据进行简单处理并写到各种数据接收方的能力。 Fume的设计原理是基于数据流的,能够将不同数据源的海量日志数据进行高效收集、聚合、移动,最后存储到一个中心化数据存储系统中。Flume能够做到近似实时的推送,并且可以满足数据量是持续且量级很大的情况。比如它可以收集社交网站日志,并将这些数量庞大的日志数据从网站服务器上汇集起来,存储到HDFS或HBase分布式数据库中还有别比如中间件中Kafka mysql中。
Flume的应用场景:比如一个电商网站,想从网站访问者中访问一些特定的节点区域来分析消费者的购物意图和行为。为了实现这一点,需要收集到消费者访问的页面以及点击的产品等日志信息,并移交到大数据Hadoop平台上去分析,可以利用Flume做到这一点。现在流行的内容推送,比如广告定点投放以及新闻私人定制也是基于这个道理。
Flume的架构原理过程简要说明如下:
(1)外部数据源(Web Server)将Flume可识别的 Event发送到Source
(2) Source收到Event事件后存储到一个或多个Channel通道中。
3) Channel保留Event直到sink将其处理完毕。|
(4) Sink从yChannel中取出数据,并将其传输至外部存储(HDES)。
Event事件是Flume内部数据传输的最基本单元,将传输的数据进行封装。事件本身是由一个载有数据的字节数组和可选的headers头部信息构成,如下图所示。Flume以事件的形式将数据从源头传输到最终的目的地。
Flume Agent是一个MM进程,通过三个组件(source、channel、sink)将事件流从一个外部数据源收集并发送给下一个目的地。
source从数据发生器接收数据,并将数据以Flume的Event格式传递给一个或多个通道(Channel)
支持Source
- Avro source.
- Thrift Source.
- Exec Source
- JMS Source
- Spooling Directory Source.
- Taildir Source
- Twitter 1% firehose Source (experimental)
- Kafka Source
- NetCat TCP Source
- NetCat UDP Source
- Sequence Generator Source
- syslog Sources
- Legacy Sources
- Custom Source
一种短暂的存储容器,位于Source和Sink之间,起着桥梁的作用。Channel将从Source处接收到的Event格式的数据缓存起来,当Sink成功地将Events发送到下一跳的Channel或最终目的地后,Events从 Channel移除。Channel是一个完整的事务,这一点保证了数据在收发的时候的一致性。可以把Channel看成一个FIFO(先进先出)队列,当数据的获取速率超过流出速率时,将Event保存到队列中,再从队中一个个出来。
有以下几种Channel:
- Memory Channel事件存储在可配置容量的内存队列中,队列容量即为可存储最大事件数量,适用于高吞吐量场景,在agent出现错误时有可能会丢失部分数据
- File Channel基于文件系统的持久化存储
- Spillable Memory Channel 内存和文件混合Channel,当内存队列满了之后,新的事件会存储在文件系统,目前处于实验阶段,不建议在生产环境中使用
- JDBC Channe事件存储在持久化的数据库中,目前只支持Derby
- Kafka Channel事件存储在Kafka集群中
- Pseudo Transaction Channel伪事务Channel,仅用于测试,不能再生产环境使用.
- Custom Channel自定义Channel
获取Channel暂时保存的数据并进行处理。sink从channel中移除事件,并将其发送到下一个agent (简称下一跳)或者事件的最终目的地,比如HDES。
Sink分类:
- HDFS Sink.
- Hive Sink·
- Logger Sink·
- Aorg, Sink
- Thrift Sink.
- IRC Sink
- File Roll Sink将Events保存在本地文件系统
- Null Sink抛弃从Channel接收的所有事件
- HBaseSinks
- MorphlineSolrSink.
- ElasticSearchSink.
- Kite Dataset Sink.
- Kafka Sink
- HTTP Sink
- custom Sink
事件在每个agent的channel中短暂存储,然后事件被发送到下一个agent或者最终目的地。事件只有在存储在下一个channel或者最终存储后才从当前的channel中删除。
Flume使用事务的办法来保证Events的可靠传递。Source和Sink分别被封装在事务中,事务由保存Event的存储或者Channel提供。这就保证了Event在数据流的点对点传输中是可靠的。在多跳的数据流中,上一跳的sink和下一跳的source均运行事务来保证数据被安全地存储到下—跳的channel中。
Fulme的简单使用案例下载flume的安装包:http://flume.apache.org/download.html
修改flume-env.sh配置中的JDK路径
在conf中添加配置文件
# 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
开始测试:nc localhost 44444(监听的端口号)
表示flume的单机版本的配置已经完成。