此时此刻,正在等到6.18的到来,趁着没事写个博客,,,
storm集群在worker down掉以后会自动启动新的woker,但是有很多情况下是感觉不应该重启的时候,woker重启了,因此就走上了排查woker重启的道路上~
一、排查思路
经过排查,主要总结有以下几种问题,会导致woker重启:
1. 代码有未捕获的异常
如下例子,因为处理的数据有异常,并且在代码中没有捕获异常,这样Exception被抛给了JVM,导致woker down掉。
对于这样的异常,可以在storm UI界面看到相应的异常信息,因此,排查问题时,可以首先看UI中是否有异常抛出。
java.lang.RuntimeException: java.lang.NumberFormatException: For input string: "赠品" at backtype.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:90) at backtype.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:61) at backtype.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:62) at backtype.storm.daemon.executor$fn__3498$fn__3510$fn__3557.invoke(executor.clj:730) at backtype.storm.util$async_loop$fn__444.invoke(util.clj:403) at clojure.lang.AFn.run(AFn.java:24) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NumberFormatException: For input string: "赠品" at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48) at java.lang.Long.parseLong(Long.java:410) at java.lang.Long.parseLong(Long.java:468) at com.jd.ad.user.service.impl.UserOrderEntireUpdateServiceImpl.processUserOrderEntireData(UserOrderEntireUpdateServiceImpl.java:96) at com.jd.a
2、JVM 内存溢出
关于这个问题,没有保留下来当初的现场,主要是由于各种原因导致JVM的垃圾回收机制有问题,最终导致内存溢出,这个问题,也会导致woker退出。
对于此类异常,跟1中的一样,也可以在UI界面中看到的,这个需要具体排查JVM内存溢出的原因。
3、woker 无问题,supervisor重启woker
对于1和2中的问题,抛出来的异常信息都可以在UI界面中以及woker的日志文件中查找到,但是,我们还遇到了另一种情况,就是在woker中找不到任何的异常信息,但是总是随机的会有woker重启。
因为woker中找不到异常信息,这时候就需要查看supervisor中的log信息了,因为supervisor会对本机上的woker中的状态信息进行监控,并且woker的重启也是由supervisor操作的。
此时,查看supervisor中的日志信息可以看到以下内容:
2017-06-17 23:36:08 b.s.d.supervisor [INFO] Shutting down and clearing state for id 867ed61b-a9d5-423e-bb0b-b2e428369140. Current supervisor time: 1497713767. State: :timed-out, Heartbeat: #backtype.storm.daemon.common.WorkerHeartbeat{:time-secs 1497713735, :storm-id "data_process_1-170-1497518898", :executors #{[578 578] [868 868] [1158 1158] [1448 1448] [1738 1738] [-1 -1] [288 288]}, :port 6716}
因此,可以判断为是由于supervisor获取状态信息timeout超时(其实supervisor是获取谁的状态信息,这点还不明确,因为woker的状态信息是在本地文件系统中的,难道是获取executor的状态?这点希望大家拍砖吐槽),导致把woker shut down 了,然后重启了woker。并且此时查看机器的状态,发现zookeeper的机器的CPU负载,会偶尔出现不稳定的状态。如下图:
因此,可以断定是由于supervisor获取状态信息超时导致的。
跟运维沟通,zookeeper的3台机器是跟supervisor部署在同一台机器上面的,因此会造成机器不稳定的情况出现。
平稳度过618,准备回家了。
相关推荐
然而,FileSystem API由于安全和隐私原因,在现代浏览器中的支持并不广泛,已被Service Worker等更安全、更现代的技术取代。 总结来说,Web Worker是HTML5为JavaScript实现多线程处理而设计的一种技术,它可以提升...
- **日志记录**:合理记录和分析GatewayWorker的日志,有助于排查问题和优化性能。 总的来说,ThinkPHP5集成GatewayWorker可以轻松实现WebSocket功能,让PHP开发者也能享受到实时通信的魅力。同时,结合ThinkPHP5的...
5. **容错机制**:为了保证数据处理的可靠性,Storm设计了一套完整的容错机制,包括消息确认机制、任务重启机制等。 #### 六、Storm与Hadoop的集成 虽然Storm和Hadoop分别针对实时计算和批处理两个不同的场景,但...
* Worker:Storm 的执行节点,负责执行具体的计算任务。 Storm 属性 Storm 的主要属性包括: * fault-tolerant:Storm 可以自动恢复故障节点,保证系统的高可用性。 * scalable:Storm 可以根据需要水平扩展,...
**2.5 启动Storm** - **启动Zookeeper**。 - **启动Nimbus**。 - **启动Supervisor**。 **2.6 验证Storm** 可以通过提交一个简单的Topology来验证Storm是否安装成功。 ### 总结 Storm是一款强大的分布式实时...
不知道什么原因,后来找来SSH登录用户,密码,逐步排查,发现了Nginx worker_connections配置问题。 原来是Nginx配置文件中的worker_connections配置太低,只有50,导致与php-fpm交互过程中超出了connections限制,...
2. **Supervisor**:在工作节点上运行,管理worker进程,接收Nimbus的指令启动或停止任务。 3. **Worker**:实际执行计算任务的进程,每个worker包含多个task。 4. **Spout**:数据源,负责从外部数据源拉取数据并...
更改为自定义TP命令行启动要打开三个命令窗口启动,不方便测试。根据GatewayWorker-for-win提供的demo修改的 本资源依赖GatewayWorker扩展,请先安装扩展。 使用方法,把解压后的文件夹放到项目根目录,双击start_...
描述中的 "帮助不能下载的同学下载storm安装包" 表明这个文件是为那些无法正常下载 Apache Storm 的人提供的,可能是因为网络问题或其他原因导致的下载失败。 在标签中,"storm 安装包" 暗示了这个文件的用途,即它...
1. **Storm/workerbeats/<topology-id>/node-port**:存储 Worker 的运行状态和统计信息,包括 topology-id、Worker 上所有 Executor 的统计信息(例如发送和接收的消息数)、Worker 的启动时间和最后更新时间等。...
NextJS Worker示例这是使Web Worker在NextJS项目中运行的示例。 要使用worker-loader将Web Worker加载到NextJS站点上,并允许在其worker上运行babel等webpack加载器,必须覆盖构建输出路径。 感谢。 // next.config....
本文档是关于Storm源码的详细走读笔记,主要分析了Storm的启动场景、Topology提交过程、worker进程中的线程使用情况、消息传递机制以及 TridentTopology的创建和ack机制等多个方面。 首先,文档提到了Storm集群中的...
Storm 的架构主要由四个组件组成:Nimbus、Supervisor、Worker 和 Zookeeper。 * Nimbus:负责接收用户提交的 topology,并将其分配给 Supervisor。 * Supervisor:负责管理多个 Worker,监控 Worker 的状态,并将...
例如,如果某个worker进程失败,Nimbus会重新启动该进程,并将未完成的任务重定向到新的worker进程上。 - **可扩展性**:Storm设计为高度可扩展的系统,能够随着数据量的增长而线性扩展。这得益于其分布式架构和动态...
2. **Nimbus**: 这是Storm的主协调节点,负责分配任务给各个工作节点(Supervisors),监控任务执行情况,并在节点故障时重新分配任务。 3. **Supervisor**: 监督运行在物理节点上的工作进程,为Nimbus提供资源,并...
- **Supervisor管理**:为了确保Worker的持续运行,常使用Supervisor进程管理工具进行监控和自动重启。 4. **Worker的并发与限制** - **并发处理**:可以通过`--concurrency`选项设置同时处理的任务数量,提高...
当某个worker故障时,其任务可以被重新调度到其他节点,而未完成的处理可以通过重放未确认的事件来恢复,确保数据不丢失。 五、高级应用开发 书中可能涉及的高阶应用开发包括:窗口化操作(时间窗口、滑动窗口、...
3. **容错机制**:Storm提供了强大的容错能力,当某个worker或者task失败时,Nimbus会重新调度任务,确保数据不丢失。 4. **本地模式与生产环境**:学习Storm时,通常会先在本地模式下运行拓扑,进行调试和测试,...
6. **启动UI**:执行`bin/storm ui`命令启动Storm的Web UI,可以通过浏览器访问监控Storm集群的状态。 7. **提交拓扑**:编写好Storm拓扑后,使用`bin/storm jar`命令提交到Nimbus,开始处理数据流。拓扑定义了数据...