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>.* | 传递给指定名称拦截器的参数 |
Selector | Channel选择器使用的别名 |
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配置
参数 | 描述 |
---|---|
type | avro,也可以用完整类别名称 |
bind | IP地址,或者主机名,0.0.0.0绑定机器的所有接口 |
threads | infinity,接受从客户端 或者Avro-Sink传入数据的最大工作线程数量 |
ssl | true/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