第二章 flume 的数据流模型

1. flume 的基本概念

本文中所有与 flume 相关术语都采用斜体英文表示,这些术语的含义如下所示。

flume             一个可靠的,分布式的,用于采集,聚合,传输海量日志数据的工具。

Web Server   一个产生 Events/数据 的客户端。

Agent            flume 系统中的一个节点,它主要包含三个部件:SourceChannelSink

Event            事件,在 flume-agent 内部传输的数据结构。一个 Event 由 Map<String, String>Headers 和 byte[] body 组成,其中 Headers 保存了 Event 的属性,body 保存了 Event 的内容。

Source         Agent Source 用来接收 WebServer 产生的 Events,以及其他 flume-agent 中的 Sink 产生的 Events。

Channel       Source 将 Events 放在 Channel 中保存,Channel 主要有两种,是 MemoryChannel 和 FileChannel,分别将 Events 存放在内存中和文件中。

Sink              Sink 用来消费 Channel 内保存的 Events,然后将 Events 发送出去。

Sinkgroups   将多个 Sink 组合在一起,形成 Sinkgroups。

HDFS           Hadoop分布式文件系统,它用来存储日志数据,也就是 Sinks 发送出来的 Events

2. flume 的数据流模型

(1) 单 Agent 单数据流模型

在单个 Agent 内由单个 Source, Channel, Sink 建立一个单一的数据流模型,如下图1 所示,整个数据流为 Web Server --> Source --> Channel --> Sink --> HDFS。

图1 单 Agent 单数据流模型

(2) 多 Agent 串行传输数据流模型

如下图 2 所示,多个 Agent 可以串在一起,将数据从 Agent foo 传输到 Agent bar,再传输到目的地。

图2 多 Agent 串行传输数据流模型

(3) 多 Agent 汇聚数据流模型

如下图 3 所示,我们将来自于位于不同服务器的 Agent1, Agent2, Agent3 收集到的数据 汇聚到一个中心节点 Agent4 上,再由 Agent4 统计将数据写入到 HDFS上。通常这种情况下,我们称 Agent1, Agent2, Agent3
为 flume_agent,称 Agent4 为 flume_collector,即汇聚节点的含义。

图3 多 Agent 汇聚数据流模型

(4) 单 Agent 多路数据流模型

一个 Agent 中可以由一个 Source ,多个 Channels ,多个 Sinks 组成多路数据流,其多路数据流模型如下图4所示。

一个 Source 接收外部 Events,并将 Events 发送到三路 Channel 中去,然后不同的 Sink 消费不同的 Channel 内的 Events ,再将 Events 进行不同的处理。

Source 如何将 Events 发送到不同的 Channel 中?这里 flume 采用了两种不同的策略,是 replicating 和 multiplexing 。

其中 replicating 是 Source 将每个 Event 都发送到 Channel 中,这样就将 Events 复制成 3 份发到不同的地方去。

其中 multiplexing 是 Source 根据一些映射关系,将不同种类的 Event 发送到不同的 Channel 中去,即将所有 Events 分成3份,分别发送到三个 Channels

图4 单 Agent 多路数据流模型

(5) Sinkgroups 数据流模型

上面 4 种数据流模型,都会有同一个问题:一条数据流经过的所有节点,如果中间的某个节点 Down 之后,都会影响整个数据流断流。flume 内部提供了 sinkgroups 数据流模型,能够将下游多个节点组合成一个集群,其中集群中的某个节点 Down 之后,不影响数据流。

sinkgroups 将 sinks 组合在一起,通过两种策略从中选择一个 sink 来消费 channel。sinkgroups 提供的两种策略有 :failover 和 loadbalance。

其中 failover 机制,会将所有 Sinks 标识一个优先级,一个以优先级为序的 Map 保存着 活着的 Sink,一个队列保存着 失败的 Sink。每次都会选择优先级最高的活着的 Sink 来消费 Channel 的 Events。每过一段时间就对失败队列中的 Sinks 进行检测,如果变活之后,就将其插进
活着的 Sink Map。

另一种 load_balance机制,在这种机制下,还有两种不同的策略,分别是 round_robin 和 random。则 round_robin 就是不断地轮询 Sinkgroups 内的 Sinks,已保证均衡。random 则是从 Sinkgroups 中的 Sinks 随机选择一个。

图5 sinkgroups 数据流模型。

(6) 扩展数据流模型。

上述 5 种数据流模型是官方文档中提到的,我只是知识的搬运工。

由于 flume 提供了三种组件 Source, Channel, Sink。在 flume 允许范围内可以任意组织这三种组件建立出各种各样的数据流模型来满足需求。现在就充分发挥我们的想象力,组合各种样的数据流模型来满足各种各样的需求。

在单个 Agent 可以有多个 Source, Channel, Sink 组成多条数据流,它们彼此独立,互不关联。如下图6 所示,两个并行的数据流模型为 web server1 --> source1 --> channel1 --> sink1 --> HDFS1,web server2 --> source2 --> channel2 --> sink2 --> HDFS2。

图6 单 Agent 多条数据流模型

Agent 提供多种输入源,即多个 Source,一个 Channel,一个 Sink 组合的数据流模型,如下图7所示。

图7 多种输入源数据流模型

3. 总结

在 flume 提供的数据流模型中,几个原则很重要。

Source--> Channel

(1)单个 Source 组件可以和 多个Channel 组合建立数据流,既可以replicating 和 multiplexing。

(2)多个 Sources 可以写入单个 Channel 。

Channel-->Sink

(3)多个 Sinks 又可以组合成 Sinkgroups 从 Channel 中获取数据,既可以 loadbalancing 和 failover 机制。

