flume-ng 源码分析 - 整体架构 2【常用架构篇】

本贴最后更新于 2347 天前,其中的信息可能已经事过境迁

##数据流模型
14961138312658.jpg

flume 中基本概念

1.Event:一个流经 Agent 的基本数据单位;Event 从 Source 流向 Channel 最后到 Sink。实现了 Event 接口。在 Event 的流向中,可以设置可选的 header 参数。
2.Agent:一个 Agent 表示一个拥有一些组件(source,channel,sink)的 jvm 进程。这些组件允许,Events 从一个外部源,流向下一个目的地。
3.flow:表示一个数据流向
4.source:source 消费可以识别格式的 Events。这些 Events 可以通过像 web server 的客户端发送。例如 arvoSource 可以从 client 或者其他 flume agent 接受 arvoEvents.当 Source 接受到 Events 时,将它存储在一个或者多个 Channel 中
5.Channel:是一个被动存储。他会存储接收到的 Events 直到这些 Events 被 Sink 消费掉。比如 fileChannel,用贝本地文件系统作为后备存储;
6.Sink:Sink 消费 channel 中的数据。sink 负责将 Event 从 channel 中移除,并且将 Events 放在外部存储如 HDFS(这可以通过 HDFSSINK 实现)或者传送给下一个 Flume agent 中的 source。因为 Flume 中有 Channel 的存在,在一个给定的 Agent 中 source 和 sink 可以异步的执行

简单的日志收集

假设我们要收集 ng 的日志。我们可以按照以下的方案进行部署。

14961161955654.jpg

流程如下

1.每台 websever 上部署一个 flume agent
2.使用 tail 命令
3.channel 可以使用 memorychannel
4.sink 统一写到 es 服务器中。前端使用 kibana 查询

虽然上面的应用场景可以满足需求。但是缺点也是非常的明显

1.各环节丢失数据的可能性较大(如果可以容忍数据丢失,则关系不大)
2.每台 webserver 上部署一个 flume agent,不利于维护。比如 sink 还想往 kafka 写,那么所有的 flume agent 都需要更改。

复杂的日志收集

先来看看 Event 在 flume flow 中的扭转流程:

1.source 接收 Event
2.source 将 Event 传送给 ChannelProcessor
3.在 ChannelProcessor 中收件会将 event 传递给 InterceptorChain,InterceptorChain 中包含多个 Interceptor。Interceptor 的概念就相当于 java web 开发中的 servlet 的概念。提供了一种修改或者删除 Event 的能力.比如 Timestamp Interceptor 将会在 Event 的 header 中加入 Event 被处理的时间戳,key 为 timestamp。
4.当 Event 被 Interceptor 处理后就会通过 ChannelSelector 选择合适的 channel,将 Event 发送到 Channel 中。
flume 中提供了两种方式 :

  • MultiplexingChannelSelector 多路复用选择器
  • ReplicatingChannelSelector 复制选择器

5.sink 从 channel 中消费数据,这里和 source 向 channel 中存放数据是异步的。所以 sink,只需要监听和自己关联的 channel 的变化即可。对于 sink,提供了三种策略:

  • DefaultSinkProcess :失败了就失败了,稍后进行重试
  • LoadBalancingSinkProcessor:负载均衡,有 RandomOrder,RoundRobin 和 FixedOrderSelector 三种选择
  • FailoverSinkProcessor:给多个 sink 定义优先级,如果其中一个失败了,则发送到下一个优先级的 Sink。如果执行过程中 Sink 抛出异常,那么将该 Sink 从存活的队列中移除。然后指数级时间重试。默认开始等待 1s 重试。最大等待时间是 30s。当 Sink 恢复后将会加入存活的队列中。

基于上面分析,可以基本画出 flume event 的基本流转

14961302533427.jpg

基于第一种方式的搜集方式和 Event 数据流转的分析。如果我们需要采集日志,整体架构可以采用下面的方式进行部署。

14961289968437.jpg

  • 在收集层,agent 和 web server 部署在同一台机器上。(这里我们也可以开发 flume 的 Embedded agent)通过 RPC 将数据流入聚合层。这一层应该快速的将日志收集到聚合层。
  • 聚合层进行日志数据的聚合和收集,在这一层,可以做容错处理,如负债均衡或者 failover.以提升可靠性。在这一层,数据量大时可以打开 fileChannel,作为数据缓冲区,避免数据的丢失。以后主要的维护工作也主要在这一层上面。
  • 在存储层,一般会流向 hdfs,kafka 以供离线和实时的数据分析。
  • Flume

    Flume 是一套分布式的、可靠的,可用于有效地收集、聚合和搬运大量日志数据的服务架构。

    9 引用 • 6 回帖 • 661 关注
  • sink
    1 引用

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...

