flume之简单使用(2)

Flume传输的数据的基本单位是event,如果是文本文件,通常是一行记录,这也是事务的基本单位。flume运行的核心是agent。它是一个完整的数据收集工具,含有三个核心组件,分别是source、channel、sink。Event从Source,流向Channel,再到Sink,本身为一个byte数组,并可携带headers信息。Event代表着一个数据流的最小完整单元,从外部数据源来,向外部的目的地去。Source:完成对日志数据的收集,分成transtion 和 event 打入到channel之中。Channel:主要提供一个队列的功能,对source提供中的数据进行简单的缓存。Sink:取出Channel中的数据,进行相应的存储文件系统,数据库,或者提交到远程服务器。通过这些组件,event可以从一个地方流向另一个地方


进入了flume的目录里面

然后vi test.cf文件写内容:

test.sources=so1

test.sinks=si1

test.channels=c1

 

#source

test.sources.so1.type=netcat

test.sources.so1.bind=192.168.208.128

test.sources.so1.port=6666

#sink

test.sinks.si1.type=logger

#channel

test.channels.c1.type=memory

test.channels.c1.capacity=1000

test.channels.c1.transactionCapacity=100

 

test.sources.so1.channels=c1

test.sinks.si1.channel=c1

然后编写启动程序:

vi r.sh 写脚本,启动agent

bin/flume-ng agent --conf-file test.cf --name test -Dfluem.root.logger=INFO,console

启动的脚本   关于agent agent的文件名(test.cf) agent的名字 日志放的地方

然后我在这个目录先启动./r.sh

然后另外打开一个会话:

键入命令:

telnet hadoop222 6666

如此就可以监听了,我在此端口上输入的文字,都会在另外一个会话的屏幕上打印出来。


Flume的核心是把数据从数据源收集过来,再送到目的地。为了保证输送一定成功,在送到目的地之前,会先缓存数据,待数据真正到达目的地后,删除自己缓存的数据。
Flume使用事务性的方式保证传送Event整个过程的可靠性。Sink必须在Event被存入Channel后,或者,已经被传达到下一站agent里,又或者,已经被存入外部数据目的地之后,才能把Event从Channel中remove掉。这样数据流里的event无论是在一个agent里还是多个agent之间流转,都能保证可靠,因为以上的事务保证了event会被成功存储起来。而Channel的多种实现在可恢复性上有不同的保证。也保证了event不同程度的可靠性。比如Flume支持在本地保存一份文件channel作为备份,而memory channel将event存在内存queue里,速度快,但丢失的话无法恢复。


你可能感兴趣的:(flume之简单使用(2))