Flume开发中常用组件source,channel,sink等配置

实际开发中Flume中常用的source源,sink,channel,intercepertor等介绍,而实际上关于agent代理中设置选项有很多,具体要到官网去查看。

 

组件

使用介绍

 

 

 

 

 

source

数据源

Avro

监听由Avro sink 或Flume SDK 通过Avro RPC发送的事件所抵达的端口

Exec

运行一个Unix命令(例如 tail -F /path/to/file),并且把从标准输出上读取的行转化为事件。但是要注意,此source不一定能保证把事件传送到channel,更好的选择可以参考spooling directory source 或者Flume SDK.

HTTP

监听一个端口,并且使用可插拔句柄,比如JSON处理程序或者二进制数据处理程序,把HTTP请求转换成事件

JMS

读取来自JMS Queue或者Topic的消息并将其转换成事件

Spooling directory

/spooldir

按行读取保存在缓冲目录中的文件,并将其转换为事件。

Netcat

监听一个端口,并把每行文本转换为一个事件

Syslog

从日志中读取行,并将其转换为事件

Thrift

监听由Thrift sink或Flume SDK通过Thrift RPC发送的事件所抵达的窗口

Squence genetartor

依据增量计数器来生成事件,主要用来测试用

kafka

监听kafka的Topic,当成事件

 

组件

使用介绍

 

 

 

 

 

sink

目地

HDFS

以文本,序列化文件,Avro或定制格式写入到HDFS中。

HBASE

使用某种序列化工具将数据写入到HBASE中

Logger

使用SLF4J记录INFO级别的事件,主要用来测试

kafka

将事件写入到kafka消息缓存对列

Elasticcsearch

使用Logstash格式将事件写入到Elasticsearch集群中

NULL

丢弃所有事件

Avro

通过Avro RPC发送事件到一个Avro source群中

File roll

将事件写入到本地文件系统

Hive

将事件按固定的格式导入到hive表中或者对应的分区里。

IRC

将事件发送给IRC通道

 

组件

使用介绍

 

channel

通道

file

将事件存储在一个本地文件系统上的事务日志中。这种类型的channel具有持久性:只要事件被写入channel,即使使用了代理,代理重新启动,事件也不会丢失。agent1.channnels.channel1.type=file 

memory

将事件缓存到内存中,因此不具有持久性存储能力。所以采用memory channel时,如果代理重新启动,事件就会丢失。在有些时候这种情况允许。和file channel相比,memory channel 速度快,吞吐量较高

agent1.channnels.channel1.type=memory

 jdbc

将事件存储到数据库中。

 

组件

使用介绍

 

 

 

 

拦截器

interce-ptor

 

Timestamp

给特定source传递过来的事件加一个时间戳header.其中包含的是代理处理事件的时间,以ms为单位。具体参考博客Flume拦截器那篇

   agent1.sources.souce1.interceptors = interceptor1

   agent1.sources.source1.interceptors.interceptor1.type = timestamp。

UUID

在所有的事件上设置一个ID header,它是一个全局的唯一标识符,对将来删除重复数据有用。

agent1.sources.source1.interceptors.interceptor1.type

=

org.apache.flume.sink.solr.morphline.UUIDInterceptor$Builder

 static

将所有的事件上设置一个固定的header及其值。具体参考官网

 Host

将所有事件上设置一个包含代理主机名或IP地址的主机header.

总之:我们经常在使用flume的过程后中,会用flume去收集数据,然后打到kafka中去。但是有一个问题,当flume中收集的数据量太大的时候,打到kafka中,kafka一时半会消费不了,就会造成数据堆积,怎么截距这种问题呢?
解决方案:可以通过设定参数这种方式,但是在这里这种方式显然已经不可行了,数据量太大了。这种情况下可以通过给flume设定拦截器的方式,来解决这种问题。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flume是一个分布式、高可靠、高可用的日志收集系统,它的主要作用是将分布式环境产生的海量数据进行汇聚和传输。Flume的核心组件包括SourceChannelSink,下面是这些组件常用配置: 1. Source组件配置Source组件Flume的数据输入源,常用Source组件有ExecSource、AvroSource、NetcatSource等。它们的配置主要包括监听地址、端口号、日志格式、字符集等,具体如下: ``` # 监听地址和端口号 a1.sources.r1.type = netcat a1.sources.r1.bind = 0.0.0.0 a1.sources.r1.port = 44444 # 日志格式和字符集 a1.sources.r1.interceptors = i1 a1.sources.r1.interceptors.i1.type = regex_filter a1.sources.r1.interceptors.i1.regex = ^\[\d{4}-\d{2}-\d{2} a1.sources.r1.interceptors.i1.excludeEvents = false a1.sources.r1.interceptors.i1.charset = UTF-8 ``` 2. Channel组件配置Channel组件Flume的数据传输通道,常用Channel组件有MemoryChannel、FileChannel、JDBCChannel等。它们的配置主要包括内存大小、数据保留时间、事务容量等,具体如下: ``` # 内存大小和事务容量 a1.channels.c1.type = memory a1.channels.c1.capacity = 1000 a1.channels.c1.transactionCapacity = 100 # 数据保留时间 a1.channels.c1.keep-alive = 3m ``` 3. Sink组件配置Sink组件Flume的数据输出目标,常用Sink组件有HDFS Sink、Kafka Sink、Avro Sink等。它们的配置主要包括输出地址、序列化格式、批处理大小等,具体如下: ``` # 输出地址和序列化格式 a1.sinks.k1.type = hdfs a1.sinks.k1.hdfs.path = /flume/%Y/%m/%d/%H/ a1.sinks.k1.hdfs.filePrefix = events- a1.sinks.k1.hdfs.fileSuffix = .log a1.sinks.k1.hdfs.rollInterval = 3600 a1.sinks.k1.hdfs.fileType = DataStream a1.sinks.k1.serializer = org.apache.flume.sink.hdfs.AvroEventSerializer$Builder # 批处理大小 a1.sinks.k1.batchSize = 1000 ``` 以上是Flume组件常用配置的一些示例,具体的配置内容和参数取决于具体的场景和需求。Flume支持丰富的配置选项,可以根据实际需要进行灵活配置

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值