原文链接转自:http://woodding2008.iteye.com/blog/2328114

Storm的滑动窗口TickTuple通常用来控制bolt定制执行入库操作,使用过程中遇到了TickTuple“意外停止”的情况。

场景描述

Jiaodian任务共计使用12个worker,tick tuple间隔为5分钟。

WebPvLogSpout & WebPvLogBolt的executor数量为12.

WebPvLogSpout消费kafka topic,log_product_ypvlog共计10个partition

6月14号下午启动,次日凌晨1点35分之后,有2个bolt就收不到tick tuple。

生产tickTuple消息的线程【user-timer】由于disruptor的原因,一直处于挂起状态。

  1. "user-timer" daemon prio=10 tid=0x00007f8ea8ac7000 nid=0x353c runnable [0x00007f8e29662000]
  2. java.lang.Thread.State: TIMED_WAITING (parking)【处于挂起状态,一致等待信号激活自己,正常情况应该处于sleeping状态】
  3. at sun.misc.Unsafe.park(Native Method)
  4. at java.util.concurrent.locks.LockSupport.parkNanos(LockSupport.java:349)
  5. at com.lmax.disruptor.AbstractMultithreadedClaimStrategy.waitForFreeSlotAt(AbstractMultithreadedClaimStrategy.java:99)
  6. at com.lmax.disruptor.AbstractMultithreadedClaimStrategy.incrementAndGet(AbstractMultithreadedClaimStrategy.java:49)
  7. at com.lmax.disruptor.Sequencer.next(Sequencer.java:127)
  8. at backtype.storm.utils.DisruptorQueue.publishDirect(DisruptorQueue.java:174)
  9. at backtype.storm.utils.DisruptorQueue.publish(DisruptorQueue.java:167)
  10. at backtype.storm.disruptor$publish.invoke(disruptor.clj:66)
  11. at backtype.storm.disruptor$publish.invoke(disruptor.clj:68)
  12. at backtype.storm.daemon.executor$setup_ticks_BANG_$fn__6510.invoke(executor.clj:315)
  13. at backtype.storm.timer$schedule_recurring$this__1807.invoke(timer.clj:99)
  14. at backtype.storm.timer$mk_timer$fn__1790$fn__1791.invoke(timer.clj:50)
  15. at backtype.storm.timer$mk_timer$fn__1790.invoke(timer.clj:42)
  16. at clojure.lang.AFn.run(AFn.java:24)
  17. at java.lang.Thread.run(Thread.java:745)

问题分析

包装后的kafka客户端会让分配不到partition的spout一直阻塞[ArrayBlockingQueue.take()]

user-timer多个小时的jstack信息,都是TIMED_WAITING (parking),其他worker的状态是sleeping。

spout几个小时一直阻塞,由于spout接收队列会被metrics and system stream塞满,一直得不到处理,会导致TickTuple消息无法放入到队列,这就导致了user-timer线程一直挂起,等待被唤醒。

解决方案

将spout的数量设置为kafka topic的partition相等的数量,实际上是不让spout长时间的处于阻塞状态。

官网issues

