此文主要接 storm worker异常重启原因排查汇总 这篇文章继续描述。上文中的第三点大概描述了一下造成重启的原因,这次又有一次详细的排查过程和思路供参考。
一、背景
今天,另一个同事反应,我们的一个任务在早上4点到10点之间会有严重的数据丢失,而这个时间点与一个数据导入任务的时间点是吻合的,经查看此任务的的数据量有将近5亿。因此,在这段时间内造成的影响还是挺大的,毕竟都是线上数据。
因此,又重新启动此任务,可以观察到,数据丢失率确实增高,因此,就查看各个woker的状态如何,发现了有一台机器woker重启,开始了这个问题的排查过程。
(注:此结果还无法反馈数据丢失的具体原因,仅仅是针对woker重启的现象排查过程进行记录)
二、排查过程
1、是否有明显异常
这个问题的排查请参考storm worker异常重启原因排查汇总 中的1和2两点。经查看,可以知道不是这两种原因导致的。
2、开启打怪模式
(1) 首先查看supervisor的日志文件,发现重启的原因是由于心跳timeout。
但是supervisor检测worker的心跳,是在本机的一个心跳文件检测的,不涉及到网络的问题,因此,就开始怀疑是本物理机有问题。
(2) 查看机器的各个指标
首先查看机器的整体监控,可以看到该机器的CPU整理利用率 80%, 内存整体利用率88%,CPU的负载持续很高,并且不稳定,见下图:
然后通过top命令,查看各个进程的内存和CPU情况,如下:
(3)根据2中观察到的结果,具体查看占用CPU高的线程在做什么事情,看到是GC线程把CPU打满了。
注:
1) supervisor检测worker心跳,是通过检测本地的心跳文件来完成的,心跳文件的路径为:{storm.local.dir}/supervisor/localstate
2) 查看各个线程在做什么的相关命令为:
jstack :查看各个线程的堆栈
ps -mp pid -o THREAD,tid,time :查看各线程的CPU使用
printf "%x\n" pid :把十进制线程id转成16进制,去jstack结果中,查看线程堆栈
刚开始怀疑GC是诱因,但是其实最后判定,GC是结果,因为改机整体利用率太高,导致频繁的进行GC,最终导致了恶性循环。
因此,到这里基本上可以判定,本机负载太高导致worker无法及时更新心跳文件,导致supervisor判定其timeout,开始重启worker。
(4)为什么此机器负载较高?
经过查看,因为本机内存为128G,storm配置中设置了 supervisor.slots.ports的数量为40个,并且真正的运行的worker也为40个。而且,虽然worker启动限制最大内存为2G,但是实际worker占用内存却很多超过了2G。 这是一个疑点,我还没有搞清楚。
另外一点,发现有些机器也设置了最大40个worker,但是其实只启动了20个,因此,这就涉及到了storm分配资源的问题了。对于单个topology来说,storm会尽可能的把其worker分配到单台机器上面,但是并没有考虑到机器的负载。
总结:对于不容易看出错误的worker重启,基本上是由于机器问题导致的,可以查看机器负载如何。
相关推荐
主分支: ##包裹包战 mvn clean package -DskipTests=true -Dwarcp ./target/storm-ui.war $TOMCAT_HOME/webapps/包装罐 mvn clean package -DskipTests=truecp ./target/storm-ui-*.jar $STORM_HOME/external/...
Storm是一个分布式实时计算系统,能够有效地处理大量数据流。它由Twitter公司开发,最初的目的是为了处理大规模的数据,如社交网络上的实时信息更新。Storm的基本单位是“topology”(拓扑结构),它可以理解为一个...
Storm入门到精通 Storm 是一个分布式实时计算系统,主要用于处理大规模数据流。它的核心组件包括Spout和Bolt,分别负责数据的输入和处理。下面是对 Storm 的一个概述,从基础知识到实践应用。 Storm 组件 Storm ...
Storm提供了详细的测试日志,便于问题排查。同时,测试结果可以导出为报告,供团队成员共享和分析。 8. 集成其他工具: 作为一款强大的测试工具,Storm可能与其他开发工具(如IDEs、版本控制系统)或持续集成...
1. 添加依赖:在项目中引入Storm和Kafka相关的库,如storm-kafka或storm-kafka-client。 2. 配置KafkaSpout:设置KafkaSpout的配置,包括Zookeeper地址、Kafka的Group ID、要消费的主题等。 3. 创建Spout实例:基于...
Storm入门教程 之Storm原理和概念详解,出自Storm流计算从入门到精通之技术篇,Storm入门视频教程用到技术:Storm集群、Zookeeper集群等,涉及项目:网站PV、UV案例实战、其他案例; Storm视频教程亮点: 1、Storm...
### Storm简介及安装知识点梳理 #### 一、Storm简介 **Storm** 是一款由BackType公司开发的分布式实时计算系统,后被Twitter收购并开源。它主要用于处理大规模的数据流,能够简单、高效、可靠地处理实时数据。...
Apache Storm 是一个分布式实时计算系统,它被设计用于处理大规模数据流,提供高吞吐量、低延迟的数据处理能力。在大数据领域,Storm 被广泛应用于实时分析、在线机器学习、持续计算、数据集成以及任何需要实时处理...
7. **监控与管理**:Storm提供了Web UI,用于监控拓扑的运行状态,查看每组件的处理速度,以及故障排查。 在提供的文件名“storm-book-examples-ch02-getting_started-8e42636”中,我们可以推断这是某个关于Storm...
5. **容错机制**:为了保证数据处理的可靠性,Storm设计了一套完整的容错机制,包括消息确认机制、任务重启机制等。 #### 六、Storm与Hadoop的集成 虽然Storm和Hadoop分别针对实时计算和批处理两个不同的场景,但...
**Storm API实现词频统计详解** 在大数据处理领域,Apache Storm是一个实时计算系统,它能够持续处理数据流,实现低延迟、高吞吐量的数据分析。在这个“Storm API实现词频统计”的案例中,我们将深入探讨如何利用...
Storm是一个开源的分布式实时计算系统,由Twitter开发并开源,旨在实现高可靠性、可伸缩性、快速处理无界数据流。Storm可以与Hadoop进行类比,但相较于Hadoop处理批量数据的批处理方式,Storm更专注于处理实时数据流...
这意味着,即使在启用Kerberos安全机制的情况下,管理员仍然可以通过JMX接口获取实时的集群性能信息,这对于优化和故障排查至关重要。 在实际应用中,配置storm-jmxetric会涉及到以下步骤: 1. 配置Kerberos环境:...
- **监控和管理**:可能包含用于监控拓扑性能、故障排查的代码或工具。 标签“storm”进一步确认了讨论的重点是Apache Storm框架。在压缩包的文件名列表中,虽然只有一个“storm”没有具体的文件名,但我们可以推测...
8. **监控与日志**:掌握如何监控拓扑性能,查看错误日志,以进行问题排查。 通过这个"StormDemo.tar.gz"压缩包,初学者可以一步步地了解并掌握Apache Storm的基本操作和实时处理的核心原理,为后续的进阶学习和...
标题中的"storm开发jar包以及storm例子源码"表明了我们即将探讨的是关于Apache Storm的开发环境设置和示例代码。Apache Storm是一个开源的分布式实时计算系统,它允许开发者处理无限的数据流,常用于大数据实时处理...
Apache Storm(apache-storm-2.3.0.tar.gz) 是一个免费的开源分布式实时计算系统。Apache Storm 可以轻松可靠地处理无限制的数据流,实时处理就像 Hadoop 进行批处理一样。Apache Storm 很简单,可以与任何编程语言...
Storm是一个开源的分布式实时计算系统,由Twitter开发并开源,其设计目标是让实时处理变得简单、强大且可靠。在Storm中,数据流被抽象为持续不断的Tuple(元组)序列,这些Tuple在网络中的worker节点间进行分布式...
5. 故障排查与监控: - 理解Storm的故障转移机制以及如何进行故障的快速定位和恢复。 - 利用日志和监控工具对故障进行记录和分析。 - 常用的监控工具包括Storm自带的UI以及集成度量指标库如Ganglia或Prometheus。...