storm开发解决问题点
1.kafka消费速度跟不上问题

这个问题可以从加大topic partition进行解决,可以在topic正在运行时候运行命令

./kafka-topics --alter --zookeeper rhel071:2181 --topic heartbeat --partitions 6进行扩容,并且只能往上扩容,不能减少partition。每个partition会对应一个storm的spout,所以能整体增加消费速度。当然如果kafka下面log挂了多个磁盘,那么多个分区速度理论上会更快。

2.消费者topic一致共用的问题

两个storm想共用一个topic数据时候,可以采用不用group进行消费。此时会互不影响,但是后门新的group只能中途进行消费.也就是不会从begining开始.如果要从头开始消费要进行offset设置.但是也要考虑kafka数据只保留默认7天(看设置)。所以begining也是保留的开始端。
3.测试的topic没有group如何查询范围的问题

一个新的topic想看里面有没数据,但是也没group可以查,除了看原始数据比较简便方法是

注: time为-1时表示最大值,time为-2时表示最小值
bin/kafka-run-class.sh kafka.tools.GetOffsetShell --topic tb_exception_reg_1 --time -1 --broker-list 192.168.42.75:9092 --partitions 0

可以查看offset的范围,就可以看到里面是否进行了数据。

4.mysql 8小时断开问题

mysql默认链接会有个8小时失效问题。这个要有意识,如果mysql一段时间正常后报错可以考虑这个问题,网上找方案解决.方案比较多不一一列举。默认mysql是8小时有效
5.查看topic消费者挤压问题
GROUP TOPIC PID OFFSET LOGSIZE LAG
消费者组 话题id 分区id 当前已消费的条数 总条数 未消费的条数

这个要注意看LAG的数据挤压。。记得放大CRT,不然容易看错

6.mysql修改系统参数出现Access denied; you need the SUPER privilege for this operation问题

修改mysql环境变量的参数时候,有两种一种是

set @@global.interactive_timeout=300;
set @@global.wait_timeout=300;

这种重启后会失效,还有一种是修改mysql 的my.cnf进行永久修改。记得最好进命令行库中用root进行修改参数。在工具中进行远程试过root登录也一直报权限修改未成功。
7.Kerberos连接hbase的问题

conf.set("java.security.krb5.kdc", "/etc/krb5.conf");
conf.set("java.security.krb5.realm", "HADOOP.COM");
conf.set("kerberos.principal", "hbase/_HOST@HADOOP.COM");
conf.set("java.security.krb5.kdc", "/etc/krb5.conf");
conf.set("java.security.krb5.realm", "HADOOP.COM");
conf.set("hbase.zookeeper.quorum", constant.HbaseKafkaZKClustAddress);//dm-hadoop6,dm-hadoop7,dm-hadoop8 //192.168.42.71
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("zookeeper.znode.parent", "/hbase");
conf.set("hadoop.security.authentication", "kerberos");
conf.set("hbase.security.authentication", "kerberos");
conf.set("hbase.master.kerberos.principal", "hbase/_HOST@HADOOP.COM");
conf.set("hbase.regionserver.kerberos.principal",
"hbase/_HOST@HADOOP.COM");

hbase手动认证(有时效限制)
kinit -k -t /home/richdm/richdm.keytab richdm@HADOOP.COM

8.spout killed的时候内存缓存数据的清理问题

storm本身在执行killstorm的时候会执行cleanup()方法,但是本人验证多次,很多时候执行到一半storm就被关闭了。在此推荐另一种方案,由spout的deactivate()方法出发,当storm关闭的时候发出一条emit通知所有下游做好关闭资源动作。可以另起一个spout用来专用管理storm的关闭功能

