Flume Agent 组件如何协同工作

如前所述,每个Flume代理由三个主要组件组成:source,channel和sink。在本节中,我们将介绍这些和其他组件以及它们如何协同工作。
Source是从生成数据的其他应用程序接收数据的活动组件。有源产生数据本身,尽管这些来源主要用于测试目的。源可以收听一个或多个网络端口以接收数据或者可以从本地文件系统读取数据。每个源必须连接至少一个通道。源可以写入几个通道,根据一些标准将事件复制到所有或某些通道。
Channels,通常,被动组件(尽管它们可能运行自己的线程进行清理或垃圾收集),缓冲由代理接收到但尚未写入另一代理程序或存储系统的数据。通道行为像队列,源代码写入它们并从中读取。多个源可以安全地写入同一个信道,并且多个信宿可以从同一信道读取。但是,每个接收器只能从一个通道读取。如果从同一个通道读取多个接收器,则可以确保正确的一个接收器将从通道读取。
Sinks不断轮询各自的频道,以阅读和删除事件。接收器将事件推送到下一跳(在RPC接收器的情况下)或到最终目的地。一旦数据安全地在下一跳或其目的地,汇通过事务通知通道,现在可以从通道中删除这些事件。
下图显示了具有单个源,通道和接收器的简单Flume代理。
Flume Agent 组件如何协同工作_第1张图片
Flume本身不会限制代理中的源,通道和汇数。因此,Flume源可以接收事件,并且通过配置将事件复制到多个目的地。这通过以下事实成为可能:源实际上通过信道处理器,拦截器和信道选择器将数据写入信道。
每个source都有自己的通道处理器。每当源将数据写入通道时,通过将该任务委托给其通道处理器来实现。然后,信道处理器将这些事件传递到为源配置的一个或多个拦截器。
拦截器是一段代码,可以读取事件,并根据其进行的某些处理修改或删除事件。拦截器可以用于根据某些标准(如正则表达式)添加事件,为事件添加新标题或删除现有标题等。每个源可以配置为使用多个拦截器,这些拦截器按配置定义的顺序调用,一个拦截器的结果传递给链中的下一个。这被称为责任链设计模式。一旦拦截器完成处理事件,拦截器链返回的事件列表将被传递给通道选择器为列表中每个事件选择的通道列表。
source可以通过处理器 - 拦截器选择器路由写入多个通道。通道选择器是决定哪个通道连接到此源,每个事件必须写入的组件。因此,拦截器可以用于从事件中插入或删除数据,以便信道选择器可以对这些事件应用一些标准来决定必须向哪些信道写入事件。通道选择器可以对事件应用任意过滤标准,以决定每个事件必须写入哪些通道,哪些通道是必需的和可选的。
无法写入所需的通道会导致通道处理器抛出一个ChannelException,以指示源必须重试事件(实际上是该事务中的所有事件),而忽略写入可选通道的失败。一旦事件被写出,处理器指示源的成功,其可以向发送事件的系统发送确认(ACK),并继续接受更多的事件。下图显示了此工作流程。
Flume Agent 组件如何协同工作_第2张图片
接收器运行一个接收器组,其中可能包含一个或多个接收器。如果一个组中只有一个接收器,那么根本就没有一个组更有效。水槽流道只是一个线程,它要求sink组(或sink)处理下一批事件。每个接收器组具有一个接收器处理器,该处理器选择组中的一个接收器来处理下一组事件。每个接收器可以从一个通道接收数据,尽管多个接收器可以从同一通道接收数据。选定的接收器(或单独的接收器,如果没有组)从通道接收事件并将它们写入下一跳或最终目的地。这下图所示。
Flume Agent 组件如何协同工作_第3张图片

你可能感兴趣的:(Flume实战)