Apache风暴,推特

qvtsj1bj  于 2021-06-21  发布在  Storm
关注(0)|答案(1)|浏览(361)

我正在使用twiter4j.properties通过风暴螺栓处理twitter推文。我的拓扑结构如下所示:

TopologyBuilder builder = new TopologyBuilder();

    builder.setSpout("KafkaSpout", new KafkaSpout(kafkaConfig), 2).setNumTasks(4);
    builder.setBolt("Preprocesing", new preprocessBolt2(), 2)
            .setNumTasks(4).shuffleGrouping("KafkaSpout");

    builder.setBolt("AvgScoreAnalysis",
            new AvgScoringBolt(), 4).setNumTasks(8)
            .fieldsGrouping("Preprocesing",new Fields("tweetId"));

    builder.setBolt("PrinterBolt", new LocalFile(), 6).setNumTasks(4)
            .shuffleGrouping("AvgScoreAnalysis");

当我从kafkaspout获取tweets并将其发送给bolt进行预处理时,我的问题在于avgscoring,在这里我调用s3,为每个用户提供csv,并计算每个用户对每个tweet的得分。我有100个用户意味着我的平均得分必须计算平均得分为每个推文的所有用户数在s3。这是相当缓慢,我如何提高性能,在这个螺栓和有这么多的重复文件中,我如何删除重复?

jgwigjjp

jgwigjjp1#

如果你想要高性能,从avgscoringbolt调用s3不是一个好主意:除非你用一些标准过滤tweet,否则没有办法为每一条tweet建立一个到s3的连接,并且仍然每秒解析数千条tweet。由于只有100个用户,也许您可以在应用程序开始时下载用户的cvs,在bolt内部进行计算,而不必连接到s3(使用下载的csv),并定期将更新的csv上传到s3,以便与s3进行松散的同步。我不知道这个场景是否符合你的要求。

相关问题