Flume Source

本文围绕Flume的Source组件展开,介绍其基本配置,需在配置文件指定类型和写入的Channel,还有可选的拦截器和选择器配置。阐述了Sink - Source通信机制,重点介绍了主要的RPC - Source Avro Source,包括其通信协议、配置及注意事项。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Source是负责接收数据到Flume Agent的组件。Source可以从其他系统接收数据。Source也可以用于接受其他Flume Agent的Sink通过RPC发送来的数据。毫不夸张的说,Source可以接受任何来源的数据。

Source的基本配置

Source像所有的Fluem组件一样,需要在配置文件中指定它的类型,可以是FQCN或者内置Source的别名,所有的Source都至少有一个用于写入的Channel。因此Channel的列表也是对应Source合理配置的必要参数。

配置的例子如下:

//source的别名
usingFlume.sources = usingFlumeSource
usingFlume.channels = memory

usingFlume.sources.usingFlumeSource.type = avro
usingFlume.sources.usingFlumeSource.channels = memory
usingFlume.sources.usingFlumeSource.port = 7777
usingFlume.sources.usingFlumeSource.bind = 0.0.0.0

当然Source也可以有一些可选的配置参数,可以用来配置拦截器和选择器。

参数描述
Interceptors代表一连串拦截器的名单
Interceptors.<Interceptors.name>.*传递给指定名称拦截器的参数
SelectorChannel选择器使用的别名
Selector.*传递给Channel选择器的配置参数

配置拦截器实例

usingFlume.source.avro.interceptor = i1 i2
usingFlume.source.avro.interceptor.i1.type = host
usingFlume.source.avro.interceptor.i1.preserveExsiting= true
usingFlume.source.avro.interceptor.i2.type = static
usingFlume.source.avro.interceptor.i2.key= header
usingFlume.source.avro.interceptor.i2.value= staticValue

配置选择器实例

usingFlume.source.avro.selector.type = multiplexing
usingFlume.source.avro.selector.header = priority
usingFlume.source.avro.selector.mapping.1 = channel1
usingFlume.source.avro.selector.mapping.2 = channel2
usingFlume.source.avro.selector.default = channel2

Sink-Source通信

Flume灵活性的重点就是Fluem的RPC Sink-to-Source的结合,RPC sink用来被设计给RPC source发送事件。Source能够接受大量的Sink或者RPC客户单发送的数据,尽管每个RPC Sink只能发送数据给一个RPC Source,但是每个Agent可以配置使用Sink组和Sink处理器,来发送数据给多个其他的Agent。

Avro Source

Flume主要的RPC-Source是Avro-Source。Avro-Source被设计为高扩展的RPC服务器端,能从其他的Flume Agent的Avro Sink或者使用Flume的SDK发送数据的客户端应用,接受数据到一个Flume Agent中。

Flume的Avro Source使用Netty-Avro inter-process的通信协议。

Avro-Source可以配置用来接受解压缩的Avro-Sink发送的压缩过的事件。也可以接受SSL加密后的数据。

Avro-Source配置

参数描述
typeavro,也可以用完整类别名称
bindIP地址,或者主机名,0.0.0.0绑定机器的所有接口
threadsinfinity,接受从客户端 或者Avro-Sink传入数据的最大工作线程数量
ssltrue/false是否启动SSL,如果启用需要keystore和keystore-password
keystore使用ssl的keystore 路径
keystore-password打开keystore 的密码
keystore-type默认JKS0,使用keystore类型
compression-type解压缩数据的压缩格式,如zlib。如果要接受zlib压缩的数据,设置为deflate

Avro-Source使用Netty服务器来处理请求,Netty服务器使用Java的非阻塞I/O,这保证了Netty服务器使用相对较少的线程处理高的请求数。Avro-Source允许配置线程的最大数量。

如果数据在广域网数据中心传播,配置compression-type是非常有用的,能够减少使用的带宽。如果这个参数没有设置,或者设置为none,而接受的数据都是压缩的,这可能会导致事件积压在前一阶段,因为Source将不能解析压缩数据,会给前一阶段返回错误,将导致前一阶段一直重试。

下面配置了一个SSL和压缩的Avro Source的例子

usingFlume.sources = avroSrc
usingFlume.channels = memChannel

usingFlume.sources.avroSrc.type = avro
usingFlume.sources.avroSrc.channels = memChannel

# 绑定到所有的接口
usingFlume.sources.avroSrc.bind = 0.0.0.0
usingFlume.sources.avroSrc.port = 4353

# SSL
usingFlume.sources.avroSrc.ssl = true
usingFlume.sources.avroSrc.keystore = /tem/keystore.jks
usingFlume.sources.avroSrc.keystore-password = usingFlume
usingFlume.sources.avroSrc.keystore-type = jks

# 解压缩zlib
usingFlume.sources.avroSrc.compression-type = deflate

# channel配置
usingFlume.channels.memChannel.type = memory
usingFlume.sinks = avroSink
usingFlume.channels = memChannel

# channel配置
usingFlume.channels.memChannel.type = memory

# sink配置
usingFlume.sinks.avroSink.type = avro
usingFlume.sinks.avroSink.channels = memChannel
usingFlume.sinks.avroSink.hostname = node001.com
usingFlume.sinks.avroSink.port= 4353

# SSL
usingFlume.sinks.avroSink.ssl = true
usingFlume.sinks.avroSink.trust-all-certs = /tem/keystore.jks
usingFlume.sinks.avroSink.truststore = /path/keystore
usingFlume.sinks.avroSink.truststore-password = usingFlume
usingFlume.sinks.avroSink.truststore-type= jks

# 解压缩 zlib
usingFlume.sinks.avroSink.compression-type = deflate
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值