<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 495,comments - 227,trackbacks - 0
    轉(zhuǎn)載自http://www.cnblogs.com/tovin/p/3974417.html

    本文主要介紹如何在Storm編程實現(xiàn)與Kafka的集成

      一、實現(xiàn)模型

       數(shù)據(jù)流程:

        1、Kafka Producter生成topic1主題的消息 

        2、Storm中有個Topology,包含了KafkaSpout、SenqueceBolt、KafkaBolt三個組件。其中KafkaSpout訂閱了topic1主題消息,然后發(fā)送

          給SenqueceBolt加工處理,最后數(shù)據(jù)由KafkaBolt生成topic2主題消息發(fā)送給Kafka

        3、Kafka Consumer負(fù)責(zé)消費topic2主題的消息

        

        

      二、Topology實現(xiàn)

        1、創(chuàng)建maven工程,配置pom.xml

          需要依賴storm-core、kafka_2.10、storm-kafka三個包

    復(fù)制代碼
      <dependencies>         <dependency>            <groupId>org.apache.storm</groupId>              <artifactId>storm-core</artifactId>              <version>0.9.2-incubating</version>              <scope>provided</scope>         </dependency>         <dependency>         <groupId>org.apache.kafka</groupId>         <artifactId>kafka_2.10</artifactId>         <version>0.8.1.1</version>         <exclusions>             <exclusion>                 <groupId>org.apache.zookeeper</groupId>                 <artifactId>zookeeper</artifactId>             </exclusion>             <exclusion>                 <groupId>log4j</groupId>                 <artifactId>log4j</artifactId>             </exclusion>         </exclusions>     </dependency>                 <dependency>             <groupId>org.apache.storm</groupId>            <artifactId>storm-kafka</artifactId>             <version>0.9.2-incubating</version>       </dependency>     </dependencies>      <build>     <plugins>       <plugin>         <artifactId>maven-assembly-plugin</artifactId>         <version>2.4</version>         <configuration>           <descriptorRefs>             <descriptorRef>jar-with-dependencies</descriptorRef>           </descriptorRefs>         </configuration>         <executions>           <execution>             <id>make-assembly</id>              <phase>package</phase>             <goals>               <goal>single</goal>             </goals>           </execution>         </executions>       </plugin>     </plugins>   </build>
    復(fù)制代碼

     

        2、KafkaSpout

          KafkaSpout是Storm中自帶的Spout,源碼在https://github.com/apache/incubator-storm/tree/master/external

          使用KafkaSpout時需要子集實現(xiàn)Scheme接口,它主要負(fù)責(zé)從消息流中解析出需要的數(shù)據(jù)

    復(fù)制代碼
    public class MessageScheme implements Scheme {           /* (non-Javadoc)      * @see backtype.storm.spout.Scheme#deserialize(byte[])      */     public List<Object> deserialize(byte[] ser) {         try {             String msg = new String(ser, "UTF-8");              return new Values(msg);         } catch (UnsupportedEncodingException e) {                     }         return null;     }               /* (non-Javadoc)      * @see backtype.storm.spout.Scheme#getOutputFields()      */     public Fields getOutputFields() {         // TODO Auto-generated method stub         return new Fields("msg");       }   } 
    復(fù)制代碼

        3、SenqueceBolt

           SenqueceBolt實現(xiàn)很簡單,在接收的spout的消息前面加上“I‘m” 

    復(fù)制代碼
    public class SenqueceBolt extends BaseBasicBolt{          /* (non-Javadoc)      * @see backtype.storm.topology.IBasicBolt#execute(backtype.storm.tuple.Tuple, backtype.storm.topology.BasicOutputCollector)      */     public void execute(Tuple input, BasicOutputCollector collector) {         // TODO Auto-generated method stub          String word = (String) input.getValue(0);            String out = "I'm " + word +  "!";            System.out.println("out=" + out);          collector.emit(new Values(out));     }          /* (non-Javadoc)      * @see backtype.storm.topology.IComponent#declareOutputFields(backtype.storm.topology.OutputFieldsDeclarer)      */     public void declareOutputFields(OutputFieldsDeclarer declarer) {         declarer.declare(new Fields("message"));     } } 
    復(fù)制代碼

        4、KafkaBolt

          KafkaBolt是Storm中自帶的Bolt,負(fù)責(zé)向Kafka發(fā)送主題消息

        5、Topology

    復(fù)制代碼
    public class StormKafkaTopo {        public static void main(String[] args) throws Exception { 
         // 配置Zookeeper地址 BrokerHosts brokerHosts
    = new ZkHosts("node04:2181,node05:2181,node06:2181"); // 配置Kafka訂閱的Topic,以及zookeeper中數(shù)據(jù)節(jié)點目錄和名字 SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, "topic1", "/zkkafkaspout" , "kafkaspout");
         // 配置KafkaBolt中的kafka.broker.properties Config conf
    = new Config(); Map<String, String> map = new HashMap<String, String>();
         // 配置Kafka broker地址 map.put(
    "metadata.broker.list", "node04:9092"); // serializer.class為消息的序列化類 map.put("serializer.class", "kafka.serializer.StringEncoder"); conf.put("kafka.broker.properties", map);
        // 配置KafkaBolt生成的topic conf.put(
    "topic", "topic2"); spoutConfig.scheme = new SchemeAsMultiScheme(new MessageScheme()); TopologyBuilder builder = new TopologyBuilder(); builder.setSpout("spout", new KafkaSpout(spoutConfig)); builder.setBolt("bolt", new SenqueceBolt()).shuffleGrouping("spout"); builder.setBolt("kafkabolt", new KafkaBolt<String, Integer>()).shuffleGrouping("bolt"); if (args != null && args.length > 0) { conf.setNumWorkers(3); StormSubmitter.submitTopology(args[0], conf, builder.createTopology()); } else { LocalCluster cluster = new LocalCluster(); cluster.submitTopology("Topo", conf, builder.createTopology()); Utils.sleep(100000); cluster.killTopology("Topo"); cluster.shutdown(); } } }
    復(fù)制代碼

     

           

      三、測試驗證

        1、使用Kafka client模擬Kafka Producter ,生成topic1主題   

          bin/kafka-console-producer.sh --broker-list node04:9092 --topic topic1

        2、使用Kafka client模擬Kafka Consumer,訂閱topic2主題

          bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic topic2 --from-beginning

        3、運行Strom Topology

          bin/storm jar storm-kafka-0.0.1-SNAPSHOT-jar-with-dependencies.jar  StormKafkaTopo KafkaStorm

        4、運行結(jié)果

            

            

    posted on 2015-03-01 15:47 SIMONE 閱讀(4957) 評論(0)  編輯  收藏 所屬分類: hadoop
    主站蜘蛛池模板: 成人国产网站v片免费观看| 久久精品亚洲精品国产色婷| 国产日本亚洲一区二区三区| 99久久99久久免费精品小说| 麻豆亚洲AV永久无码精品久久| 东方aⅴ免费观看久久av| 国产偷v国产偷v亚洲高清| 丝袜捆绑调教视频免费区| 国产亚洲美女精品久久久久狼 | 国产人成免费视频| 久久精品国产亚洲AV| 日本免费电影一区| 男人和女人高潮免费网站| 亚洲女久久久噜噜噜熟女| 九九美女网站免费| 亚洲福利视频一区二区三区| 18级成人毛片免费观看| 中文字幕无码精品亚洲资源网久久 | 一级毛片试看60分钟免费播放| 国产av无码专区亚洲av果冻传媒| 99久久精品毛片免费播放| 亚洲精品欧洲精品| 成人免费午间影院在线观看| 免费一级毛片在线播放放视频 | 亚洲精品国产高清不卡在线| 中文字幕av无码不卡免费| 91久久亚洲国产成人精品性色 | 黄色一级免费网站| 亚洲AV无码久久精品色欲| 美女被cao免费看在线看网站| 亚洲国产精品网站在线播放| 伊人久久大香线蕉亚洲五月天| 久久综合九色综合97免费下载| 99亚偷拍自图区亚洲| 久久亚洲2019中文字幕| www视频免费看| 男人j进女人p免费视频| 亚洲国语在线视频手机在线| 免费a在线观看播放| 久视频精品免费观看99| 羞羞的视频在线免费观看|