当前位置:   article > 正文

大数据之Flume_flume channel可以连接多个source吗

flume channel可以连接多个source吗


前言

Flume是Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统。Flume基于流式架构,灵活简单。本文主要介绍Flume的相关知识


一、Flume作用

   实时读取服务器本地磁盘的数据,将数据写入到HDFS或作为下一级Flume的输入;

二、Flume架构

在这里插入图片描述

2.1 Agent

   Agent是一个JVM进程,它以事件的形式将数据从源头送至目的,是Flume数据传输的基本单元。Agent主要有3个部分组成,Source、Channel、Sink。

2.1.1 Source

   负责接收数据

   exectail source: 当服务器宕机后,数据传输便会重新开始

   TailDir source: 支持文件的端点续传

2.1.2 Channel

   位于Source和Sink之间的缓冲区;

   Memory Channel:是内存中的队列。Memory Channel在不需要关心数据丢失的情景下适用。在程序关闭或者机器宕机都会丢失数据 -> 性能高,不可靠;

   File Channel: 将所有事件写到磁盘 -> 性能低,可靠

2.1.3 Sink

   Sink不断地轮询Channel中的事件且批量地移除它们,并将这些事件批量写入到存储或索引系统、或者被发送到另一个Flume Agent。

   注意:source可以绑定多个channel,channel也可以绑定多个sink,但是sink只能绑定一个channel
在这里插入图片描述
Sink组有三种形式

(1)默认的,只接受一个配置信息,也就没有组了;
(2)负载均衡(随机,轮训,退避规则);
(3)故障转移,优先向某一个sink发送数据,如果这个挂掉了,就向备用的进行发送。

三、官方方法启动Flume

在这里插入图片描述

四、Flume事务

在这里插入图片描述

4.1 put事务

   通过doput将source中的数据取出放入到缓冲区putlist中,docommit检查channel的内存队列是否足够合并,如果不可以合并,数据回滚到putlist中;

4.2 take 事务

   通过dotake将channel中的数据取出放入到缓冲区takelist中,docommit检查数据是否发送成功,发送成功则清除缓冲区takelist,否则,数据回滚到channel中;

五、单数据源发送到不同目的地

   想将同一个数据源发送到不同的目的地,必须使用多个channel,因为如果使用一个channel,那么后面接着多个sink就相当于是一个sink组,但是sink组的三种方式,默认的,就相当于一个sink,负载均衡是每个人一条,故障转移是优先给某一个发送,其他的没有,都不能实现将同一个数据源的数据发送到多个目的地。

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

  根据Flume的架构原理,Flume是不太可能丢数据的,其内部有完善的事务机制,Source到channel是事务性的,从Channel到Sink也是事务性的,因此这两个环节不会出现数据的丢失;唯一可能丢数据的情况是Channel采用MemoryChannel,agent宕机导致数据丢失或者Channel存储已满,导致Source不再写入,未写入的数据丢失
  此外,Flume可能会造成数据的重复,例如数据已经由Sink成功发出,但是没有收到响应,Sink会在此发送数据,此时可能导致数据的重复。


总结

本文主要介绍Flume的作用、架构、事务以及相关注意事项,如果有不足之处或者有错误的地方希望大家指出,我们共同进步。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/640280
推荐阅读
相关标签
  

闽ICP备14008679号