flume-ng安装与使用

前言

Flume开始由Cloudera公司开发,2011Cloudera公司将Flume贡献给开源社区,现在Apache FlumeApache Software Foundation的一个顶级项目。

目前Flume有两个可用的Release版本:0.9x1.x0.9x版本称为Flume-OGCloudera公司开发和维护,1.x版本称为Flume-NGApache Software Foundation开发和维护。本文档只对Apache Flume 1.x进行介绍说明。

1.1 核心概念

组件

解释

Agent

一个jvm进程,里面运行flume-ng组件

Source

接受数据源的地方

Channel

连接Sourcesink管道

Sink

数据流动结束的地方

events

Flume-ng传输的的一个数据单元

1.2 数据流模型

Flume-ng数据流有事件(event)贯穿,它是flume数据的基本单位,当source捕捉到事件后推入到channel中,sink处理事件,可以持久化或者推向到另一个source,flume-ng提供了多种不同类型的source、channelsink可以自由组合,用户可以根据配置文件定义

Flumen-ng支持流、即多个agent可以协同工作根据官网列举几个常用

1.3 基本组件

常用Flume source

Source类型

说明

Avro Source

支持Avro协议(实际上是Avro RPC),内置支持, 1.4.0默认rpc协议

Thrift Source

支持Thrift协议,内置支持

Exec Source

基于Unix的command在标准输出上生产数据,如:tail -f

JMS Source

从JMS系统(消息、主题)中读取数据

Spooling Directory Source

监控指定目录内数据变更

Netcat Source

监控某个端口,将流经端口的每一个文本行数据作为Event输入

Sequence Generator Source

序列生成器数据源,生产序列数据

Syslog Sources

读取syslog数据,产生Event,支持UDP和TCP两种协议

HTTP Source

基于HTTP POST或GET方式的数据源,支持JSON、BLOB表示形式

常用Flume channel

Channel类型

说明

Memory Channel

Event数据存储在内存中

JDBC Channel

Event数据存储在持久化存储中,当前Flume Channel内置支持Derby

File Channel

Event数据存储在磁盘文件中

Custom Channel

自定义Channel实现

常用Flume sink

Sink类型

说明

HDFS Sink

数据写入HDFS

Logger Sink

数据写入日志文件

Avro Sink

数据被转换成Avro Event,然后发送到配置的RPC端口上

Thrift Sink

数据被转换成Thrift Event,然后发送到配置的RPC端口上

IRC Sink

数据在IRC上进行回放

File Roll Sink

存储数据到本地文件系统

Null Sink

丢弃到所有数据

HBase Sink

数据写入HBase数据库

Morphline Solr Sink

数据发送到Solr搜索服务器(集群)

ElasticSearch Sink

数据发送到Elastic Search搜索服务器(集群)

Custom Sink

自定义Sink实现

 

1.4 可靠性

Flume使用基于事务的数据传递方式来保证事件传递的可靠性。Source和Sink被封装进一个事务。事件被存放在Channel中直到该事件被处理,Channel中的事件才会被移除。这是Flume提供的点到点的可靠机制。

从多级流来看,前一个agent的sink和后一个agent的source同样有它们的事务来保障数据的可靠性。

1.5 可恢复

Flumne-ng提供了一个FileChannel备份数据memory channel会用了存储数据,agent进程挂了数据就会丢失,但是操作性能更好。

使用

2.1 安装

1. 拷贝安装包apche-flume-xxx.tar.gz安装目录

2. 解压tar zxvf apache-flume-xxx.tar.gz

如果使用到hadoop集群保证hadoop的相关环境都已经安装正确并且hadoop集群可用

2.2 配置

1. flume-ng用过properties配置文件来定义流的,通过官网的一个例子配置文件如何使用,该例子主要功能通过netcat监控端口44444,把数据存放memory channel通过一个logger sink把事件数据打印到控制台:

# 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

2. 运行flume:

$ bin/flume-ng agent --conf conf --conf-file example.conf --name a1 -Dflume.root.logger=INFO,console

配置文件可以交由zookeeper管理, 可以对应agent的配置文件上传到agent名称对应的目录下面如果:

- /flume

 |- /a1 [Agent config file]

 |- /a2 [Agent config file]

启动命令为:

$ bin/flume-ng agent -conf conf -z zkhost:2181,zkhost1:2181 -p /flume –name a1 -Dflume.root.logger=INFO,console

3.然后我们telnet到44444端口测试

$ telnet localhost 44444

Trying 127.0.0.1...

Connected to localhost.localdomain (127.0.0.1).

Escape character is '^]'.

Hello world! <ENTER>

OK

服务端打印日志

12/06/19 15:32:19 INFO source.NetcatSource: Source starting

12/06/19 15:32:19 INFO source.NetcatSource: Created serverSocket:sun.nio.ch.ServerSocketChannelImpl[/127.0.0.1:44444]

12/06/19 15:32:34 INFO sink.LoggerSink: Event: { headers:{} body: 48 65 6C 6C 6F 20 77 6F 72 6C 64 21 0D          Hello world!. }

3 参考

更多使用请参考:http://flume.apache.org/FlumeUserGuide.html

转载于:https://my.oschina.net/chengxiaoyuan/blog/679744

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值