【转载】Storm TickTuple 意外停止的更多相关文章

  1. MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin \'FEDERATED\' is disabled”

    MYSQL启动报1067错误,系统日志中是"服务 mysql 意外停止" Mysql日志中则是:"Plugin \'FEDERATED\' is disabled&quo ...

  2. Plugin 'FEDERATED' is disabled 或 1067错误 启动错误与“服务 mysql 意外停止”解决方法

    MYSQL启动报1067错误,系统日志中是“服务 mysql 意外停止” Mysql日志中则是:“Plugin 'FEDERATED' is disabled” 网我在网上找到解决方案:1.在MY.I ...

  3. mysql 服务意外停止1067错误解决办法小结

    今天在配置服务器时安装mysql5.5总是无法安装,查看日志错误提示为1067错误,下面来看我的解决办法 事件类型: 错误 事件来源: Service Control Manager 事件种类: 无  ...

  4. redis服务意外停止

    本地windows的redis一直好的,今天突然项目报错无法连接,不得解 看了下日志, [4824] 04 Mar 11:15:45.714 # Accepting client connection ...

  5. 转-"进程android.process.acore已意外停止" 解决办法

    运行手机虚拟机时,老是弹出这样的“android.process.acore“服务已意外停止,虽不影响正常使用,但终究影响心情.网上找的方案,按如下步骤操作,可以解决问题: 出现这个提示不用担心,并不 ...

  6. wamp mysql服务意外停止

    出现问题: MySQL启动一段时间之后,意外停止.可以再次启动,但是过不了多久又自动停止了. 发现问题: 查看错误日志,发现以下问题: 解决方案: 网上网友分享以下操作: 1.删除data文件夹里面的 ...

  7. MySQL服务意外停止

    先说一下,发现MySQL服务停了,启动就又好了,但是好奇服务意外停止的原因,所以看了一下MySQL的错误日志. 但是到底是哪个错误导致MySQL服务意外终止,还没有定论,故有了此篇文章,还望知道原因的 ...

  8. PHP 后台定时循环刷新某个页面 屏蔽apache意外停止

    PHP 后台定时循环刷新某个页面 如果间隔时间过长的话  会出现apache自动停止的现象.出现的原因则是设置了 <IfModule mpm_winnt_module> ThreadsPe ...

  9. ETL kettle 数据调取防止意外停止处理

    pentaho kettle是目前使用比较广泛的一种etl工具 但是在使用的时候如做定时任务 会存在如果任务异常停止会发生数据不准或者丢失数据的情况 这种情况在<Pentho Kettle So ...

随机推荐

  1. html5异步上传图片显示上传文件进度条

    <html> <head> </head> <body> <p> emo_album_id:<input type="tex ...

  2. Lighttpd日志打印格式

    检查lighttpd打印的日志时,有些字段意义模糊,就找了个对照说明,备份一下 原文地址:http://redmine.lighttpd.net/projects/1/wiki/Docs_ModAcc ...

  3. 未能解析此远程名称:'nuget.org'

    今天用Nuget下一个程序包时,发现Nuget挂了:未能解析此远程名称:'nuget.org'.第一反应就是方校长抖威风了,挂个代理上 http://nuget.org 试了下,果然好好的. 用命令n ...

  4. 自设chrome默认滚动条样式

    今天无聊,想着chrome这种全面使用html的浏览器,可不可以让我自行改变它的默认CSS呢,结果去查查,有,很好 win7/8目录为 C:\Users\[你的用户名]\AppData\Local\G ...

  5. c#中struct和class的区别 z

    1.struct 是值类型,class是对象类型 2.struct 不能被继承,class可以被继承 3.struct 默认的访问权限是public,而class默认的访问权限是private. 4. ...

  6. ARM 的Thumb状态测试

    作为一个使用ARM的学习者,有必要全面了解你的处理器内核.尽管有些内容可能在实际应用中用不到,但是“了解”还是很必要的.Thumb状态,是ARM的一个特色,但是你知道Thumb状态与ARM状态最大的区 ...

  7. 启动python解释器的命令(python manage.py shell和python的区别)

    如果你曾经使用过Python,你一定好奇,为什么我们运行python manage.py shell而不是python.这两个命令都会启动交互解释器,但是manage.py shell命令有一个重要的 ...

  8. IOS在后台每隔一段时间执行一下

    步骤: 1.在info.plist里加入UIBackgroundModes键,其值为数组,数组之一为voip字符串: <key>UIBackgroundModes</key>& ...

  9. SQL Server 2005 版本的操作系统兼容性详细列表

    操作系统要求(32 位) 此表显示对于每种 32 位版本的 SQL Server 2005,操作系统是否可以运行其服务器软件. 有关如何在 Windows Server 2008 上安装 SQL Se ...

  10. 因为中国队赢了,再撸一下DJANGO的官方文档吧

    对比一下,CBVS和FBVS,哪个方便? from django.shortcuts import render from django.http import Http404 from django ...