Flume NG:Flume 发展史上的第一次革命

Flume 作为 cloudera 开发的实时日志收集系统,已经受到越来越多的关注。比如 IBM BigInsights 已经将 Flume 作为产品的一部分。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,这点可以在 BigInsights 产品文档的 troubleshooting 板块发现。为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。本文将从基本组件以及用户体验的角度阐述 Flume OG 到 Flume NG 发生的革命性变化。


背景

Cloudera 开发的分布式日志收集系统 Flume,是 hadoop 周边组件之一。其可以实时的将分布在不同节点、机器上的日志收集到 hdfs 中。Flume 初始的发行版本目前被统称为 Flume OG(original generation),属于 cloudera。但随着 FLume 功能的扩展,Flume OG 代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点暴露出来,尤其是在 Flume OG 的最后一个发行版本 0.94.0 中,日志传输不稳定的现象尤为严重,这点可以在 BigInsights 产品文档的 troubleshooting 板块发现。为了解决这些问题,2011 年 10 月 22 号,cloudera 完成了 Flume-728,对 Flume 进行了里程碑式的改动:重构核心组件、核心配置以及代码架构,重构后的版本统称为 Flume NG(next generation);改动的另一原因是将 Flume 纳入 apache 旗下,cloudera Flume 改名为 Apache Flume。

下面将从核心组件变化、角色变化、用户配置变化以及实战等方面阐述 Flume NG 相对于 Flume OG 所发生的革命性变化。

核心组件变化

图 1 和图 3 是两个版本的架构图。

FLUM OG 的特点是:

  • FLUM OG 有三种角色的节点,如图 1:代理节点(agent)、收集节点(collector)、主节点(master)。
  • agent 从各个数据源收集日志数据,将收集到的数据集中到 collector,然后由收集节点汇总存入 hdfs。master 负责管理 agent,collector 的活动。
  • agent、collector 都称为 node,node 的角色根据配置的不同分为 logical node(逻辑节点)、physical node(物理节点)。对 logical nodes 和 physical nodes 的区分、配置、使用一直以来都是使用者最头疼的地方。
  • agent、collector 由 source、sink 组成,代表在当前节点数据是从 source 传送到 sink。如图 2。
图 1. FLUM OG 架构图
FLUM OG 架构图
图 2. OG 节点组成图
OG 节点组成图

对应于 OG 的特点,FLUM NG 的特点是:

  • NG 只有一种角色的节点:代理节点(agent)。
  • 没有 collector、master 节点。这是核心组件最核心的变化。
  • 去除了 physical nodes、logical nodes 的概念和相关内容。
  • agent 节点的组成也发生了变化。如图 4,NG agent 由 source、sink、channel 组成。
图 3. FLUM NG 架构图
FLUM NG 架构图
图 4. NG 节点组成图
NG 节点组成图

从整体上讲,NG 在核心组件上进行了大规模的调整,核心组件的数目由 7 删减到 4。由于 Flume 的使用涉及到众多因素,如 avro、thrift、hdfs、jdbc、zookeeper 等,而这些组件和 Flume 的整合都需要关联到所有组件。所以核心组件的改革对整个 Flume 的使用影响深远:

  • 大大降低了对用户的要求,如核心组件的变化使得 Flume 的稳定使用不再依赖 zookeeper,用户无需去搭建 zookeeper 集群;另外用户也不再纠结于 OG 中的模糊概念(尤其是 physical nodes、logical nodes,agent、collector)。
  • 有利于 Flume 和其他技术、hadoop 周边组件的整合,比如在 NG 版本中,Flume 轻松实现了和 jdbc、hbase 的集成。
  • 将 OG 版本中复杂、大规模、不稳定的标签移除,Flume 实现了向灵活、轻便的转变,而且在功能上更加强大、可扩展性更高,这一点主要表现在用户使用 Flume 搭建日志收集集群的过程中,后面的章节会详细介绍。

删减节点角色,脱离 zookeeper

Zookeeper 是针对大型分布式系统的可靠协调系统,适用于有多类角色集群管理。比如在 hbase 中,对 HMaster、HRegionServer 的管理。

在 OG 版本中,Flume 的使用稳定性依赖 zookeeper。它需要 zookeeper 对其多类节点(agent、collector、master)的工作进行管理,尤其是在集群中配置多个 master 的情况下。当然,OG 也可以用内存的方式管理各类节点的配置信息,但是需要用户能够忍受在机器出现故障时配置信息出现丢失。所以说 OG 的稳定行使用是依赖 zookeeper 的。

