【问题标题】:Garbage Collection in Apache StormApache Storm 中的垃圾收集
【发布时间】:2014-10-13 09:37:43
【问题描述】:

Storm 中默认的垃圾收集器是什么,为什么?

有人能解释一下在被 Bolt 确认后,内存中的元组会发生什么吗?

【问题讨论】:

    标签: garbage-collection apache-storm


    【解决方案1】:

    由于 Apache Storm 是一个基于 JVM 的项目,那么在进行垃圾回收时,将使用 Storm JVM 进程使用的垃圾回收策略。

    我可能错了,但在我看来,您在这里混合了两件事,JVM GC 和 Storm Acknowledge 进程。

    这是在 Apache Storm 中创建确认的方式:

    Apache Storm spout 将消息(事件)保留在其输出队列中,直到它们被确认。确认仅在拓扑成功处理消息(事件)后发生。如果在合理的时间内收到消息(事件)的确认,则 spout 会从其输出队列中清除该消息。如果在预定义的时间段(默认 30 秒)内没有收到确认,则 spout 通过拓扑再次重播消息。

    应阅读:Guaranteeing Message Processing

    【讨论】:

    • 对不起,我对您的回复有点困惑。我认为storm不会将完整的消息存储在内存中。基本上,当元组未能完成时,spout 实现负责重新发出。所以storm不需要保留元组值。它只保留用于识别 spout 任务的消息 id 和数据,不是吗?
    • 您好,感谢您解决这个问题。但你的回答在我心中提出了更多的问题。让我给你一些关于我工作的背景——我正在运行一个风暴集群并监控每个工作人员的 jvm 指标。我注意到每次垃圾收集器计数达到特定值时,都会占用大量 CPU 时间,以至于工作人员无法发送心跳。因此,nimbus 认为 worker 已经死亡并重新平衡拓扑。当我将 GC 从 Storm 中使用的默认 CMS 更改为 ParNewGC 时,这个问题就消失了。这与storm中的GC有关吗?我该如何解决?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 2017-08-06
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2011-02-25
    相关资源
    最近更新 更多