flume-kafka-storm日志处理经验

转自:http://www.aboutyun.com/thread-9216-1-1.html

使用Storm处理事务型实时计算需求时的几处难点: http://blog.sina.com.cn/s/blog_6ff05a2c0101ficp.html

最近搞日志处理,注意是日志处理,如果用流计算处理一些金融数据比如交易所的行情数据,是不能这么“粗鲁”的,后者必须还考虑数据的完整性和准确性。以下是在实践过程中的一点点小总结,提供给日志分析的盆友参考,也欢迎大家来分享您遇到的一些情况:

(一)
flume到kafka的实时数据优于单条过快,造成storm spout消费kafka速率跟不上,这个延时主要是数据发射到stream中后进行hbase的计算操作引起的(这部分已经用内存计算进行优化处理)。分析tuple的特点,tuple每条log都很小,数量大,如果用现在的spout,会照成tuple在stream中的大量堆积,造成超时自动回调fail()的函数(但是其实这里不影响结果)。

storm的几个特点参考http://www.aboutyun.com/thread-8527-1-1.html
(1)storm单条流水线的处理能力大约为20000 tupe/s, (每个tuple大小为1000字节)
(2)storm系统本省的处理延迟为毫秒级,Jvm GC一般情况下对系统性能影响有限,但是内存紧张时,GC会成为系统性能的瓶颈。
实践中我们发现,tuple过多,由于kafka的message需要new String()进行获取,会报gc的异常。
以上的一些情况和现象,我觉得可以进行多tuple结构的优化,对多个log打包成一个tuple进行发射处理。
不过,就一般情况而言,单条发射已经足够速度很效率

(二)
kafkaspout获取的数据,就我的业务而言,不需太注重数据的完整性,所以,在整个stream中,避免使用ack和fail的,即spout获取到数据后,发射出去就不再关心这条数据是否被正确处理或者超时等情况

(三)
有一个误区,曾经又一次控制了spout获取的速率,发现fail的数量基本很少,但是在一次补数据的时候,spout获取了千万条基本的数据,而bolt有一个业务是频繁交互hbase,造成了stream中的数据大量堆积和延时,ui显示fail的数量巨大,开始以为是处理失败造成的,后来对比数据发现,计算结果并没有多少失误,猜想可能就是因为超时回调了fail函数。

(四)
落地为hbase的,虽然hbase的效率已经不错,但是发现,对于某些业务,仅仅采用hbase,还是有较大的延时,因此,可以将一些经常使用的数据表同步到内存中,可以设计成map等结构进行计算,关键点是要同步hbase,不然storm或者work挂了后启动就会有计算失误了。

(五)
一些可能的BUG
(1)zk集群宕机,这个错误是很不应该的,但是,我出现了,造成了storm宕机,而且我的数据后端是hbase,所以所有计算都失败了,所以最好有一个监控系统可以检测zk、hbase、storm等基础平台工具,免得查错浪费时间;

(2)kafkaspout中有一个线程如果不断的从kafka中获取数据并new String()解析后发射,有可能报异常: java.lang.StringIndexOutOfBoundsException: String index out of range: 2,这个BUG不是必然,但是我偶然出现了,计划直接将Byte[]作为tuple进行发射到bolt中处理。

(3)可恶的INFO日志
由于开着INFO级别的日志配置,storm emit和ack的info日志太多,我这边1个小时差不多1g左右的日志,加上kafka消费端的请求日志,好几次都把磁盘刷爆了,导致服务器宕机,这个要严重注意,我目前的处理方法是吧info改成warn级别。不知道有没有更好的方法~

(4)开源kafkaspout
开源kafkaspout有好几个,git上有,但是有些对环境要求有约束,需要注意,如果是简单的,像我这样要求不高的应用,完全可以自己用kafka的消费实例进行开发。

时间: 2024-10-08 08:03:52

flume-kafka-storm日志处理经验的相关文章

flume+kafka+storm+mysql架构设计

前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考. 这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql (项目是maven项目,需要改动mysql配置,提供两种topology:读取本地文件(用来本地测试):读取服务器日志文件.) (是visio画的,图太大,放上来字看起来比较小,如果有需要的朋友留邮箱) 实时日志分析系统架构简介 系统主要分为四部分:                         负责从各节点上

[转载] 利用flume+kafka+storm+mysql构建大数据实时系统

原文: http://mp.weixin.qq.com/s?__biz=MjM5NzAyNTE0Ng==&mid=205526269&idx=1&sn=6300502dad3e41a36f9bde8e0ba2284d&key=c468684b929d2be22eb8e183b6f92c75565b8179a9a179662ceb350cf82755209a424771bbc05810db9b7203a62c7a26&ascene=0&uin=Mjk1ODMy

