Storm-Kafka 一分钟例子

作者: 大猪大猪 | 来源:发表于2018-06-09 14:52 被阅读38次

以下文章使用了kafka作为storm的sport数据源,依赖于docker-compose环境,如果自己本机已经有了zookeeperkafka环境则可以使用自己的环境。

使用教程

docker-compose.yml

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    image: wurstmeister/kafka
    ports:
      - "9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 192.168.1.186
      KAFKA_ZOOKEEPER_CONNECT: 192.168.1.186:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

build.gradle

dependencies {
    compile group: 'org.apache.storm', name: 'storm-core', version: '1.2.2'
    compile group: 'org.apache.storm', name: 'storm-kafka-client', version: '1.2.2'
}

Application.java

public class Application {
    public static void main(String[] args) throws Exception {
        KafkaSpoutConfig.Builder<String,String> kafkaBuild = KafkaSpoutConfig.builder("192.168.1.186:32770","test","test1","test2");
        kafkaBuild.setFirstPollOffsetStrategy(KafkaSpoutConfig.FirstPollOffsetStrategy.UNCOMMITTED_LATEST);
        kafkaBuild.setOffsetCommitPeriodMs(100);//设置多长时间向kafka提交一次offset
        kafkaBuild.setProp(ConsumerConfig.GROUP_ID_CONFIG,"testGroup");
        kafkaBuild.setProp(ConsumerConfig.SESSION_TIMEOUT_MS_CONFIG,1);
        kafkaBuild.setProp(ConsumerConfig.HEARTBEAT_INTERVAL_MS_CONFIG,0);
        KafkaSpoutConfig<String,String> build = kafkaBuild.build();
        KafkaSpout<String,String> kafkaSpout = new KafkaSpout<>(build);
        TopologyBuilder builder = new TopologyBuilder();
        builder.setSpout("kafkaSport",kafkaSpout,1);
        builder.setBolt("print-bolt",new PrintBolt(),1)
        .shuffleGrouping("kafkaSport");
        Config config = new Config();
        config.setNumWorkers(1);
        if(args.length==0){
            config.setDebug(true);
            LocalCluster localCluster = new LocalCluster();
            localCluster.submitTopology("test",config,builder.createTopology());
        }else{
            config.setDebug(false);
            StormSubmitter.submitTopology("test",config,builder.createTopology());
        }
    }
}

PrintBolt.java

public class PrintBolt extends BaseRichBolt {
    private OutputCollector collector;

    @Override
    public void declareOutputFields(OutputFieldsDeclarer declarer) {}

    @Override
    public void prepare(Map stormConf, TopologyContext context, OutputCollector collector) {
        this.collector = collector;
    }

    @Override
    public void execute(Tuple input) {
        String topic = input.getString(0);
        long messageOffet = input.getLong(2);
        String content = input.getString(4);
        System.out.println(content);
        collector.ack(input);
    }
}

往kafka发送一个消息

docker exec -ti 4f27fbb6655c bash /opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.1.186:32770 --topic test

输入消息回车即可看到程序输出

root@localhost /h/lake# docker exec -ti 4f27fbb6655c bash /opt/kafka/bin/kafka-console-producer.sh --broker-list 192.168.1.186:32770 --topic test
>hello world.
>

输出

...
312034 [Thread-20-print-bolt-executor[3 3]] INFO  o.a.s.d.executor - Processing received message FOR 3 TUPLE: source: kafkaSport:2, stream: default, id: {-3468855975737070311=-8649143164499739979}, [test, 0, 16, null, hello world.]
312034 [Thread-22-__acker-executor[1 1]] INFO  o.a.s.d.executor - Processing received message FOR 1 TUPLE: source: kafkaSport:2, stream: __ack_init, id: {}, [-3468855975737070311 -8649143164499739979 2]
hello world.
312034 [Thread-20-print-bolt-executor[3 3]] INFO  o.a.s.d.task - Emitting: print-bolt __ack_ack [-3468855975737070311 -8649143164499739979]
312034 [Thread-22-__acker-executor[1 1]] INFO  o.a.s.d.executor - BOLT ack TASK: 1 TIME: -1 TUPLE: source: kafkaSport:2, stream: __ack_init, id: {}, [-3468855975737070311 -8649143164499739979 2]
...

相关文章

  • Storm-Kafka 一分钟例子

    以下文章使用了kafka作为storm的sport数据源,依赖于docker-compose环境,如果自己本机已经...

  • Storm-kafka项目

    1.项目架构 1.生产数据发送到kafka,数据格式为:100 29448-000005 2021-01-1...

  • 对于外界,心态放好,偷偷厉害

    改变心态只需一分钟,而这一分钟却能改变一整天。——赫伯特斯宾赛 下面我给大家举两个例子: 故事1:有两个人在沙漠中...

  • 如何高效学习

    爱因斯坦在向众人解释相对论时,举了这样一个例子:“你坐在美女身边一小时,感觉就像一分钟,而夏天你坐在火炉旁一分钟,...

  • 王荣生

    一、学习策略 其实就是对不同文本阅读 能力。是心理学家研究来的。 例子:《一分钟》 预测,联结,提问,推断,图像,...

  • 例子

    # 开学了 - 一天 -二天 - 三天

  • 例子

    例子1 例子2 例子3 例子4 例子5 例子6 超链接 黑体 下面是代码块 下面是引用 引用

  • 例子

    莫言在《母亲》一文里写到了两处他在小时候不能理解,但影响深远的事情。第一处是: 愁容满面的母亲,在辛苦地劳作时,嘴...

  • 例子

    要求1,三个inputview同时有值的时候按钮可点击. 要求2,网络请求完成之后,才能再次点击. 传统实现,在t...

  • 例子

    红绿灯真的那么有必要吗? 书里提到,荷兰的一个交通规划师莫德尔曼观察到,当一个城市停电导致红绿灯失...

网友评论

    本文标题:Storm-Kafka 一分钟例子

    本文链接:https://www.haomeiwen.com/subject/dpmteftx.html