public void deactivate() {
System.out.println("shutdown deaactivate to spout and bolt");
try {
String mes = "shutDown";
long id = 11111111111111111L;
_collector.emit("stop", new Values(mes), id);
//Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}

//接上kill storm 资源释放 20
builder.setBolt("HbaseBolt", new HbaseBolt(), constant.HbaseBoltNum).shuffleGrouping("SensitiveBolt").allGrouping("shutDownSpout","stop");//hbase入库模块

//kill storm清理资源
if ( tuple.getSourceStreamId().equals("stop") ) {
// System.out.println("==========clear======HbaseBolt=======");
this.StromCleaner("killStorm",this.hbaseUtil,this.storm_HbaseMap_reg,this.storm_HbaseMap_heartbeat,this.storm_HbaseMap_reg_delay,this.storm_HbaseMap_heartbeat_delay);
return;
}

9.storm定时器造成数据少接收问题

在storm里面用timer不知道为什么会造成数据接收丢失,但是笔者在stormHDFS包源码看过类似用法。这里比较推介用storm自带的定时器

@Override
public Map<String, Object> getComponentConfiguration() {
//设置发送ticktuple的时间间隔,默认半小时一次1800秒 1200
Config conf = new Config();
conf.put(conf.TOPOLOGY_TICK_TUPLE_FREQ_SECS, 60);
return conf;
}

在tuple接收端

if (tuple.getSourceComponent().equals(Constants.SYSTEM_COMPONENT_ID)&& tuple.getSourceStreamId().equals(Constants.SYSTEM_TICK_STREAM_ID)) {
  逻辑;
}

10.storm节点不稳定造成数据丢失问题

测试环境开发的时候有时候会出现数据数据丢失,或者关闭一些功能不执行。可以观察下每个bolt的端口节点,数据数量上知否一致。

一般来说,executed的节点分配数量都会比较均匀,所以执行数量也会比较接近,如果差距数量大,并且会掉数,可以从节点出错进行排查。

11.storm节点数量太少造成单节点数据并发混乱问题

storm分配会优先不同节点,不同端口,然后同一个节点不同端口进行分配应用执行。但是当用户开放的端口过少的时候,storm会把同一个应用运行于同一个端口上。这时候或许是程序并行执行。当出现不安全操作的时候。很容易出现掉数等一类问题。所以上应用之前。spout和bolt的并发数设置和自己端口是否够用要确定好。上之后storm分配给你的正不正确,并发之间是否独立要观察好。

12.storm多个节点同时操作mysql和hbase一些冲突问题

storm 一个bolt去更新mysql的时候,并发下会出现多个节点一起操作问题。这时候最好设定主键,然后利用主键去判断这一问题。当然也可以通过设置一个单一职责的bolt去做这件事。由于开发周期比较长,本人用了主键冲突去做了判断是否别的节点已经更新。

13.storm 执行exit work重启问题

在bolt里面执行java的exit(0)的时候会造成一个节点的重启运行。判断可以看日志是否重启了work或者节点UI的数量又从0开始计算了。
14.storm log不会完成保留的问题(未解决,可以用日志调试级别)

storm会打印出大量日志。/opt/storm/log4j2可以设置保存的日志方式。比如设置了100M 日志满100M就会进行压缩块。保存多少压缩块。经过测试最好别打印太多日志,只保留一些error。和关键的运行参数。

slf4j也可以在此处进行调整,只输出哪种类型的日志。方便排查

15.storm work和bolt并发数的调整问题

storm 一个work可以承担几个并发。并不是一一对应。具体如何调整可以看网上文章
16.hbase入库速度处理跟不上spout流速度造成数据挤压问题

在处理hbase的时候一度产生大量数据挤压,跟不上spout的速度。后来把一些比较费事的操作比如hbase 每次都判断表是否存在。改成只判定一次。(建议spout 和bolt操作中不要进行太耗时操作)
17.入库每天会少1---10万的数据问题

这个问题当时排查了很多思路。1 上游发送数据量和自己数据量批对(应该不会丢失太多)。hbase每天插入是否有数据量丢失(理论应该成批次丢失)。内存残留数据(可以定时flush)。后来排查到问题是产生rowkey的方式有问题。出现重复了。hbase对于rowkey问题还是要参考UUID

18.hive转移hbase关联表出现0KB文件问题

这个问题首先考虑到是MR执行数据倾斜了,后来突然想到MR执行过程可能是根据hbase的分区去进行抽取的,测试去掉一些没用的hbase预分区,0KB文件消失了。还有一个问题是javaUUID产生的算法是每位由16进制的数字生成,所以首位最大是f,也就是0--9 a---f,不会超过f,所以hbase预分区应当不超过f。产生16进制UUID关键代码如下。关键toString 返回而digits是产生16进制的过程

近期开发storm遇到一些问题的解决点的更多相关文章

  1. Senparc.Weixin.MP SDK 微信公众平台开发教程(七):解决用户上下文(Session)问题

    从这篇文章中我们已经了解了微信公众平台消息传递的方式,这种方式有一个先天的缺陷:不同用户的请求都来自同一个微信服务器,这使得常规的Session无法使用(始终面对同一个请求对象,况且还有对方服务器Co ...

  2. Storm系列(一):搭建dotNet开发Storm拓扑的环境

    上篇博客比较了目前流行的计算框架特性,如果你是 Java 开发者,那么根据业务场景选择即可:但是如果你是 .Net 开发者,那么三者都不能拿来即用,至少在这篇文章出现之前是如此.基于上篇文章的比较发现 ...

  3. Android开发:ScrollView嵌套GridView的解决办法

    Android开发:ScrollView嵌套GridView的解决办法   前些日子在开发中用到了需要ScrollView嵌套GridView的情况,由于这两款控件都自带滚动条,当他们碰到一起的时候便 ...

  4. java开发中遇到的问题及解决方法(持续更新)

    摘自 http://blog.csdn.net/pony12/article/details/38456261 java开发中遇到的问题及解决方法(持续更新) 工作中,以C/C++开发为主,难免与其他 ...

  5. 浅谈Excel开发:九 Excel 开发中遇到的常见问题及解决方法

    Excel开发过程中有时候会遇到各种奇怪的问题,下面就列出一些本人在开发中遇到的一些比较典型的问题,并给出了解决方法,希望对大家有所帮助. 一 插件调试不了以及错误导致崩溃的问题 在开发机器上,有时可 ...

  6. highcharts插件使用总结和开发中遇到的问题及解决办法

    这里使用的highchart是2014-01-09从官网下载的版本,版本号是3.0.8, 当过了几天后,发现版本号变成了3.0.9,不由得的感叹highchart的版本更新之快. 在jsp中使用hig ...

  7. Android开发中的问题及相应解决(持续更新)

    最近博客写的少了,以后还得经常更新才行. ------------------------------------------------------------ 1.特定业务需求下try cath ...

  8. web开发中目录路径问题的解决

    web开发当中,目录路径的书写是再常用不过了,一般情况下不会出什么问题,但是有些时候出现了问题却一直感到奇怪,所以这里记录一下,彻底解决web开发中路径的问题,开发分为前端和服务端,那么就从这两个方面 ...

  9. 关于用phonegap+jquery moblie开发 白屏闪屏的解决方法

    前几天自己玩开发android应用,做些页面切换效果时,发现两个页面间切换间有白色闪屏的问题. 在网上找了很久的资料,还是没有解决. 最终,发现同事开发的android应用没有这个问题.对比代码排除发 ...

随机推荐

  1. 简单的GridView分业,后台不需要写

    1前台代码: <asp:GridView ID="GridView1" runat="server" AllowPaging="True&quo ...

  2. 【转】40个Java多线程问题总结

    文章转自 五月的仓颉 http://www.cnblogs.com/xrq730/p/5060921.html 前言 Java多线程分类中写了21篇多线程的文章,21篇文章的内容很多,个人认为,学习, ...

  3. 【bug】使用element-ui遇到在IE浏览器中点击enter会回到登录页

    1.点击el-input框,会回到登录页(IE浏览器) 外层是el-table/el-form/el-input 添加可以解决 <el-form onSubmit="return fa ...

  4. Python连接数据库流行用到的第三方库

    Python连接数据库流行用到的第三方库: mysqldb:只支持Python2.x mysqlclient : mysqldb的衍生版本,完全兼容mysqldb,同时支持Python3.x,安装较复 ...

  5. Centos6 安装完之后,没有网络

    Virtualbox安装的centos 6.10的虚拟机,安装时,网络是NAT网络,安装完之后,将网络改为桥接网卡,启动虚拟机之后,使用 ifconfig 命令查看没有到eth0的信息,只有127.0 ...

  6. TCP三次握手形象理解

    tcp三次握手就像是你用企业微信给人家发信息,首先你得确认别人在不在,你会发  在吗?  这个时候显示的是未读   对方看到之后未读会变成已读 然后他会回复你  在的    你看到这个消息后,他那边也 ...

  7. 14 win7 sp1下安装vs2015

    0 引言 在win7下安装vs2015的时候遇到了很多问题,看了很多帖子,尝试了很多次,终于成功了.网上也有大量关于win7 sp1下安装vs2015的帖子,我在安装的时候也参考了很多相关经验,这次写 ...

  8. Django项目:堡垒机(Linux服务器主机管理系统)--03--03堡垒机在Linux系统里记录会话日志02/02

    #main.py #本文件写所有的连接交互动作程序 # ————————————————03堡垒机在Linux系统里记录会话日志 开始———————————————— from Fortress im ...

  9. How to Hide Apache Tomcat Version Number from Error Pages

    1. 进入tomcat lib目录 cd /usr/local/tomcat7/lib 2. 解压catalina.jar jar xvf catalina.jar 3. 修改ServerInfo.p ...

  10. 用原生js封装轮播图

    原生js封装轮播图 对于初学js的同学来说,轮播图还是一个难点,尤其是原生js封装轮播图代码,下面是我之前做的一个轮播图项目中封装好的一些代码,有需要的同学可以看一下,有什么不懂的可以看注释,注释看不 ...