Storm UI 显示不同数量的 Executors 和 Tasks

Posted

技术标签:

【中文标题】Storm UI 显示不同数量的 Executors 和 Tasks【英文标题】:Storm UI showing Different Numbers of Executors and Tasks 【发布时间】:2016-06-17 15:12:57 【问题描述】:

我正在使用带有 trident 拓扑的 Storm,但我无法理解并行度是如何实现的,它根据我的计算和我在 Storm UI 上看到的有所不同,

这是分配工人数量的代码:

public Config getTopologyConfiguration() 
    Config conf = new Config();
    //conf.setDebug(true);
    conf.setNumWorkers(6);
    conf.setMessageTimeoutSecs(100);
    return conf;

这是流处理代码:

s.name("aggregation_stream")
            .parallelismHint(invoiceAggregationConfig.getSpoutParallelism())
            .partitionBy(groupedFields)
            .partitionAggregate(aggregateInputFields,
                    new GenericAggregator(groupedFields, aggregatedFieldsList, aggregateFieldsOperationList),
                    aggregatorOutputFields)
            .parallelismHint(invoiceAggregationConfig.getAggregationParallelism())
            .shuffle()
            .each(aggregatorOutputFields,
                    new CreatePaymentFromInvoices(paymentType, groupMap, aggMap, paymentExtraParams),
                    Const.PAYMENT_FIELD)
            .each(TridentUtils.fieldsConcat(aggregatorOutputFields, Const.PAYMENT_FIELD),
                    new CreateApplicationFromPaymentAndInvoices(invoiceType),
                    Const.APPLICATIONS_FIELD)
            .each(TridentUtils.fieldsConcat(aggregatorOutputFields, Const.PAYMENT_FIELD, Const.APPLICATIONS_FIELD),
                    new RestbusFilterForPaymentAndApplications(environment, bu, serviceConfiguration))
            .parallelismHint(invoiceAggregationConfig.getPersistenceParallelism());

我在上面的代码中使用的并行属性在这里:

spoutParallelism: 3
aggregationParallelism: 6
persistenceParallelism: 6

现在根据我的计算,执行者的数量应该是 3*6 + 6 = 24

但是在 Storm UI 中显示的是 23,怎么回事?

已编辑

添加包含单个组件信息的新屏幕截图

这里我可以看到Executors和tasks的数量是50个,但是我没有为此设置任何配置,storm自己提供这个吗??

其次,发出的元组数量庞大,我没有产生这么多数据,这是元组的 100 多倍,怎么会在 UI 中显示这么多元组?

【问题讨论】:

你能贴一下各个组件的截图吗?我相信这与acking有关,也让我们知道集群上有多少插槽是空的 @supermonk :我已经编辑了这个问题。请检查 请贴出构建和提交拓扑的完整代码 【参考方案1】:

发出的元组数量可能很大 原因:当 spout 发出一个元组时,它会期待 ack,如果没有收到 ack,它将重新发送元组,因此发出和传输的计数可以是更高的值。 (检查确认它的小数并与发出的计数比较)

【讨论】:

请检查确认计数应该是

以上是关于Storm UI 显示不同数量的 Executors 和 Tasks的主要内容,如果未能解决你的问题,请参考以下文章

Storm工具及命令

storm单机运行报错 ERROR backtype.storm.daemon.executor -

理解storm的并行执行,workder,executor,task的关系以及调度算法

Storm ui 显示异常

Storm分布式实时计算模式

Storm分布式实时计算模式