ld512870 发表于 2016-8-3 13:52:23

storm读取kakfa数据卡住的问题。

本帖最后由 ld512870 于 2016-8-3 15:48 编辑

最近使用storm从kafka中读取数据的时候遇到了个问题。就是有时候如果某个bolt中有比较耗时的操作。跑上一段时间之后storm就会卡住,不再从kafka中拉取数据了。用的是storm-kafka这个storm提供的插件。而且出现这种情况的时候,看spout都会存在failed的数据。我分析这种情况应该是kafka放到队列中等待处理的数据没有在超时时间内处理掉,然后导致了失败。刚开始的时候用的是0.9.6版本的storm。那个超时好像直接不管用。我设置成30分钟也照样失败。后来升级到0.10.1之后,设置了30分钟超时。很少出现失败了。但是这几天又这样了。。我想知道。。。为什么会失败呢?是真的因为超时了吗?而且,失败了重发就是了。为什么会卡住呢?
另外,在这个集群上的其他程序是正常的。另外其他集群上,相同的程序。只是没有那个耗时的操作。然后就能跑个20来天没问题。而且,我试过,另外写过一个topology。只要是在topology中有那种很耗时的操作。storm就很容易卡在那。然后不再拉取数据了。

tntzbzc 发表于 2016-8-3 14:59:06

楼主可观察下集群的内存情况,看看是否有异常。

arsenduan 发表于 2016-8-3 15:03:56

楼主只有主观的看法,这里也只能猜测,可能是楼主程序的问题造成的

nextuser 发表于 2016-8-3 15:07:25

zookeeper也有可能,连接数导致kafka storm不能正常工作

ld512870 发表于 2016-8-3 15:48:04

tntzbzc 发表于 2016-8-3 14:59
楼主可观察下集群的内存情况,看看是否有异常。

应该不是内存的问题。该集群上还跑着其他的程序。都是正常的。

Joker 发表于 2016-8-4 09:38:02

storm数据倾斜了吗?
可以从版本号,uid等多个维度分散。
能不能自己重现这种问题?

ld512870 发表于 2016-8-6 15:27:43

Joker 发表于 2016-8-4 09:38
storm数据倾斜了吗?
可以从版本号,uid等多个维度分散。
能不能自己重现这种问题?

我再bolt加入了一个睡眠30s之后。当失败的次数多了之后。也出现了卡住的问题。我开启了debug模式之后。看日志中全是打印的2016-08-05 18:03:56.453 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.454 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.455 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.456 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.457 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.458 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.459 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.460 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.461 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.463 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]


--------------是具体的spout发送的数据。自动卡住之后就一直打印这种日志。处理时间一直在变,其他的完全一样。应该就是这样导致卡住了。
但是为什么卡住不知道了。。。

ld512870 发表于 2016-8-6 15:28:38

我再bolt加入了一个睡眠30s之后。当失败的次数多了之后。也出现了卡住的问题。我开启了debug模式之后。看日志中全是打印的
2016-08-05 18:03:56.453 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.454 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.455 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.456 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.457 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.458 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.459 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.460 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.461 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]
2016-08-05 18:03:56.463 b.s.d.executor TRANSFERING tuple TASK: 209 TUPLE: source: spout:257, stream: default, id: {2871300889353604529=-2707170665615680539}, [{-----------------------}]

--------------是具体的spout发送的数据。自动卡住之后就一直打印这种日志。处理时间一直在变,其他的完全一样。应该就是这样导致卡住了。
但是为什么卡住不知道了。。。

qcbb001 发表于 2016-8-7 20:25:25

ld512870 发表于 2016-8-6 15:28
我再bolt加入了一个睡眠30s之后。当失败的次数多了之后。也出现了卡住的问题。我开启了debug模式之后。看日 ...

楼主尝试设置这个参数,可以防止队列挤爆
TOPOLOGY_MAX_SPOUT_PENDING

qcbb001 发表于 2016-8-7 20:26:09

看看这个对你是否有帮助

http://stackoverflow.com/questions/29505978/storm-hdfs-bolt-not-working
页: [1] 2
查看完整版本: storm读取kakfa数据卡住的问题。