实时海量日志分析系统的架构设计实现以及

男性健康理当时刻注重 http://www.zgbdf.net/baidianfeng/zhengzhuang/30095.shtml

作者:天府云创

来源:blog.csdn.net/enweitech/article/details/

1序对ETL系统中数据转换和存储操作的相关日志进行记录以及实时分析有助于我们更好的观察和监控ETL系统的相关指标(如单位时间某些操作的处理时间),发现系统中出现的缺陷和性能瓶颈。由于需要对日志进行实时分析,所以Storm是我们想到的首个框架。Storm是一个分布式实时计算系统,它可以很好的处理流式数据。利用storm我们几乎可以直接实现一个日志分析系统,但是将日志分析系统进行模块化设计可以收到更好的效果。模块化的设计至少有两方面的优点:模块化设计可以使功能更加清晰。整个日志分析系统可以分为“数据采集-数据缓冲-数据处理-数据存储”四个步骤。Apache项目下的flumeng框架可以很好的从多源目标收集数据,所以我们用它来从ETL系统中收集日志信息;由于采集数据与处理数据的速度可能会出现不一致,所以我们需要一个消息中间件来作为缓冲,kafka是一个极好的选择;然后对流式数据的处理,我们将选择大名鼎鼎的storm了,同时为了更好的对数据进行处理,我们把drools与storm进行了整合,分离出了数据处理规则,这样更有利于管理规则;最后,我们选择redis作为我们处理数据的存储工具,redis是一个内存数据库,可以基于健值进行快速的存取。

模块化设计之后,storm和前两个步骤之间就获得了很好的解耦,storm集群如果出现问题,数据采集以及数据缓冲的操作还可以继续运行,数据不会丢失。

2相关框架的介绍和安装2.1.1原理介绍

Flume是一个高可用、高可靠、分布式的海量日志采集、聚合和传输系统。Flume支持在日志系统中定制日志发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接收方的能力。它拥有一个简单的、可扩展的流式数据流架构,如下图所示:

日志收集系统就是由一个或者多个agent(代理)组成,每个agent由source、channel、sink三部分组成,source是数据的来源,channel是数据进行传输的通道,sink用于将数据传输到指定的地方。我们可以把agent看做一段水管,source是水管的入口,sink是水管的出口,数据流就是水流。Agent本质上是一个jvm进程,agent各个组件之间是通过event来进行触发和协调的。

2.1.2flumeng的安装

从官方网站下载apache-flume-1.4.0-bin.tar.gz压缩包

解压缩,并在conf目录下面新建一个文件flume-conf.properties,内容如下:

a1.sources=r1a1.sinks=k1a1.channels=c1#source配置信息#r1的type为avro表示该source接收的数据协议为avro,且接收数据由avro客户端事件驱动#(也就是说resource要通过avro-cliet向其发送数据)a1.sources.r1.type=avroa1.sources.r1.bind=localhosta1.sources.r1.port=#sink配置信息#type为logger意将数据输出至日志中(也就是打印在屏幕上)a1.sinks.k1.type=logger#channel配置信息#type为memory意将数据存储至内存中a1.channels.c1.type=memorya1.channels.c1.capacity=a1.channels.c1.transactionCapacity=#将source和sink绑定至该channel上a1.sources.r1.channels=c1a1.sinks.k1.channel=c1该配置文件,配置了一个source为avro的服务器端用于日志的收集。具体的情况将在后面ETL系统与flume整合中介绍。启动代理。flume-ngagent–na1–fflume-conf.properties2.2kafka2.2.1原理介绍Kafka是linkedin用于日志处理的分布式消息队列。Kafka的架构如下图所示:Kafka的存储策略有一下几点:kafka以topic来进行消息管理,每个topic包括多个partition,每个partition包括一个逻辑log,由多个segment组成。每个segment中存储多条消息,消息id由其逻辑位置决定,即从消息id可直接定位到消息的存储位置,避免id到位置的额外映射。每个partition在内存中对应一个index,记录每个segment中的第一条消息的偏移。发布者发到某个topic的消息会被均匀的分布到多个partition上(随机或根据用户指定的回调函数进行分布),broker收到发布消息往对应partition的最后一个segment上添加该消息,当某个segment上的消息条数达到配置值或消息发布时间超过阈值时,segment上的消息会被flush到磁盘,只有flush到磁盘上的消息订阅者才能订阅到,segment达到一定的大小后将不会再往该segment写数据,broker会创建新的segment。2.2.2kafka集群的搭建

Kafka集群的搭建需要依赖zookeeper来进行负载均衡,所以我们需要在安装kafka之前搭建zookeeper集群。

zookeeper集群的搭建,本系统用到了两台机器。具体搭建过程见


转载请注明:http://www.92nongye.com/zyjs/204622108.html

  • 上一篇文章:
  •   
  • 下一篇文章: 没有了