flume jvm调优_Flume架构及常见面试

一、Flume基础架构

1、Agent

Agent是一个JVM进程,它以事件(Event)的形式将数据从源头送至目的。

Agent主要有3个部分组成,Source、Channel、Sink。

2、Event

Flume数据传输的基本单元,以Event的形式将数据从源头送至目的地。

Event由Header和Body两部分组成,Header用来存放该event的一些属性,为K-V结构,Body用来存放该条数据,形式为字节数组。

3、Interceptors

在source将event放入到channel之前,调用拦截器对event进行拦截和处理。

4、Channel Selectors

一个source对接多个channel时,channel selector选择channel将event存入。replicating(默认):source会将event在每个channel都复制一份。

向可选的channel写入event时,即便发生异常,也会忽略。multiplexing:根据event header中的属性,参考用户自己配置的映射信息,将event发送到指定的channel。

5、Sink Processors:

多个sink从一个channel中取数据,Sink Processors从中挑选一个sink来取数据DefaultSinkProcessor:如果Agent中只有一个sink,默认使用DefaultSinkProcessor,如果有多个sink,多个sink对接一个channel,不能使用DefaultSinkProcessor。

LoadBalancingSinkProcessor对应的是Sink Group,可以实现负载均衡的功能,维护了sink组中active的sink,使用round_robin或random算法,来分散sink组中存活的sink之间的负载。

FailoverSinkProcessor对应的是Sink Group,可以实现故障转移的功能,维护了一个多个sink的优先级列表,按照优先级保证至少有一个sink是可以干活的,如果优先级高的sink故障了会被转移到故障池中冷却,冷却时故障的sink会尝试发送event,一旦发送成功就会移动到存活的池中。

二、Flume常用source:

1、SpoolingDirSource:

监控目录,读取目录中新增的文件,将文件的内容封装为event。

2、TailDirSource:

目前只能监控文件,读取多个文件最新追加写入的内容。

不会丢数据(可靠的)即使flume出现了故障或挂掉。

Taildir Source在工作时,会将读取文件的最后的位置记录在一个json文件中,一旦agent重启,会从之前已经记录的位置,继续执行tail操作。

Json文件中位置是可以修改,修改后,Taildir Source会从修改的位置进行tail操作。

如果JSON文件丢失了,此时会重新从每个文件的第一行重新读取,这会造成数据的重复。

常见问题:

TailDirSource采集的文件,不能随意重命名。

如果日志正在写入时,名称为 xxxx.tmp,写入完成后改名为xxx.log,此时一旦匹配规则可以匹配上述名称,就会发生数据的重复采集。

三、自定义Interceptor

点赞、评论、浏览等不同类型的日志需要发送到不同的分析系统。此时会用到Flume拓扑结构中的Multiplexing结构,Multiplexing的原理是,根据event中Header的某个key的值,将不同的event发送到不同的Channel。

定义一个Interceptor,根据event中body的类型,为不同类型的event的Header中的key赋予不同的值。

四、Flume参数调优

1、source:

batchSize:source一次批量运输到Channel的event条数

2、channel

①type:memory:channel的性能最好,但是如果Flume进程意外挂掉可能会丢失数据。

file:channel的容错性更好,但是性能上会比memory channel差。

②capacity:channel可容纳最大的event条数

③transactionCapacity:每次Source往channel里面写的最大event条数和每次Sink从channel里面读的最大event条数

3、sink

batchSize:Sink一次批量从Channel读取的event条数,适当调大这个参数可以提高Sink从Channel搬出event的性能。

五、Flume事务机制

六、Flume采集数据会丢失吗?

生产环境中使用TailDirSource + FileChannel 所有没有出现丢数据的情况。

根据Flume的架构原理,Flume是不可能丢失数据的,其内部有完善的事务机制,Source到Channel是事务性的,Channel到Sink是事务性的,因此这两个环节不会出现数据的丢失。

唯一可能丢失数据的情况是Channel采用memoryChannel,agent宕机导致数据丢失。

Flume不会丢失数据,但是有可能造成数据的重复,例如数据已经成功由Sink发出,但是没有接收到响应,Sink会再次发送数据,此时可能会导致数据的重复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值