而在 NG 版本中,节点角色的数量由 3 缩减到 1,不存在多类角色的问题,所以就不再需要 zookeeper 对各类节点协调的作用了,由此脱离了对 zookeeper 的依赖。由于 OG 的稳定使用对 zookeeper 的依赖表现在整个配置和使用过程中,这就要求用户掌握对 zookeeper 集群的搭建极其使用(尤其是要熟悉 zookeeper 数据文件夹 data,Flume 节点配置信息存放在此文件夹中);掌握 Flume 中和 zookeeper 相关的配置。对初次接触 Flume 的用户来讲,这是非常痛苦的事。

用户配置变化

从用户角度来讲,配置过程无疑是整个集群搭建的核心步骤。Flume 的配置分为两个部分:安装和数据传输配置。

安装

OG 在安装时:

  • 在 flume-env.sh 中设置$JAVA_HOME。
  • 需要配置文件 flume-conf.xml。其中最主要的、必须的配置与 master 有关。集群中的每个 Flume 都需要配置 master 相关属性(如 flume.master.servers、flume.master.store、flume.master.serverid)。
  • 如果想稳定使用 Flume 集群,还需要安装 zookeeper 集群,这需要用户对 zookeeper 有较深入的了解。
  • 安装 zookeeper 之后,需要配置 flume-conf.xml 中的相关属性,如 flume.master.zk.use.external、flume.master.zk.servers。
  • 在使用 OG 版本传输数据之前,需要启动 master、agent。

NG 在安装时,只需要在 flume-env.sh 中设置$JAVA_HOME。

数据传输配置

OG 版本的配置途径有两个:

  • shell 命令:需要用户掌握 Flume shell 命令;
  • master console 页面:这是 OG 用户最常用的配置方式;弊端在于,除非用户熟悉复杂的各类 source,sink 配置函数以及格式(source:大约 25 个,sink:大约 46 个),否则在复杂的集群环境下,用户每次只能配置一个节点(指定 source、sink)来保证配置的准确性;

NG 的配置只需要一个配置文件,这个配置文件中存放 source、sink、channel 的配置。如图 5 中是配置文件 example.conf 里面的内容,其中 agent_foo 是 agent 名字。然后在启动 agent 时,使用一下命令指定这个配置文件:

$ bin/flume-ng agent
--conf-file example.conf \
--name agent_foo \
-Dflume.root.logger=INFO,console
图 5. example.conf
example.conf

实战 Flume NG

Flume 最常用的使用场景是,从节点收集日志数据,并以一定的格式存放到分布式文件系统 hdfs(hadoop 文件系统)中。下面介绍如何使用 Flume NG 从一个节点收集实时日志,并存放到 hdfs 中。

场景说明:

  • 场景中有两台主机 host1、host2。
  • 数据源是 host2 上的系统日志文件“/var/log/secure”(登录到系统存取资料的记录,本机的测试系统有多人使用,所以记录在不断的生成)。数据目的地是 hadoop 文件系统 hdfs。
  • 在 host1、host2 上搭建 hadoop 集群。其中 host1 为 namenode、jobtracker,host2 为 datanode、tasktracker。

使用 ng 搭建日志传输场景:flume+hadoop

场景搭建步骤:

  • 下载 flume-ng 安装包,并解压到 host2。

    Flume 发布了两类包:source 和 bin。Source 包用于开发工作,bin 包用于安装 Flume 搭建日志收集场景。本次实验用的是 apache-flume-1.2.0-bin.tar.gz

  • 生成配置文件 example.conf。内容如图 6。整个配置分为四部分。表 1 是配置说明。
  • 进入 bin 目录,使用一下命令启动 Flume,开始日志收集,控制台输出如图 7,传输到 hdfs 的文件如图 8。
./flume-ng agent \
--conf-file ../example.conf \
--name agent_ff \
-Dflume.root.logger=INFO,cnsole
图 6. example.conf
example.conf
表 1. flume-conf.xml
Properties Name Description
agent_ff 用来收集日志信息的 agent 节点名称
agent_ff.source 需要收集的信息源,名字:tailsource-ff
agent_ff.sinks 日志需要被收集到此处,名字:hdfsSink-ff。
agent_ff.channels 日志的收集需要通过此管道,名字:memoryChannel-ff。
tailsource-ff.type 定义 source 的类型,此处 exec 代表数据源是 exec 命令
tailsource-ff.command 定义具体命令,此处是对文件/var/log/secure 做 tail
tailsource-ff.channels 数据传输的管道,此处的管道名称应该和 sink 相同。从而将 source、sink 通过 channels 进行连接。
memoryChannel-ff.type 管道类型,代表事件存储的方式。Source 产生事件,sink 移除事件,以此代表数据传输完成。目前 Flume 支持 6 种 channel。此处是 momery,代表事件是存在内存里
memoryChannel-ff.capacity 管道里可以存放的最多的事件数目。此处代表 memoryChannel-ff 最多可存放 1000 个事件。
hdfsSink-ff.type 数据目的地的类型,此处是将数据存放在 hdfs 中。
hdfsSink-ff.channel 定义和 source 相关联的管道。
hdfsSink-ff.hdfs.path 数据存放在 hdfs 中的位置。
hdfsSink-ff.hdfs.filePrefix 收集到的数据存放的文件以此为前缀。如图 8。
hdfsSink-ff.hdfs.round, hdfsSink-ff.hdfs.roundValue, hdfsSink-ff.hdfs.roundUnit 定义在 hdfs 中生成的文件的时间戳。此处代表将 hdfs 中的文件的时间戳,向下取整到上一个十分钟内。比如说,在 2012 年 6 月 12 号上午 11:54:34 生成的事件,在 hdfs 中生成的路径将是/flume/events/2012-06-12/1150/00。
图 7. NG console
NG console
图 8. hdfs
hdfs

