package eu.europeana.cloud.service.dps.examples.tutorial; import static eu.europeana.cloud.service.dps.examples.tutorial.TopologyConstants.*; import eu.europeana.cloud.service.dps.PluginParameterKeys; import eu.europeana.cloud.service.dps.storm.NotificationBolt; import eu.europeana.cloud.service.dps.storm.ParseTaskBolt; import eu.europeana.cloud.service.dps.storm.io.ReadFileBolt; import eu.europeana.cloud.service.dps.storm.io.StoreFileAsRepresentationBolt; import org.apache.storm.Config; import org.apache.storm.LocalCluster; import org.apache.storm.kafka.BrokerHosts; import org.apache.storm.kafka.KafkaSpout; import org.apache.storm.kafka.SpoutConfig; import org.apache.storm.kafka.ZkHosts; import org.apache.storm.topology.TopologyBuilder; import org.apache.storm.utils.Utils; import java.util.HashMap; import java.util.Map; /** * @author lucasanastasiou */ public class ConvertTopology { private final static String datasetStream = "DATASET_URLS"; private final static String fileStream = "FILE_URLS"; public static void main(String args[]) { TopologyBuilder builder = new TopologyBuilder(); Map<String, String> routingRules = new HashMap<>(); routingRules.put(PluginParameterKeys.FILE_URLS, datasetStream); routingRules.put(PluginParameterKeys.DATASET_URLS, fileStream); // entry spout BrokerHosts brokerHosts = new ZkHosts(ZOOKEEPER_LOCATION); SpoutConfig spoutConf = new SpoutConfig(brokerHosts, KAFKA_TOPIC, ZK_ROOT, ID); builder.setSpout("KafkaSpout", new KafkaSpout(spoutConf), 1); //bolt 1 builder.setBolt("ParseDpsTask", new ParseTaskBolt(routingRules), 1) .shuffleGrouping("KafkaSpout"); //bolt 2 builder.setBolt("RetrieveFile", new ReadFileBolt(ECLOUD_MCS_ADDRESS), 1) .shuffleGrouping("ParseDpsTask"); //bolt 3 builder.setBolt("ConvertBolt", new ConvertBolt(), 1) .shuffleGrouping("RetrieveFile"); //bolt 4 builder.setBolt("StoreBolt", new StoreFileAsRepresentationBolt(ECLOUD_MCS_ADDRESS, ECLOUD_MCS_USERNAME, ECLOUD_MCS_PASSWORD), 1) .shuffleGrouping("ConvertBolt", "stream-to-next-bolt"); //notification bolt builder.setBolt("NotificationBolt", new NotificationBolt(CASSANDRA_HOSTS, CASSANDRA_PORT, CASSANDRA_KEYSPACE_NAME, CASSANDRA_USERNAME, CASSANDRA_PASSWORD), 1) .shuffleGrouping("ParseDpsTask") .shuffleGrouping("RetrieveFile") .shuffleGrouping("ConvertBolt") .shuffleGrouping("StoreBolt"); // run in local mode for debugging... Config conf = new Config(); conf.setDebug(true); conf.setNumWorkers(2); LocalCluster cluster = new LocalCluster(); cluster.submitTopology("test", conf, builder.createTopology()); Utils.sleep(10000); cluster.killTopology("test"); cluster.shutdown(); } }