【Flume】常用Source、Channel、sink组件类型选型

一、Source组件

1、netcat 类型
作用:监听一个端口,收集该端口数据

配置范例

a1.sources.r1.type = netcat
#要监听的 hostname 或者IP地址 0.0.0.0表示任意地址
a1.sources.r1.bind = 0.0.0.0
a1.sources.r1.port = 44444

2、Exec 类型

作用:可以将命令产生的输出作为源

配置范例:如监控命令行输出结果

a1.sources.r1.type = exec
#要监听的路径
a1.sources.r1.command = tail -F /var/log/secure
a1.sources.r1.channels = c1

3、spooldir 类型
作用:监控目录下的文件

配置范例

a3.sources.r3.type = spooldir
#监控data下所有的文件
a3.sources.r3.spoolDir = /opt/server/flume/data
#对监控后的文件添加后缀名
a3.sources.r3.fileSuffix = .xy
#是否添加文件的绝对路径名(绝对路径+文件名)到header中
a3.sources.r3.fileHeader = true
#忽略所有以.tmp结尾的文件,不上传
a3.sources.r3.ignorePattern = ([^ ]*\.tmp) 

4、taildir 类型
作用:监控文件内容。Exec source适用于监控一个实时追加的文件,不能实现断点续传; Spooldir Source适合用于同步新文件,但不适合对实时追加日志的文件进行监听并同步; Taildir Source适合用于监听多个实时追加的文件,并且能够实现断点续传 taildir维护了一个json格式的positionFile,其会定期往positionFile中更新每个文件读取到的最新位置,因此能够实现断点续传。

配置范例

a3.sources.r3.type = TAILDIR
a3.sources.r3.positionFile = /opt/module/flume/tail_dir.json
a3.sources.r3.filegroups = f1 f2
a3.sources.r3.filegroups.f1 = /opt/module/flume/files/.*file.*
a3.sources.r3.filegroups.f2 = /opt/module/flume/files2/.*log.*

5、kafka
作用:支持从Kafka指定的topic中读取数据。Kafka Source 是一个 Apache Kafka 消费者,它从 Kafka 主题中读取消息。 如果您有多个 Kafka 源在运行,您可以使用相同的 Consumer Group 配置它们,以便每个都读取一组唯一的主题分区。 这目前支持 Kafka 服务器版本 0.10.1.0 或更高版本。 测试一直到 2.0.1,这是发布时可用的最高版本。

配置范例

a1.sources.source1.type = org.apache.flume.source.kafka.KafkaSource
#	一批写入 channel 的最大消息数
a1.sources.source1.batchSize = 5000
#写入 channel 之前的最大等待时间(毫秒)。达到等待时间或者数量达到 batchSize 都会触发写操作。
a1.sources.source1.batchDurationMillis = 2000
#Source使用的Kafka集群实例列表
a1.sources.source1.kafka.bootstrap.servers = localhost:9092
#将要读取消息的目标 Kafka topic 列表,多个用逗号分隔
a1.sources.source1.kafka.topics = test1, test2
#消费组的唯一标识符。如果有多个source或者Agent设定了相同的ID,表示它们是同一个消费者组
a1.sources.source1.kafka.consumer.group.id = custom.g.id

二、Channel组件

1、Memory加粗样式
作用:event保存是基于内存,存放在Java Heap固定大小的队列中。优点是传输速度快,如果允许数据小量丢失,推荐使用

配置范例

a1.channels.c1.type = memory   
#--存储在channel中的最大event个数 
a1.channels.c1.capacity = 10000  
#--每个事务中从source获取或则发送到sink的最大event个数  
a1.channels.c1.transactionCapacity = 10000  
#--byteCapacity和预估的所有event大小之间的buffer
a1.channels.c1.byteCapacityBufferPercentage = 20   
#--缓存里面允许存放的所有event的字节的最大值。
a1.channels.c1.byteCapacity = 800000   

