前言
Storm到1版本后发送了很大的变化,很多api都有很多改变。然而网络上的多数教程都是旧版本的api。
导致了这一部分的编程花了我非常非常多的时间阅读官方文档的github上的程序。
而且某些错误是真的难debug。
本文只写一个简单的读取kafka消息的demo
因为编程是简单的,麻烦的是编程之外的细节。
至于编程的问题可以参考官方在github上的example
在storm目录里面也能找到example
环境
Ubuntu18.04
Storm1.2.2
Kafka2.1.1
Zookeeper3.4.13
运行框架
开启zookeeper
开启kafka的broker
开启storm nimbus
开启storm supervisor
开启storm ui
导包
网络环境好可以用maven
但其实所要的jar包基本都放在lib目录下了。
另外需要载下strom-kafka-client.jar和strom-starter.jar
可以去maven官网下
编程
首先声明一个TopologyBuilder
TopologyBuilder tp = new TopologyBuilder();
设置spout和bolt
topologybuilder.setSpout("kafka_spout", new KafkaSpout<>(KafkaSpoutConfig.builder("127.0.0.1:9092", "test").build()), 1);
topologybuilder.setBolt("bolt", new myBolt()).shuffleGrouping("kafka_spout");
如果向更加详细的设置spout
写一个方法生成KafkaSpoutConfig
private static KafkaSpoutConfig<String,String> newKafkaSpoutConfig(String topic) {
ByTopicRecordTranslator<String, String> trans = new ByTopicRecordTranslator<>(
(r) -> new Values(r.topic(), r.partition(), r.offset(), r.key(), r.value()),
new Fields("topic", "partition", "offset", "key", "value"), "stream1");
//bootstrapServer 以及topic
return KafkaSpoutConfig.builder(IPUtil.getUbuntu1()+":9092", topic)
.setProp(ConsumerConfig.GROUP_ID_CONFIG, "kafkaSpoutTestGroup_" + System.nanoTim