Flume OG vs Flume NG:用户体验对比

整体上看,NG 的用户体验要比 OG 好得多,这一点从用户文档上就可见一斑。OG 版本的使用文档有 90 多页,而 OG 只用 20 多页的内容就完成了新版 Flume 的使用说明。对应于上一节“实战 Flume NG”,我们使用和 NG 中同样的场景说明,下面介绍如何使用 OG 搭建同样的日志收集场景。用户可以从场景的搭建上明显的看出差别:NG 的整个过程只涉及到 hadoop、agent,而 OG 则需要涉及到 hadoop、zookeeper、master、agent、flume-conf.xml。

使用 og 搭建日志传输场景:flume+zookeeper+hadoop

场景搭建步骤:

  • 下载 zookeeper 安装包,并在 host2 上安装 zookeeper-3.4.3。请参考:zookeeperStarted
  • 下载 flume-0.94.0(OG),并解压在 host2 上。
  • 配置文件 conf/flume-conf.xml,必须配置的信息如表 2。
  • 进入 bin 目录,使用一下命令启动 flume master、agent。
    master: ./flume-daemon.sh start master
    agent: ./flume node -n agent-ff
  • 进入 master 页面:http://host2:35871/flumemaster.jsp。配置 source、sink。如图 9。“Submit Query”后 Flume 便开始收集数据。
  • agent-ff 控制台输出如图 10。
表 2. flume-conf.xml
属性(Property) 赋值(Value)
flume.master.servers host2
flume.master.store zookeeper
flume.master.serverid 0
flume.master.zk.use.external true
flume.master.zk.servers host2:2181
图 9. OG 配置
OG 配置
图 10. OG console
OG console

结束语