推荐标签 标签

  • Ant-Design

    Ant Design 是服务于企业级产品的设计体系,基于确定和自然的设计价值观上的模块化解决方案,让设计者和开发者专注于更好的用户体验。

    17 引用 • 23 回帖 • 3 关注
  • TGIF

    Thank God It's Friday! 感谢老天,总算到星期五啦!

    291 引用 • 4495 回帖 • 661 关注
  • 又拍云

    又拍云是国内领先的 CDN 服务提供商,国家工信部认证通过的“可信云”,乌云众测平台认证的“安全云”,为移动时代的创业者提供新一代的 CDN 加速服务。

    20 引用 • 37 回帖 • 579 关注
  • Caddy

    Caddy 是一款默认自动启用 HTTPS 的 HTTP/2 Web 服务器。

    10 引用 • 54 回帖 • 178 关注
  • 服务

    提供一个服务绝不仅仅是简单的把硬件和软件累加在一起,它包括了服务的可靠性、服务的标准化、以及对服务的监控、维护、技术支持等。

    41 引用 • 24 回帖
  • SOHO

    为成为自由职业者在家办公而努力吧!

    7 引用 • 55 回帖 • 1 关注
  • jsoup

    jsoup 是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址、HTML 文本内容。它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和操作数据。

    6 引用 • 1 回帖 • 490 关注
  • 正则表达式

    正则表达式(Regular Expression)使用单个字符串来描述、匹配一系列遵循某个句法规则的字符串。

    31 引用 • 94 回帖 • 1 关注
  • FFmpeg

    FFmpeg 是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。

    23 引用 • 32 回帖 • 1 关注
  • 尊园地产

    昆明尊园房地产经纪有限公司,即:Kunming Zunyuan Property Agency Company Limited(简称“尊园地产”)于 2007 年 6 月开始筹备,2007 年 8 月 18 日正式成立,注册资本 200 万元,公司性质为股份经纪有限公司,主营业务为:代租、代售、代办产权过户、办理银行按揭、担保、抵押、评估等。

    1 引用 • 22 回帖 • 796 关注
  • Anytype
    3 引用 • 31 回帖 • 26 关注
  • DevOps

    DevOps(Development 和 Operations 的组合词)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。

    59 引用 • 25 回帖
  • 笔记

    好记性不如烂笔头。

    310 引用 • 794 回帖 • 2 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    201 引用 • 120 回帖 • 2 关注
  • jQuery

    jQuery 是一套跨浏览器的 JavaScript 库,强化 HTML 与 JavaScript 之间的操作。由 John Resig 在 2006 年 1 月的 BarCamp NYC 上释出第一个版本。全球约有 28% 的网站使用 jQuery,是非常受欢迎的 JavaScript 库。

    63 引用 • 134 回帖 • 734 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖
  • 宕机

    宕机,多指一些网站、游戏、网络应用等服务器一种区别于正常运行的状态,也叫“Down 机”、“当机”或“死机”。宕机状态不仅仅是指服务器“挂掉了”、“死机了”状态,也包括服务器假死、停用、关闭等一些原因而导致出现的不能够正常运行的状态。

    13 引用 • 82 回帖 • 75 关注
  • Windows

    Microsoft Windows 是美国微软公司研发的一套操作系统,它问世于 1985 年,起初仅仅是 Microsoft-DOS 模拟环境,后续的系统版本由于微软不断的更新升级,不但易用,也慢慢的成为家家户户人们最喜爱的操作系统。

    228 引用 • 476 回帖
  • 快应用

    快应用 是基于手机硬件平台的新型应用形态;标准是由主流手机厂商组成的快应用联盟联合制定;快应用标准的诞生将在研发接口、能力接入、开发者服务等层面建设标准平台;以平台化的生态模式对个人开发者和企业开发者全品类开放。

    15 引用 • 127 回帖 • 5 关注
  • HBase

    HBase 是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的 Google 论文 “Bigtable:一个结构化数据的分布式存储系统”。就像 Bigtable 利用了 Google 文件系统所提供的分布式数据存储一样,HBase 在 Hadoop 之上提供了类似于 Bigtable 的能力。

    17 引用 • 6 回帖 • 66 关注
  • Dubbo

    Dubbo 是一个分布式服务框架,致力于提供高性能和透明化的 RPC 远程服务调用方案,是 [阿里巴巴] SOA 服务化治理方案的核心框架,每天为 2,000+ 个服务提供 3,000,000,000+ 次访问量支持,并被广泛应用于阿里巴巴集团的各成员站点。

    60 引用 • 82 回帖 • 615 关注
  • 运维

    互联网运维工作,以服务为中心,以稳定、安全、高效为三个基本点,确保公司的互联网业务能够 7×24 小时为用户提供高质量的服务。

    151 引用 • 257 回帖 • 1 关注
  • SSL

    SSL(Secure Sockets Layer 安全套接层),及其继任者传输层安全(Transport Layer Security,TLS)是为网络通信提供安全及数据完整性的一种安全协议。TLS 与 SSL 在传输层对网络连接进行加密。

    70 引用 • 193 回帖 • 414 关注
  • Excel
    31 引用 • 28 回帖 • 1 关注
  • uTools

    uTools 是一个极简、插件化、跨平台的现代桌面软件。通过自由选配丰富的插件,打造你得心应手的工具集合。

    7 引用 • 28 回帖 • 2 关注
  • Pipe

    Pipe 是一款小而美的开源博客平台。Pipe 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    134 引用 • 1127 回帖 • 110 关注
  • IBM

    IBM(国际商业机器公司)或万国商业机器公司,简称 IBM(International Business Machines Corporation),总公司在纽约州阿蒙克市。1911 年托马斯·沃森创立于美国,是全球最大的信息技术和业务解决方案公司,拥有全球雇员 30 多万人,业务遍及 160 多个国家和地区。

    17 引用 • 53 回帖 • 145 关注