一、Avro Souce介绍
Flume主要的RPC Source是Avro Source
Avro Source被设计为高扩展的RPC服务器端,能从其他的Flume Agent的Avro Sink或者使用Flume的SDK发送数据的客户端应用,接受数据到一个Flume Agent中。
Avro Source的可扩展性结合Channel担当了缓冲器的角色,使得Flume Agent能够处理重要的负载峰值。
Flume的Avro Source使用Netty-Avro inter-process的值通信(IPC)协议来通信,因此可以用Java或JVM语言发送数据到Avro Source。如果想从应用使用Avro Source发送事件给一个Agent,你可以利用Flume SDK,或者嵌入式Agent来完成。
Avro Source可以配置用来从配置好输出压缩事件的Avro Sink中接收压缩的事件。也可以配置来确保接收任何客户端或Sink发送的使用SSL加密的数据。
二、Avro Source参数说明
配置参数
默认值
描述
type
Avro Source的别名是avro,也可以使用完整类别名称org.apache.flume.source.AvroSource
bind
绑定的ip地址或主机名。使用0.0.0.0表示绑定机器所有的接口
port
绑定的端口
threads
infinity
接收从客户端或Avro Sink传入的数据的最大工作线程的数量,默认无穷大
ssl
false
设置为true时表示,所有连接到Source的客户端都需要使用SSL,如果使用了SSL,则keystore和keystore-password参数是必须的。
keystore
使用SSL的keystore的路径
keystore-password
打开keystore使用的密码
keystore-type
JKS
正在使用的keystore的类型
compression-type
用于解压缩传入数据的压缩格式。唯一支持的压缩格式是zlib。如果要接收zlib压缩的数据,设置该参数为deflate。
ipFilter
false
设置为true启用ip过滤
ipFilter.rules
通过此配置,定义ip过滤的表达式规则
Avro Source使用Netty服务器来处理传入的请求。Netty服务器使用Java的非阻塞I/O(NIO),这保证了当Netty服务器使用了相对较少的线程来处理请求的高性能。Avro Source允许用户配置线程的最大数量,但实际线程受JVM、操作系统、硬件等的限制。
Keystore是用Java标准定义的加密密钥和证书的集合,每隔keystore受可以用来加载keystore的密码保护。在Flume实例中,密码以纯文本存储在Flume配置文件中,配置文件必须以恰当的权限来保护,以避免密码落入他人手中。
使用的加密算法通过Java安全属性文件里的ssl.KeyManagerFactory.algorithm定义,如果Java文件中这个参数没有设置,就会使用SunX509算法。【Java安全指南】
Avro Sink和Flume RPC客户端可以配置用于发送数据给Avro Source之前压缩数据,如果数据在广域网或数据中心之间的传输时,这个非常有用的,能够减少使用的宽带。目前Avro Source仅对RPC支持zlib压缩,为了使Avro Source能以压缩的形式接收数据,需要将compression-type参数设置为deflate。如果这个参数没有设置或者设置为none,Flume将不会解压数据,这可能导致事件积压在前一阶段(因为Source讲不能解析压缩数据,会给前一段返回错误,将导致该阶段一直重试)
如果compression-type参数设置为deflate,那么传入的数据必须被压缩,否则Source不能解析传入的数据。所以,Sink或Flume客户端必须配置为压缩将要发送的数据。因此,如果压缩和为压缩的数据被传输到相同的Flume Agent时,agent应该能运行两种Avro Source:一种用来接收压缩的数据,另一种用来接收未压缩的数据。
当Avro Sink或Flume RPC客户端发送数据到Avro Source时,数据是分批被压缩的,而不是按照每个事件,因此这可能会提供更好的压缩率,减少压缩内存的使用情况。
ipFilter.rul