这个是在window环境下面安装的kafka

  • 下载pom依赖

      <dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-kafka-client</artifactId>
    <version>1.1.1</version>
    </dependency>
    <dependency>
    <groupId>org.apache.kafka</groupId>
    <artifactId>kafka-clients</artifactId>
    <version>0.10.0.0</version>
    </dependency>
    <dependency>
    <groupId>org.apache.storm</groupId>
    <artifactId>storm-core</artifactId>
    <version>1.1.1</version>
    <!-- 本地测试注释集群运行打开 -->
    <!-- <scope>provided</scope>-->
    </dependency>

编写代码

  • 编写SplitSentenceBolt

    public class SplitSentenceBolt extends BaseRichBolt {

    private OutputCollector collector;

    	@Override
    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
    this.collector=outputCollector;
    } @Override
    public void execute(Tuple tuple) {
    //String sentece = tuple.getStringByField("sentence");
    String sentece=tuple.getString(4);
    String[] words = sentece.split(" ");
    for (String word:words){
    collector.emit(new Values(word));
    }
    } @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declare(new Fields("words"));
    }
    }
  • 编写WordCountBolt

    public class WordCountBolt extends BaseRichBolt {

    	private  OutputCollector collector;
    private HashMap<String,Long> counts =null; @Override
    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {
    this.collector = outputCollector;
    this.counts = new HashMap<>();
    } @Override
    public void execute(Tuple tuple) {
    String word = tuple.getStringByField("words");
    // String word =tuple.getString(0);
    Long count=this.counts.get(word);
    if(count==null){
    count=0L;
    }
    count++;
    //出现就添加到map中,word相同的,会覆盖掉 所以最后的word就是准确的数据
    this.counts.put(word,count);
    this.collector.emit(new Values(word,count));
    } @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) {
    outputFieldsDeclarer.declare(new Fields("word","count"));
    }
    }
  • 编写ReportBolt

    public class ReportBolt extends BaseRichBolt {

    private HashMap<String,Long> counts=null;

    @Override

    public void prepare(Map map, TopologyContext topologyContext, OutputCollector outputCollector) {

    this.counts=new HashMap<String,Long>();

    }

    	@Override
    public void execute(Tuple input) {
    String word=input.getStringByField("word");
    Long count=input.getLongByField("count");
    this.counts.put(word, count); System.out.println("--------FINAL COUNTS--------");
    List<String> keys=new ArrayList<String>();
    keys.addAll(this.counts.keySet());
    Collections.sort(keys);
    for(String key:keys){
    System.out.println(key+":"+this.counts.get(key));
    }
    System.out.println("----------------------------");
    } @Override
    public void declareOutputFields(OutputFieldsDeclarer outputFieldsDeclarer) { }
    }
  • 编写Topology

    public class MainTopology {

    public static void main(String[] args)throws Exception {

    TopologyBuilder builder = new TopologyBuilder();

    KafkaSpoutConfig.Builder<String, String> kafkabuilder = KafkaSpoutConfig.builder("localhost:9092", "test");

    		//设置kafka属于哪个组
    kafkabuilder.setGroupId("testgroup");
    //创建kafkaspoutConfig
    KafkaSpoutConfig<String, String> build = kafkabuilder.build();
    //通过kafkaspoutconfig获取kafkaspout
    KafkaSpout<String, String> kafkaSpout = new KafkaSpout<>(build);
    //设置四个线程接收数据
    builder.setSpout("kafkaspout",kafkaSpout,4);
    // builder.setBolt("printBolt", new PrintBolt(),2).localOrShuffleGrouping("kafkaspout"); builder.setBolt("split-bolt",new SplitSentenceBolt(),2).setNumTasks(4).shuffleGrouping("kafkaspout");
    // 有时候我们需要将特定数据的tuple路由到特殊的bolt实例中,在此我们使用fieldsGrouping
    // 来保证所有"word"字段值相同的tuple会被路由到同一个WordCountBolt实例中
    builder.setBolt("count-bolt",new WordCountBolt(),2).fieldsGrouping("split-bolt",new Fields("words"));
    builder.setBolt("report-bolt",new ReportBolt()).globalGrouping("count-bolt"); Config config=new Config();
    config.setDebug(false);
    config.setNumWorkers(2);
    LocalCluster cluster =new LocalCluster();
    cluster.submitTopology("kafkaspout",config,builder.createTopology()); }

storm和kafka的wordCount的更多相关文章

  1. Storm集成Kafka应用的开发

    我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...

  2. storm集成kafka

    kafkautil: import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.produce ...

  3. storm消费kafka实现实时计算

    大致架构 * 每个应用实例部署一个日志agent * agent实时将日志发送到kafka * storm实时计算日志 * storm计算结果保存到hbase storm消费kafka 创建实时计算项 ...

  4. 2018.5.12 storm数据源kafka堆积

    问题现象: storm代码依赖4个源数据topic,2018.5.12上午8点左右开始收到告警短信,源头的4个topic数据严重堆积. 排查: 1.查看stormUI, storm拓扑结构如下: 看现 ...

  5. storm集成kafka的应用,从kafka读取,写入kafka

    storm集成kafka的应用,从kafka读取,写入kafka by 小闪电 0前言 storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...

  6. storm和kafka整合

    storm和kafka整合 依赖 <dependency> <groupId>org.apache.storm</groupId> <artifactId&g ...

  7. Storm 学习之路(九)—— Storm集成Kafka

    一.整合说明 Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对0.8.x版本的Kafka提供整合支持: Storm ...

  8. Storm 系列(九)—— Storm 集成 Kafka

    一.整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持: ...

  9. Storm消费Kafka提交集群运行

    1.创建拓扑,配置KafkaSpout.Bolt KafkaTopologyBasic.java: package org.mort.storm.kafka; import org.apache.ka ...

随机推荐

  1. Indy10 控件的使用(2)TidTCpServer组件学习

    以下来自英文原版帮助文件,文桓英语不好,翻译了老半天.有错误的地方见谅,别骂我. TIdTCPServer = class(TIdComponent) Description TIdTCPServer ...

  2. Git远程操作具体解释

    Git是眼下最流行的版本号管理系统,学会Git差点儿成了开发人员的必备技能. Git有非常多优势,当中之中的一个就是远程操作非常简便.本文具体介绍5个Git命令,它们的概念和使用方法,理解了这些内容. ...

  3. 学习鸟哥的Linux私房菜笔记(8)——文件查找与文件管理2

    四.压缩 gzip, gunzip Linux标准压缩工具 对文本文件可以达到75%的压缩率 compress, uncompress 旧的Unix压缩工具 bzip2, bunzip2 更新的Lin ...

  4. 与Boss大雷探讨JavaWeb开发、电商与网络安全

    最近几个月,与公司Boss大雷交流得比较多,也学习到了很多新的东西,了解到了一些没有接触和实践的业界做法. 简要介绍下Boss,姓雷,定居武汉好几年了,之前在一号店.UC.支付宝干过,有丰富的电商-支 ...

  5. zookeeper 客户端操作

    代码 /** * 创建zk客户端 * 实现循环监听的两个必要条件:1.程序不能结束2.递归调用监听器 * @author tele * */ public class Demo { ; //多个节点用 ...

  6. spring boot jar 部署linux服务器

    用命令启动spring boot 项目,一旦终端命令窗口关闭,项目也就关闭了,所以我们采用脚本的方式来运行jar 正常命令 java -jar xxx.jar 脚本启动,vim 创建 start.sh ...

  7. TensorFlow 实战(三)—— 实现常见公式

    tf.reduce_mean (求向量的均值)等价于 1N∑i=1Nxi 1. 对权值矩阵进行 l2 正则 def variable_with_weight_loss(shape, stddev, w ...

  8. 利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统

    原文:利用WPF建立自己的3d gis软件(非axhost方式)(十一)SDK中的动画系统 先下载SDK:https://pan.baidu.com/s/1M9kBS6ouUwLfrt0zV0bPew ...

  9. Windows下JDK开发环境搭建及环境变量配置

    1.下载并安装Java开发工具包(JDK) 下载地址: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2 ...

  10. uml 类图依赖与关联的区别

    类与类之间由弱到强关系是:    没关系 < 依赖 < 关联 < 聚合 < 组合. 1.依赖(dependency) 可以简单的理解,就是一个类A使用到了另一个类B,而这种使用 ...