2、File
作用:event保存在本地文件中,可靠性高,数据可以恢复,但吞吐量低于Memory Channel,即速度没有相对比较慢

配置范例

a1.channels = c1
a1.channels.c1.type = file
#  --检查点存放目录
a1.channels.c1.checkpointDir = /opt/flume/checkpoint   
# --工具必须验证的数据目录的逗号分隔列表
a1.channels.c1.dataDirs = /opt/flume/data     

3、JDBC
作用: event保存在关系型数据库中,优点是数据可以恢复,一般不推荐使用

配置范例

a1.channels = c1 
a1.channels.c1.type = jdbc

三、sink组件

1、Logger
作用:使用INFO级别把Event内容输出到日志中,一般用来测试、调试使用。这个 Sink 是唯一一个不需要额外配置就能把 Event 的原始内容输出的Sink,参照 输出原始数据到日志 。

配置范例

a1.sinks.k1.type = logger
a1.sinks.k1.channel = c1

2、HDFS
作用:把events写进Hadoop分布式文件系统(HDFS)。它目前支持创建文本和序列文件。它支持在两种文件类型压缩。文件可以基于数据的经过时间或者大小或者事件的数量周期性地滚动。它还通过属性(如时间戳或发生事件的机器)把数据划分为桶或区。

配置范例

a1.sinks.k1.type = hdfs
#HDFS目录路径
a1.sinks.k1.hdfs.path = /flume/events/%y-%m-%d/%H%M/%S
#Flume在HDFS文件夹下创建新文件的固定前缀
a1.sinks.k1.hdfs.filePrefix = events-
#是否应将时间戳向下舍入(如果为true,则影响除 %t 之外的所有基于时间的转义符)
a1.sinks.k1.hdfs.round = true
#向下舍入(小于当前时间)的这个值的最高倍(单位取决于下面的 hdfs.roundUnit ) 
a1.sinks.k1.hdfs.roundValue = 10
#向下舍入的单位,可选值: second 、 minute 、 hour
a1.sinks.k1.hdfs.roundUnit = minute

2、Avro
作用:多个Agent级联的时候常用到。

比如
1、多个Agent串联场景 两个Agent串联,a1的sink类型选择avro,a2的source类型为avro
在这里插入图片描述
2.多路复用场景 Agent1负责监控文件,然后把内容传输给Agent2、Agent3,这个时候就使用avro;(a1的sink类型选择avro,a2、a3的source类型也为avro);

在这里插入图片描述
配置范例

a1.sinks.k1.type = avro
#监听的服务器名(hostname)或者 IP
a1.sinks.k1.hostname = 10.10.10.10
#监听的端口
a1.sinks.k1.port = 44444

具体举例
使用agent1监控文件变动,agent1将变动内容传递给agent2,agent2负责存储到HDFS。同时agent1将变动内容传递给agent3,agent3负责输出到local filesystem。

a1.sources = r1
a1.sinks = k1 k2
a1.channels = c1 c2
# 将数据流复制给所有channel
a1.sources.r1.selector.type = replicating
 
# Describe/configure the source
a1.sources.r1.type = exec
a1.sources.r1.command = tail -F /opt/module/hive/logs/hive.log
a1.sources.r1.shell = /bin/bash -c

# Describe the channel
a1.channels.c1.type = memory
a1.channels.c1.capacity = 1000
a1.channels.c1.transactionCapacity = 100
 
a1.channels.c2.type = memory
a1.channels.c2.capacity = 1000
a1.channels.c2.transactionCapacity = 100
 

# sink端的avro是一个数据发送者
a1.sinks.k1.type = avro
a1.sinks.k1.hostname = hadoop102 
a1.sinks.k1.port = 4441
 
a1.sinks.k2.type = avro
a1.sinks.k2.hostname = hadoop102
a1.sinks.k2.port = 4442

 
#将源和接收器绑定到通道
a1.sources.r1.channels = c1 c2
a1.sinks.k1.channel = c1
a1.sinks.k2.channel = c2   
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值