• (04)Storm与Kafka结合使用简单案例


      在前面Storm的基本概念中,提到过Storm的Spout应该是源源不断的取数据,不能间断。那么,很显然,消息队列系统、分布式内存系统或内存数据库是作为其数据源的很好的选择。因此,Storm的发布包中也包含了一个集成jar,支持从kafka读出数据,供Storm应用使用。下面记录一下使用过程。

      本篇在上一篇随笔Storm编程案例的基础上改进

      1、添加额外jar包

      在java工程中新添加storm-kafka-0.9.2-incubating.jar,该jar可以从apache-storm-0.9.2-incubating/external/storm-kafka下获取

      2、修改组装类

     1 package demo;
     2 
     3 import java.util.UUID;
     4 
     5 import backtype.storm.Config;
     6 import backtype.storm.StormSubmitter;
     7 import backtype.storm.generated.StormTopology;
     8 import backtype.storm.spout.SchemeAsMultiScheme;
     9 import backtype.storm.topology.TopologyBuilder;
    10 import storm.kafka.BrokerHosts;
    11 import storm.kafka.KafkaSpout;
    12 import storm.kafka.SpoutConfig;
    13 import storm.kafka.StringScheme;
    14 import storm.kafka.ZkHosts;
    15 
    16 //组装各个组件,并且提交任务到Storm集群
    17 public class SubmitClient {
    18 
    19     public static void main(String[] args) throws Exception {
    20         //得到一个topology的构造器
    21         TopologyBuilder builder = new TopologyBuilder();
    22         //指定我们的spout
    23         builder.setSpout("datasource-spout",createKafkaSpout());
    24         //指定Bolt组件,还需要指定数据的来源
    25         builder.setBolt("boltA", new MyBoltA()).shuffleGrouping("datasource-spout");
    26         builder.setBolt("boltB", new MyBoltB()).shuffleGrouping("boltA");
    27         //生成一个具体的任务
    28         StormTopology phoneTopo = builder.createTopology();
    29         //指明任务的一些参数
    30         Config config = new Config();
    31         //希望storm集群分配6个worker来执行任务
    32         config.setNumWorkers(6);
    33         //提交任务
    34         StormSubmitter.submitTopology("mystormdemo", config, phoneTopo);
    35     }
    36 
    37     //支持从Kakfa消息系统中读取数据
    38     private static KafkaSpout createKafkaSpout() {
    39         BrokerHosts brokerHosts = new ZkHosts("192.168.7.151:2181,192.168.7.152:2181,192.168.7.153:2181");
    40         SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, "mydemo1", "/mydemo1", UUID.randomUUID().toString());
    41         spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());
    42         //返回一个KafkaSpout
    43         return new KafkaSpout(spoutConfig);
    44     }
    45 }

      第23行指定spout为kafka,并且新增createKafkaSpout方法

      3、文件打包,发送服务器

      将这四个文件打成 stormDemo.jar,并且上传到Storm的服务器,临时存放在 /usr/local/test/storm

      4、服务器添加额外jar包

      向Storm服务添加与kafka相关的jar包,位置在kafka_2.9.2-0.8.1.1/libs添加到apache-storm-0.9.2-incubating/lib下

    [root@localhost storm-kafka]# cp storm-kafka-0.9.2-incubating.jar /usr/local/apache-storm-0.9.2-incubating/lib/
    [root@localhost libs]# cp kafka_2.9.2-0.8.1.1.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp scala-library-2.9.2.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp metrics-core-2.2.0.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp snappy-java-1.0.5.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp zkclient-0.3.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp log4j-1.2.15.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp slf4j-api-1.7.2.jar /usr/local/apache-storm-0.9.2-incubating/lib/ [root@localhost libs]# cp jopt-simple-3.2.jar /usr/local/apache-storm-0.9.2-incubating/lib/

      5、启动相关程序

      首先启动Zookeeper、Kafka、Storm服务,然后启动kafka的生产者客户端程序,分别参考前面的随笔

      安装zookeeper集群

      kafka单机多Broker(伪分布式)的基本配置

      单机安装配置Storm

      java程序连接kafka示例

      然后执行以下命令提交任务:

    [root@localhost apache-storm-0.9.2-incubating]# bin/storm jar /usr/local/test/storm/stormDemo.jar demo.SubmitClient
  • 相关阅读:
    [FPGA与ASIC] 优化方法
    学习《中医药治疗热病的作用机理(韩晶岩)》的体会
    使用Capture CIS Lite仿真电路
    Everything软件-集本地文件搜索、文件服务器、批量操作文件等若干功能于一身的高效率软件
    注册表改右键菜单和默认程序
    Qt Quick开发教程4-QML拖放
    Qt Quick开发教程4--使用第三方QML UI包
    个人 PC/Android 常用软件列表
    Qt Quick开发教程3-C++与QML联合开发
    Qt Quick开发教程2-QML语法
  • 原文地址:https://www.cnblogs.com/javasl/p/12315060.html
Copyright © 2020-2023  润新知