拓扑统计中的奇怪'发射'数字行为/零统计数字(风暴1.0.3)

时间:2017-04-11 22:41:05

标签: java-8 apache-storm

This是我的风暴UI统计数据。

问题是我不知道这些数字(发出的元组来自哪里)。

  • 我的拓扑非常简单:kafka spout - > bolt(将数据保存到hbase中)
  • 拓扑工作 - 当我将数据放入kafka主题时,我将它们用螺栓处理并保存在hbase中,然后我在hbase shell中与扫描操作符进行验证(因此插入了新记录)
  • 但是每次我向kafka提交新消息以及当它被bolt保持时 - 我的拓扑结构不会增加'1'发出的数量。
  • 我会定期将所有数字增加20,而不会向kafka发送任何新消息。即我的kafka主题几小时都没有消息,但随着时间的推移,发出的元组数量总是以20块的形式增加。我仍然在hbase中获得相同数量的记录。
  • 我在apache风暴日志中没有任何异常/错误。
  • 我没有在我的bolt实现中使用ack()或者失败()我的任何元组(这是BasicBolt类型自动执行ack)
  • 即使我在Kafka中加载大量邮件,我的螺栓指标的容量或延迟始终保持为零
  • 我的kafka偏移日志($ KAFKA / kafka-run-class.sh kafka.tools.ConsumerOffsetChecker)显示处理的所有消息,给定主题/组的Kafka Lag为0。

所以我的问题:

  1. 那些“隐形”元组会在20秒内随着时间的推移而增加“Spout”和“Bolt”的“排放”元素?
  2. 是否可以在风暴UI中启用“调试”以查看这些元组是什么?
  3. 为什么螺栓指标中的容量/延迟总是为零,而螺栓被确认为持久存储数据?
  4. 环境详情

    我正在使用Java 8 + Apache Storm 1.0.3

    [devops@storm-wk1-prod]~/storm/supervisor/stormdist% storm version
    Running: /usr/lib/jvm/jre-1.8.0-openjdk/bin/java -client -Ddaemon.name= -Dstorm.options= -Dstorm.home=/opt/apache-storm-1.0.3 -Dstorm.log.dir=/opt/apache-storm-1.0.3/logs -Djava.library.path=/usr/local/lib:/opt/local/lib:/usr/lib -Dstorm.conf.file= -cp /opt/apache-storm-1.0.3/lib/storm-core-1.0.3.jar:/opt/apache-storm-1.0.3/lib/kryo-3.0.3.jar:/opt/apache-storm-1.0.3/lib/reflectasm-1.10.1.jar:/opt/apache-storm-1.0.3/lib/asm-5.0.3.jar:/opt/apache-storm-1.0.3/lib/minlog-1.3.0.jar:/opt/apache-storm-1.0.3/lib/objenesis-2.1.jar:/opt/apache-storm-1.0.3/lib/clojure-1.7.0.jar:/opt/apache-storm-1.0.3/lib/disruptor-3.3.2.jar:/opt/apache-storm-1.0.3/lib/log4j-api-2.1.jar:/opt/apache-storm-1.0.3/lib/log4j-core-2.1.jar:/opt/apache-storm-1.0.3/lib/log4j-slf4j-impl-2.1.jar:/opt/apache-storm-1.0.3/lib/slf4j-api-1.7.7.jar:/opt/apache-storm-1.0.3/lib/log4j-over-slf4j-1.6.6.jar:/opt/apache-storm-1.0.3/lib/servlet-api-2.5.jar:/opt/apache-storm-1.0.3/lib/storm-rename-hack-1.0.3.jar:/opt/storm/conf org.apache.storm.utils.VersionInfo
    Storm 1.0.3
    URL https://git-wip-us.apache.org/repos/asf/storm.git -r eac433b0beb3798c4723deb39b3c4fad446378f4
    Branch (no branch)
    Compiled by ptgoetz on 2017-02-07T20:22Z
    From source with checksum c78e52de4b8a22d99551d45dfe9c1a4b
    

    我的风暴.yaml:

    我正在使用风暴监督员运行2个实例,每个实例都有以下配置:

    storm.zookeeper.servers:
      - "10.138.0.8"
      - "10.138.0.9"
      - "10.138.0.16"
    
    storm.zookeeper.port: 2181
    
    nimbus.seeds: ["10.138.0.10"]
    
    storm.local.dir: "/var/log/storm"
    supervisor.slots.ports:
      - 6700
      - 6701
      - 6702
      - 6703
    
    worker.childopts: "-Xmx768m"
    nimbus.childopts: "-Xmx512m"
    supervisor.childopts: "-Xmx256m"
    

    toplogy.yaml

    nimbus.host: "10.138.0.10"
    
    # In Storm 0.7.x, this is necessary in order to give workers time to
    # initialize. In Storm 0.8.0 and later, it may not be necessary because Storm
    # has added a separate, longer timeout for the initial launch of a worker.
    supervisor.worker.timeout.secs: 60
    
    topology.workers: 1
    

    拓扑结构

    import tbolts
    import tspouts
    
    
    def create(builder):
        """Create toplogy through Petrel library
        """
        # spout getting data from kafka instance
        # we run 2 tasks of kafka spout
        builder.setSpout("kafka",
                         tspouts.KafkaSpout(), 2)
    
        # persistence bolt
        # we run 4 tasks of persistence bolt
        builder.setBolt("persistence",
                        tbolts.PersistenceBolt(), 4).shuffleGrouping("kafka")
    

1 个答案:

答案 0 :(得分:1)

你的发射计数跳升20的原因是因为Storm只会采样每20个元组购买默认值以更新其指标。此采样率由topology.stats.sample.rate配置变量控制,并且可以根据拓扑进行更改。因此,您可以将其设置为1.0(默认情况下为0.05)并且您将获得准确的发射计数,但这会引入显着的处理开销并可能导致您的Acker和/或指标消费者实例变得超载。请谨慎使用。