美文网首页
storm实验问题

storm实验问题

作者: 大大大大大大大熊 | 来源:发表于2018-09-12 09:13 被阅读0次

    at least once

    checkpoint,只能保证恢复到最近一次的状态,但是fail的tuple不能重发,如果不编写spout的ack和fail方法的话。
    第一种:redis缓存map,ack删除,fail重发。重发的时候,出现乱序发送。
    第二种:封装好的kafkaspout,知道at least once机制,但是速率不知道如何控制

    kafkaspout

    kafka poll的速率控制,就看到一个maxpoll,设置无用,得研究kafkaspout源码,
    每次都是poll一大批,导致状态运算不正确

    org.apache.storm.generated.InvalidTopologyException

    错误原因:上游的声明和下游的处理不匹配
    解决:查看上下游的shuffleGrouping("XXX"),
    public void declareOutputFields(OutputFieldsDeclarer declarer) {
    declarer.declare(new Fields("sentence"));
    }

    还有上游如果是按STREAM id输出,那么下游直接shuffleGrouping("XXX"),也会出错,因为不知道是分配哪个ID的流。

    多线程的问题

    共享的全局变量使用static来保护?
    但是这个问题里好像不对:https://stackoverflow.com/questions/40861308/is-it-possible-to-use-global-static-variables-in-storm-bolts-spout-in-actual-clu

    测试全局变量和并行度,集群模式的关系

    1. bolt内不加static,3并行度,单机模式
      测试bolt中全局变量i,在execute中执行打印i,然后i++

      结果: image.png
      分析:每个bolt实例维护自己的全局变量i。
    2. bolt内加static,3并行度,单机模式
      测试bolt中全局变量i,在execute中执行打印i,然后i++

      结果: image.png
      分析:每个bolt实例共同维护享受static全局变量i。
      原因:同一个机器在同一个jvm中,只有一个static。
    3. bolt内加static,3并行度,集群模式
      测试bolt中全局变量i,在execute中执行打印i,然后i++

      结果: image.png

    分析:每个bolt实例维护自己的全局变量i。
    原因:不同一个机器在不同一个jvm中,各自都有static。

    1. WordCountTestTopology加static的public变量,3并行度,本地模式
      测试bolt中使用该WordCountTestTopology.i,在execute中执行打印i,然后i++

      结果: image.png
      分析:每个bolt实例共同维护享受static全局变量i。
      原因:同一个机器在同一个jvm中,只有一个static。
    2. WordCountTestTopology加static的public变量,3并行度,集群模式
      测试bolt中使用该WordCountTestTopology.i,在execute中执行打印i,然后i++

      结果: image.png
      分析:每个bolt实例维护自己的全局变量i。
      原因:不同一个机器在不同一个jvm中,各自都有static。

    stackoverflow的解决建议:

    Is it possible to use Global Static variables in Storm Bolts/Spout in actual cluster environment

    image.png

    想法:可以用allgrouping来给每个task传播tuple来更新维护共同的变量,allgrouping, 一般用于全局的数据同步和共享才需要, 比如全局的配置更新等,

    知乎:

    storm处理流数据如何不断的更新与查询?

    报错

    2018-11-21 14:13:20.580 o.a.s.m.n.StormClientHandler client-boss-1 [INFO] Connection to centos7-dase-75/10.11.6.75:6700 failed:
    java.net.NoRouteToHostException: No route to host
    

    解决:查看对应节点的防火墙状态,sudo firewall-cmd --state,发现正在运行,则关闭直接关闭防火墙 1.systemctl stop firewalld.service #停止firewall 2.systemctl disable firewalld.service #禁止firewall开机启动

    Log日记里记录了每条tuple的信息,导致log日记过大

    原因:配置了config的debug为true,默认是false,修改为false则不会记录每条tuple消息了。myconf.setDebug(false);

    Config.class

    spout大量超时failed信息

    得考虑输入速率,bolt的并行度,窗口大小导致缓冲很多积累很多tuple,bolt的capacity处理能力,spout pending,ack数量

    相关文章

      网友评论

          本文标题:storm实验问题

          本文链接:https://www.haomeiwen.com/subject/vvjmgftx.html