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的消费实例进行开发。
flume-kafka-storm日志处理经验的更多相关文章
- 简单测试flume+kafka+storm的集成
集成 Flume/kafka/storm 是为了收集日志文件而引入的方法,最终将日志转到storm中进行分析.storm的分析方法见后面文章,这里只讨论集成方法. 以下为具体步骤及测试方法: 1.分别 ...
- Flume+Kafka+Storm+Hbase+HDSF+Poi整合
Flume+Kafka+Storm+Hbase+HDSF+Poi整合 需求: 针对一个网站,我们需要根据用户的行为记录日志信息,分析对我们有用的数据. 举例:这个网站www.hongten.com(当 ...
- Flume+Kafka+Storm整合
Flume+Kafka+Storm整合 1. 需求: 有一个客户端Client可以产生日志信息,我们需要通过Flume获取日志信息,再把该日志信息放入到Kafka的一个Topic:flume-to-k ...
- 大数据处理框架之Strom:Flume+Kafka+Storm整合
环境 虚拟机:VMware 10 Linux版本:CentOS-6.5-x86_64 客户端:Xshell4 FTP:Xftp4 jdk1.8 storm-0.9 apache-flume-1.6.0 ...
- Flume+Kafka+storm的连接整合
Flume-ng Flume是一个分布式.可靠.和高可用的海量日志采集.聚合和传输的系统. Flume的文档可以看http://flume.apache.org/FlumeUserGuide.html ...
- flume+kafka+storm+mysql架构设计
前段时间学习了storm,最近刚开blog,就把这些资料放上来供大家参考. 这个框架用的组件基本都是最新稳定版本,flume-ng1.4+kafka0.8+storm0.9+mysql (项目是mav ...
- 一次简单的springboot+dubbo+flume+kafka+storm+redis系统
最近无事学习一下,用springboot+dubbo+flume+kafka+storm+redis做了一个简单的scenic系统 scenicweb:展现层,springboot+dubbo sce ...
- 【转】flume+kafka+zookeeper 日志收集平台的搭建
from:https://my.oschina.net/jastme/blog/600573 flume+kafka+zookeeper 日志收集平台的搭建 收藏 jastme 发表于 10个月前 阅 ...
- Flume+Kafka+Storm+Redis 大数据在线实时分析
1.实时处理框架 即从上面的架构中我们可以看出,其由下面的几部分构成: Flume集群 Kafka集群 Storm集群 从构建实时处理系统的角度出发,我们需要做的是,如何让数据在各个不同的集群系统之间 ...
- flume+kafka+storm
centos06.6+JDK1.7 flume1.4+kafka2.10+storm0.9.3 zookeeper3.4.6 集群: 192.168.80.133 x01 192.168.80.134 ...
随机推荐
- .NET设计模式(4):建造者模式(Builder Pattern)(转载)
概述 在 软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成:由于需求的变化,这个复杂对象的各个部分经常面临着剧 烈的变化,但是将它们组合在一起的算法确相对稳 ...
- IP和java.net.InetAddress类的使用
一.IP 1.地址格式 互联网上每一台计算机都有一个唯一标示自己的标记,这个标记就是IP地址.IP 地址使用32 位长度二进制数据标示,一般在实际中看到的大部分IP地址都是以十进制的数据形式标示的,如 ...
- HDU 3395 Special Fish 最“大”费用最大流
求最大费用能够将边权取负以转化成求最小费用. 然而此时依旧不正确.由于会优先寻找最大流.可是答案并不一定出如今满流的时候.所以要加一些边(下图中的红边)使其在答案出现时满流. 设全部边的流量为1,花费 ...
- cocos2d-x开发记录:二,基本概念(动作,动画,坐标系统)
既然我们选择用cocos2d,那么他里面的一些基本概念我们肯定是要熟悉下的,以下资料来源于官网,英语好的可以直接去官网看. 一.Actions(动作) 动作都由于CCNode对象发出.这些动作通常修改 ...
- 可靠的功能測试--Espresso和Dagger2
欢迎Follow我的GitHub, 关注我的CSDN. 可靠的功能測试, 意味着在不论什么时候, 获取的測试结果均同样, 这就须要模拟(Mock)数据. 測试框架能够使用Android推荐的Espre ...
- XMLHttpRequest使用详解
1.什么是XMLHttpRequest XMLHttpRequest是一个浏览器接口,使得Javascript可以进行HTTP(S)通信,这就是我们熟悉的AJAX.早期,各个浏览器的实现都不同,HTM ...
- ny104 最大和
最大和 时间限制:1000 ms | 内存限制:65535 KB 难度:5 描述 给定一个由整数组成二维矩阵(r*c),现在需要找出它的一个子矩阵,使得这个子矩阵内的所有元素之和最大,并把这个子矩 ...
- Python 2.7.9 Demo - 014.列表List的定义、取值、遍历
#coding=utf-8 #!/usr/bin/python list = ['a', 1, 'b', 2, 'c', 3]; print list[0]; print list[1:3]; pri ...
- [转帖]cocos2d-x 3.0rc开发指南:Windows下Android环境搭建
原文请看:http://blog.csdn.net/linzhengqun/article/details/21663341 鲜红字体请注意:文中红色字体乃是本文博主阳光下的蒲公英添加.红色字体部分造 ...
- python traceback捕获并打印异常
异常处理是日常操作了,但是有时候不能只能打印我们处理的结果,还需要将我们的异常打印出来,这样更直观的显示错误 下面来介绍traceback模块来进行处理 try: 1/0 except Excepti ...