04、日志收集系统Flume-实时计算4-4:flume自定义开发_第1页
04、日志收集系统Flume-实时计算4-4:flume自定义开发_第2页
04、日志收集系统Flume-实时计算4-4:flume自定义开发_第3页
04、日志收集系统Flume-实时计算4-4:flume自定义开发_第4页
04、日志收集系统Flume-实时计算4-4:flume自定义开发_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Flume深入开发Flume深入开发Flume深入开发--RPCFlume深入开发--SourceFlume深入开发--SinkFlume深入开发--RPCFlumeClient Flume虽然包含了一些内置的机制来采集数据,但是更多的时候用户更希望能将应用程序和flume直接相通。FlumeClient是一个库,允许应用程序连接flume和往flume发送数据通过RPC。Flume深入开发--RPCRPCclientinterface

Flume的RpcClient实现了Flume的RPC机制。用户的应用程序可以很简单的调用FlumeClientSDK的append(Event)或者appendBatch(List<Event>)方法发送数据,不用担心底层信息交换的细节。用户可以提供所需的event通过直接实现Event接口,例如可以使用简单的方便的实现SimpleEvent类或者使用EventBuilder的writeBody()静态辅助方法。

Flume深入开发--RPCRPCclients-AvroandThrift

在Flume1.4.0中,Avro是默认的RPC协议。NettyAvroRpcClient和ThriftRpcClient实现了RpcClient接口。实现中我们需要知道我们将要连接的目标flumeagent的host和port用于创建client实例,然后使用RpcClient发送数据到flumeagent。接下来是一个简单的案例:

Flume深入开发--RPCRPCclients-AvroandThrift

Flume深入开发--RPCRPCclients-AvroandThrift

Flume深入开发--RPCRPCclients-AvroandThrift

Flume深入开发--RPCRPCclients-AvroandThrift

在接收端需要AvroSource或者ThriftSource来监听接口。

Flume深入开发--RPCFailoverClient

封装了AvroRPCclient的类默认提供故障处理能力。hosts采用空格分开host:port所代表的flumeagent,构成一个故障处理组。这FailoverRPCClient目前不支持thrift。如果当前选择的hostagent有问题,这个failoverclient会自动负载到组中下一个host中。

Flume深入开发--RPCFailoverClient

Flume深入开发--RPCLoadBalancingRPCclient

FlumeClientSDK也支持在多个host之间使用负载均衡的RpcClient。这种类型的client带有一个通过空格分隔的host:port主机列表并构成了一个负载均衡组。这个client可以指定一个负载均衡的策略,既可以随机的选择一个配置的host,也可以循环选择一个host。当然你也可以自己编写一个类实现LoadBalancingRpcClient$HostSelector接口以至于用户可以使用自己编写的选择顺序。在这种情况下,用户自定义的类需要被指定为host-selector属性的值。LoadBalancingRPCClient当前不支持thrift。Flume深入开发--RPCLoadBalancingRPCclient

如果开启了backoff,那么client失败将被放入黑名单中,只有过了被指定的超时之间之后这个被选择的失败的主机才会从黑名单中被排除。当超时到了,如果主机还是没有反应,那么这被认为是一个连续的失败并且超时时间会成倍的增长,以避免可能陷入对反应迟钝主机的长时间等待中。

这backoff的最大超时时间可以通过maxBackoff属性来配置,单位是毫秒。在默认情况下maxBackoff的值是30秒(在orderSelector类里面指定)。Flume深入开发--RPCLoadBalancingRPCclient

Flume深入开发--TransactionTransactioninterface Transaction接口是基于flume的稳定性。所有主要的组件(sources、sinks、channels)都必须使用FlumeTransaction。

一个Transaction在Channel实现内实现。每一个连接到channel的source和sink都要获取一个Transaction对象。这Sources实际上使用了一个ChannelSelector接口来封装Transaction。存放事件到channel和从channel中提取事件的操作是在一个活跃的Transaction内执行的。Flume深入开发--TransactionTransactioninterface

Flume深入开发--TransactionTransactioninterface

Flume深入开发--SinkCustomSink

Sink提取event数据从channel中,然后直接将数据发送到下一个flumeagent中或者存储到外部库中。 Sink和channel的关联关系可以在配置文件中配置。有一个SinkRunner实例与每一个已配置的Sink关联,当Flume框架调用SinkRunner.start()方法时候,将创建一个新的线程来驱动这Sink。

Flume深入开发--SinkCustomSink

这个线程将管理这个Sink的生命周期。Sink需要实现LifecycleAware接口的start()和stop()方法。start()方法用于初始化数据;stop()用于释放资源;process()是从channel中提取event数据和转发数据的核心方法。

这Sink需要实现Configurable接口以便操作配置文件。

Flume深入开发--SinkCustomSink

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论