flume日志处理的利器入门

简介

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。

flume架构

在这里插入图片描述
组件中名词解释:

  • agent 是一个JVM进程,它以事件的形式讲数据从源头送至目的地
    主要由三部分组成:
    • Source 负责接收数据到Flume,它可以处理各种类型,各种格式的日志,包括avro,thrift,netcat http 等等
    • Channel 是位于Source和Sink之间的缓冲区,Channel是线程安全的,可以同时处理几个source的写入操作和几个sink的读取操作。Channel分为两种:Memory ,File 一个基于内存一个基于文件,基于内存的就不用说了,处理速度快,但是不保证数据 的完整性。
    • Sink 不断的轮询Channel中的事件,处理完成之后,移除他们。Sink是完全事务型的,在Channel批量删除数据之前,每个Sink用Channel启动一个事务,批量事件一旦成功写出到存储系统或者下一个Flume Agent,Sink就利用Channel提交事务。批量事务一旦成功写出缓存或者下一个Flume Agent,Sink 就利用Channel提交事务。事务一旦被提交,改Channel从自己的内部删除缓存区事件。
    • Event 传输单元,由可选的header 和载有数据的一个byte数组组成,Header是容纳了key-value对的HashMap

flume内部实现原理

在这里插入图片描述
我们平时使用的架构是 多个flume使用,每个分节点上部署一台flume负责收集发送日志,单独有一台总flume负责将数据写入HDFS或者Hbase中。

flume 安装

安装比较简单,它不像Hive一样依托于hadoop,单纯的下载配置即可用。使用的是稳定版本1.9

在这里插入图片描述
修改config目录下的 flume.conf ,如果没有可以复制 flume-conf.properties.template 文件内容。
新增配置:

# Name the components on this agent
#a1的输入源
a1.sources = r1
#a1的目的地
a1.sinks = k1
#a1的缓冲区 
a1.channels = c1 
 
# source
#表示a1的输入源的类型为netcat
a1.sources.r1.type = netcat
a1.sources.r1.bind = localhost
a1.sources.r1.port = 44444
 
# sink
#a1的输出目的地是控制台的logger类型
a1.sinks.k1.type = logger
 
# channel
#表示a1的channel类型是memory内存型
a1.channels.c1.type = memory
#表示的a1的channel总容量是1000个event
a1.channels.c1.capacity = 1000
#表示a1的channel传输时收集到100条event以后在去提交事务
a1.channels.c1.transactionCapacity = 100
 
#表示将r1和c1连接起来
a1.sources.r1.channels = c1
#表示将k1和c1连接起来
a1.sinks.k1.channel = c1


开启服务器

flume-ng.cmd agent -conf-file ../conf/flume.conf -name a1 -property flume.root.logger=INFO,console

我们使用netcat作为客户端一直生产数据

nc localhost 44444

以下效果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/abc8125/article/details/109411700