(4)多个 Sinks 也可以从单个 Channel 中取数据。

根据上述 4 个原则,你可以设计出满足你需求的数据流模型。

时间: 2024-12-09 21:41:36

第二章 flume 的数据流模型的相关文章

flume的基本概念,数据流模型

1.flume的基本概念 本文中所有与flume相关术语都采用斜体英文表示,这些术语的含义如下所示. flume             一个可靠的,分布式的,用于采集,聚合,传输海量日志数据的系统. Web Server   一个产生 Events 的系统. Agent            flume 系统中的一个节点,它主要包含三个部件:Source, Channel, Sink. Event            事件,在 flume-agent 内部传输的数据结构.一个 Event 由

网页音频API 第二章

第二章 完美的时间模型和时延网页音频API比<audio>标签更强大的一处在于它有一个低延迟.精准的时间模型.对于游戏和交互式应用来说,低延迟是非常重要的,因为你通常需要非常快的用声音来响应用户操作.如果这个反馈不是即时的,用户会感觉到这个延迟,这是不让人满意的.实际上,由于人类听觉的缺陷,延迟的误差可高达20毫秒,不过这个数字还会随着很多其他的因素来改变.精准的时间模型使你能够把事件安排在未来特定的时间.这对用脚本控制(播放)的场景和音乐应用来说非常有用. 时间模型音频上下文的一个关键点在于

《Entity Framework 6 Recipes》翻译系列 (3) -----第二章 实体数据建模基础之创建一个简单的模型 (转)

第二章 实体数据建模基础 很有可能,你才开始探索实体框架,你可能会问“我们怎么开始?”,如果你真是这样的话,那么本章就是一个很好的开始.如果不是,你已经建模,并在实体分裂和继承方面感觉良好,那么你可以跳过本章. 本章将带你漫游使用实体框架建模的基本实例,建模是实体框架的核心特性,同时也是区别实体框架和微软早期的数据访问平台的特性.一旦建好模,你就可以面向模型编写代码,而不用面向关系数据库中的行和列. 本章以创建一个简单概念模型的实例开始,然后让实体框架创建底层的数据库,剩下的实例,将向你展示,如

ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类.指定数据库连接字符串以及创建一个数据库.最后,我们还将添加视图和控制器来管理和显式产品和分类数据. 注意:如果你想按照本章的代码编写示例,你必须完成第一章或者直接从www.apress.com下载第一章的源代码. 2.1 添加模型类 Entity Framework的代码优先模式允许我们从模型类创

机器学习总结之第二章模型评估与选择

机器学习总结之第二章模型评估与选择 2.1经验误差与过拟合 错误率 = a个样本分类错误/m个样本 精度 = 1 - 错误率 误差:学习器实际预测输出与样本的真是输出之间的差异. 训练误差:即经验误差.学习器在训练集上的误差. 泛化误差:学习器在新样本上的误差. 过拟合:学习器把训练样本学的"太好",把不太一般的特性学到了,泛化能力下降,对新样本的判别能力差.必然存在,无法彻底避免,只能够减小过拟合风险. 欠拟合:对训练样本的一半性质尚未学好. 2.2评估方法 (在现实任务中,还需考虑

[书籍翻译] 《JavaScript并发编程》 第二章 JavaScript运行模型

本文是我翻译<JavaScript Concurrency>书籍的第二章 JavaScript运行模型,该书主要以Promises.Generator.Web workers等技术来讲解JavaScript并发编程方面的实践. 完整书籍翻译地址:https://github.com/yzsunlei/javascript_concurrency_translation .由于能力有限,肯定存在翻译不清楚甚至翻译错误的地方,欢迎朋友们提issue指出,感谢. 本书第一章我们探讨了JavaScri

第二章、需求分析

第二章.需求分析 1.了解需求分析概念及需求获取方法 2.了解需求建模方面 3.结构化分析案例-购销系统 1.1.需求分析的概念和意义 需求是至用户对软件的功能和性能的要求.就是用户希望软件能做是么事情,完成什么样的功能,达到什么性能. 需求分析是在计算机系统的软件功能分配和软件设计之间重要的桥梁作用的一项软件工程活动.描述待开发系统所需完成的功能 需求分析使得系统工程师能够刻画出软件的功能和性能,指明软件和其他元素的接口,并建立软件必须满足的约束. 需求分析的目标是深入描述软件的功能和性能,确

【网络原理】期末复习笔记 第二章 物理层

第二章 物理层 2.1物理层的基本概念 物理层定义:解决如何在连接各种计算机的传输媒体上传输数据比特流,而不是具体的传输媒体. 物理层的主要任务为:确定与传输媒体的接口的特性 机械特性:接口形状,大小,引线数目 功能特性:电压强度决定信号大小 电器特性 :规定电压范围 过程特性:建立连接时各个相关部件的工作步骤. 2.2 通讯模型(通讯的目的是传递数据) 信息:文字/图片/视频 数据:信息在传输之前需要编码,编码之后的信息就是数据 信号:数据在通信线路上传递需要变成光信号.电信号 码元:时间间隔

linux程序设计——shell程序设计(第二章)

第二章    shell程序设计 本章介绍以下内容: 什么是shell 基本思路 微妙的语法:变量,条件判断和程序控制 命令列表 函数 命令和命令的执行 here文档 调试 grep命令和正则表达式 find命令 shell执行shell程序,这些程序通常称为脚本,它们是在运行时解释执行的.这使得调试工作比较容易进行,因为可以逐行地执行指令,而且节省了重新编译的时间.然而,这也使得shell不适合用来完成时间紧迫型和处理器忙碌型的任务. UNIX架构非常依赖于代码的高度可重用性,如果你编写了一个