Package

Source Code of TopologyInitializer

/*
* Author: cbedford
* Date: 11/12/13
* Time: 4:58 PM
*/


import backtype.storm.generated.StormTopology;
import backtype.storm.spout.SchemeAsMultiScheme;
import backtype.storm.topology.IRichSpout;
import backtype.storm.topology.TopologyBuilder;
import org.tomdz.storm.esper.EsperBolt;
import storm.kafka.*;

public class TopologyInitializer {
    public static int STORM_KAFKA_FROM_READ_FROM_CURRENT_OFFSET = -1;
    public static int STORM_KAFKA_FROM_READ_FROM_START = -2;

    public static StormTopology createTopology(String zookeeperConnectString,
                                               String kafkaBrokerConnectString,
                                               String inputTopic,
                                               String outputTopic,
                                               IFeedItemProvider feedItemProvider,
                                               boolean kafkaOutputBoltRawMode) {
        TopologyBuilder builder = new TopologyBuilder();
        IRichSpout feedSpout =
                new ExternalFeedToKafkaAdapterSpout(
                        feedItemProvider,
                        kafkaBrokerConnectString,
                        inputTopic, null);
        EsperBolt esperBolt = createEsperBolt();
        KafkaOutputBolt kafkaOutputBolt =
                new KafkaOutputBolt(kafkaBrokerConnectString, outputTopic, null, kafkaOutputBoltRawMode);

        builder.setSpout("externalFeedSpout", feedSpout);   // these spouts are bound together by shared topic
        builder.setSpout("kafkaSpout", createKafkaSpout(zookeeperConnectString, inputTopic));

        builder.setBolt("esperBolt", esperBolt, 1)
                .shuffleGrouping("kafkaSpout");
        builder.setBolt("kafkaOutputBolt", kafkaOutputBolt, 1)
                .shuffleGrouping("esperBolt");
        return builder.createTopology();
    }

    public static EsperBolt createEsperBolt() {
        String esperQuery=
                "select  str as found from OneWordMsg.win:length_batch(2) where str like '%at%'";
        EsperBolt esperBolt = new EsperBolt.Builder()
                .inputs().aliasComponent("kafkaSpout").
                        withFields("str").ofType(String.class).toEventType("OneWordMsg")
                .outputs().onDefaultStream().emit("found")
                .statements().add(esperQuery)
                .build();
        return esperBolt;
    }

    public static KafkaSpout createKafkaSpout(String zkConnect, String topicName) {
        BrokerHosts brokerHosts = new ZkHosts(zkConnect);
        SpoutConfig kafkaConfig = new SpoutConfig(brokerHosts, topicName, "", "storm");
        kafkaConfig.forceStartOffsetTime(STORM_KAFKA_FROM_READ_FROM_START);
        kafkaConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
        return new KafkaSpout(kafkaConfig);
    }
}
TOP

Related Classes of TopologyInitializer

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.