Flume+Kafka+Storm+Redis构建大数据实时处理系统:实时统计网站PV、UV+展示

[TOC] 1 大数据处理的常用方法 前面在我的另一篇文章中<大数据采集.清洗.处理:使用MapReduce进行离线数据分析完整案例>中已经有提及到,这里依然给出下面的图示: 前面给出的那篇文章是基于MapReduce的离线数据分析案例,其通过对网站产生的用户访问日志进行处理并分析出该网站在某天的PV.UV等数据,对应上面的图示,其走的就是离线处理的数据处理方式,而这里即将要介绍的是另外一条路线的数据处理方式,即基于Storm的在线处理,在下面给出的完整案例中,我们将会完成下面的几项工作: 1

Flume+Kafka+Storm+Redis实时分析系统基本架构

PS:历史原因作者账号名为:ymh198816,但事实上作者的生日并不是1988年1月6日 今天作者要在这里通过一个简单的电商网站订单实时分析系统和大家一起梳理一下大数据环境下的实时分析系统的架构模型.当然这个架构模型只是实时分析技术的一 个简单的入门级架构,实际生产环境中的大数据实时分析技术还涉及到很多细节的处理, 比如使用Storm的ACK机制保证数据都能被正确处理, 集群的高可用架构, 消费数据时如何处理重复数据或者丢失数据等问题,根据不同的业务场景,对数据的可靠性要求以及系统的复杂度的要

新版flume+kafka+storm安装部署

安装步骤: 1.版本介绍: zookeeper3.4.6 flume-ng1.6 kafka2.10-0.8.2 storm0.9.5 2.安装zookeeper 1.下载最新release版zookeeper http://zookeeper.apache.org/releases.html#download 2.修改zookeeper配置文件 $zookeeper_home/conf $ cp zoo_sample.cfg zoo_sample.cfg.bak $ mv zoo_sample

Flume+Kafka+Storm+Redis 大数据在线实时分析

1.实时处理框架 即从上面的架构中我们可以看出,其由下面的几部分构成: Flume集群 Kafka集群 Storm集群 从构建实时处理系统的角度出发,我们需要做的是,如何让数据在各个不同的集群系统之间打通(从上面的图示中也能很好地说明这一点),即需要做各个系统之前的整合,包括Flume与Kafka的整合,Kafka与Storm的整合.当然,各个环境是否使用集群,依个人的实际需要而定,在我们的环境中,Flume.Kafka.Storm都使用集群. 2. Flume+Kafka整合 2.1 整合思路

利用flume+kafka+storm+mysql构建大数据实时系统

架构图 数据流向图 1.Flume 的一些核心概念: 2.数据流模型 Flume以agent为最小的独立运行单位.一个agent就是一个JVM.单agent由Source.Sink和Channel三大组件构成,如下图: Flume的数据流由事件(Event)贯穿始终.事件是Flume的基本数据单位,它携带日志数据(字节数组形式)并且携带有头信息,这些Event由Agent外部的Source,比如上图中的Web Server生成.当Source捕获事件后会进行特定的格式化,然后Source会把事件

Flume-ng+Kafka+storm的学习笔记

Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html 官方的英文文档 介绍的比较全面. 不过这里写写自己的见解 这个是flume的架构图 从上图可以看到几个名词: Agent: 一个Agent包含Source.Channel.Sink和其他的组件.Flume就是一个或多个Agent构成的. Source:数据源.简单的说就是agent获取数据的入口

[转]flume-ng+Kafka+Storm+HDFS 实时系统搭建

http://blog.csdn.net/weijonathan/article/details/18301321 一直以来都想接触Storm实时计算这块的东西,最近在群里看到上海一哥们罗宝写的Flume+Kafka+Storm的实时日志流系统的搭建文档,自己也跟着整了一遍,之前罗宝的文章中有一些要注意点没提到的,以后一些写错的点,在这边我会做修正:内容应该说绝大部分引用罗宝的文章的,这里要谢谢罗宝兄弟,还有写这篇文章@晨色星空J2EE也给了我很大帮助,这里也谢谢@晨色星空J2EE 之前在弄这个

基于Flume+LOG4J+Kafka的日志采集架构方案

本文将会介绍如何使用 Flume.log4j.Kafka进行规范的日志采集. Flume 基本概念 Flume是一个完善.强大的日志采集工具,关于它的配置,在网上有很多现成的例子和资料,这里仅做简单说明不再详细赘述.Flume包含Source.Channel.Sink三个最基本的概念: Source——日志来源,其中包括:Avro Source.Thrift Source.Exec Source.JMS Source.Spooling Directory Source.Kafka Source.