本文通过对比,从核心组件和用户的角度,阐述了 Flume NG 给 Flume 带来的第一次革命。从核心组件来讲,NG 简化核心组件,移除了 OG 版本代码工程臃肿、核心组件设计不合理、核心配置不标准等缺点;另外 NG 脱离了 Flume 稳定性对 zookeeper 的依赖。从用户角度来讲,NG 版本对用户要求大大降低:安装过程除了 java 无需配置复杂的 Flume 相关属性,也无需搭建 zookeeper 集群,安装过程几乎零工作量;数据流的配置过程更加简单、合理,只需要实现 source、sink、channel 的简单配置即可。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
上层应用业务对实时数据的需求,主要包含两部分内容:1、 整体数据的实时分析。2、 AB实验效果的实时监控。这几部分数据需求,都需要进行的下钻分析支持,我们希望能够建立统一的实时OLAP数据仓库,并提供一套安全、可靠的、灵活的实时数据服务。目前每日新增的曝光日志达到几亿条记录,再细拆到AB实验更细维度时,数据量则多达上百亿记录,多维数据组合下的聚合查询要求秒级响应时间,这样的数据量也给团队带来了不小的挑战。OLAP层的技术选型,需要满足以下几点:1:数据延迟在分钟级,查询响应时间在秒级2:标准SQL交互引擎,降低使用成本3:支持join操作,方便维度增加属性信息4:流量数据可以近似去重,但订单行要精准去重5:高吞吐,每分钟数据量在千W级记录,每天数百亿条新增记录6:前端业务较多,查询并发度不能太低通过对比开源的几款实时OLAP引擎,可以发现Doris和ClickHouse能够满足上面的需求,但是ClickHouse的并发度太低是个潜在的风险,而且ClickHouse的数据导入没有事务支持,无法实现exactly once语义,对标准SQL的支持也是有限的。所以针对以上需求Doris完全能解决我们的问题,DorisDB是一个性能非常高的分布式、面向交互式查询的分布式数据库,非常的强大,随着互联网发展,数据量会越来越大,实时查询需求也会要求越来越高,DorisDB人才需求也会越来越大,越早掌握DorisDB,以后就会有更大的机遇。本课程基于真实热门的互联网电商业务场景为案例讲解,具体分析指标包含:AB版本分析,下砖分析,营销分析,订单分析,终端分析等,能承载海量数据的实时分析,数据分析涵盖全端(PC、移动、小程序)应用。整个课程,会带大家实践一个完整系统,大家可以根据自己的公司业务修改,既可以用到项目中去,价值是非常高的。本课程包含的技术:开发工具为:IDEA、WebStormFlink1.9.0DorisDBHadoop2.7.5Hbase2.2.6Kafka2.1.0Hive2.2.0HDFS、MapReduceFlume、ZookeeperBinlog、Canal、MySQLSpringBoot2.0.8.RELEASESpringCloud Finchley.SR2Vue.js、Nodejs、Highcharts、ElementUILinux Shell编程等课程亮点:1.与企业接轨、真实工业界产品2.DorisDB高性能分布式数据库3.大数据热门技术Flink4.支持ABtest版本实时监控分析5.支持下砖分析6.数据分析涵盖全端(PC、移动、小程序)应用7.主流微服务后端系统8.天级别与小时级别多时间方位分析9.数据库实时同步解决方案10.涵盖主流前端技术VUE+jQuery+Ajax+NodeJS+ElementUI11.集成SpringCloud实现统一整合方案12.互联网大数据企业热门技术栈13.支持海量数据的实时分析14.支持全端实时数据分析15.全程代码实操,提供全部代码和资料16.提供答疑和提供企业技术方案咨询企业一线架构师讲授,代码在老师的指导下企业可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。 
在这个科技高速发展的时代,经历了PC时代几乎人手一台电脑,随之衍生出站长这个概念;移动互联网时代几乎人手一部智能手机,智能手机一般都会安装很多应用,目前应用呈爆发式的增长;随着产业的不断深入发展,小程序的发展也日益壮大,应用涵盖各个领域;如今一个公司就可能有多个软件应用,对于软件开发商来说,急需一套分析系统帮助软件运营,如果单独开发一个分析系统去针对一个软件进行分析的话,成本会非常的大,这个成本包含开发成本以及以后的维护成本。为了解决了上述的问题,我们开发出了一套云产品:亿级动态数据统计分析系统,本系统可以支持所有的终端  (Web端、移动端、小程序端等 )数据统计,只要简单的使用sdk就可以接入我们的系统,软件开发商可以很轻松的对软件使用的情况进行监控,及时辅助公司对该软件的运营。该产品历经2年的实践,商业价值极高。本套案例是完全基于真实的产品进行开发和讲解的,同时对架构进行全面的升级,采用了全新的 Flink 架构+Node.js+Vue.js等,完全符合目前企业级的使用标准。对于本套课程在企业级应用的问题,可以提供全面的指导。Flink作为第四代大数据计算引擎,越来越多的企业在往Flink转换。Flink在功能性、容错性、性能方面都远远超过其他计算框架,兼顾高吞吐和低延时。Flink能够基于同一个Flink运行时,提供支持流处理和批处理两种类型应用的功能。也就是说同时支持流处理和批处理。Flink将流处理和批处理统一起来,也就是说作为流处理看待时输入数据流是无界的;批处理被作为一种特殊的流处理,只是它的输入数据流被定义为有界的。Flink技术特点1. 流处理特性支持高吞吐、低延迟、高性能的流处理支持带有事件时间的窗口(Window)操作支持有状态计算的Exactly-once语义支持高度灵活的窗口(Window)操作,支持基于time、count、session,以及data-driven的窗口操作支持具有Backpressure功能的持续流模型支持基于轻量级分布式快照(Snapshot)实现的容错一个运行时同时支持Batch on Streaming处理和Streaming处理Flink在JVM内部实现了自己的内存管理支持迭代计算支持程序自动优化:避免特定情况下Shuffle、排序等昂贵操作,中间结果有必要进行缓存2. API支持对Streaming数据类应用,提供DataStream API对批处理类应用,提供DataSet API(支持Java/Scala)3. Libraries支持支持机器学习(FlinkML)支持图分析(Gelly)支持关系数据处理(Table)支持复杂事件处理(CEP)4. 整合支持支持Flink on YARN支持HDFS支持来自Kafka的输入数据支持Apache HBase支持Hadoop程序支持Tachyon支持ElasticSearch支持RabbitMQ支持Apache Storm支持S3支持XtreemFS课程所涵盖的知识点包括:Flink、 Node.js、 Vue.js、 Kafka、Flume、Spring、SpringMVC、Dubbo、HDFS、Hbase、Highcharts等等  企业一线架构师讲授,代码在老师指导下可以复用,提供企业解决方案。  版权归作者所有,盗版将进行法律维权。   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值