storm如何集成kafka
来源:互联网 发布:太阳能发电 知乎 编辑:程序博客网 时间:2024/05/17 01:58
之前的kafka案例:http://blog.csdn.net/weixin_35757704/article/details/77196539
之前的storm案例:http://blog.csdn.net/weixin_35757704/article/details/77246313
首先要提醒:导包的时候要注意导入正确的包,如果出现强制类型转换或是方法不存在,对于新手来说多半是导包导错了
kafka与storm各自的模块了解之后,就要开始集成了.他们都要拿出自己的一部分东西:
- storm拿出spout给kafka,即数据源交给kafka
- kafka拿出自身的消费者,将消费者变为storm
那么,逻辑就很简单了,现在只需要在Spout类上动手脚就可以了.如果到这里不是很懂,建议参考头顶上的那两篇博客;
修改即可(在开头的storm案例里的代码的基础上进行修改)
直接更改代表着整个拓扑的Topology类就好:
import backtype.storm.Config;import backtype.storm.LocalCluster;import backtype.storm.StormSubmitter;import backtype.storm.spout.SchemeAsMultiScheme;import backtype.storm.topology.TopologyBuilder;import backtype.storm.tuple.Fields;import storm.kafka.*;public class TopologyWordCount { public static void main(String[] args) throws Exception { TopologyBuilder builder = new TopologyBuilder(); // BrokerHosts接口有2个实现类StaticHosts和ZkHosts,ZkHosts会定时(默认60秒)从ZK中更新brokers的信息,StaticHosts是则不会 // 要注意这里的第二个参数brokerZkPath要和kafka中的server.properties中配置的zookeeper.connect对应,没有专门配置就可以不填写,使用默认值 BrokerHosts brokerHosts = new ZkHosts("192.168.0.171:2181," + "192.168.0.207:2181," + "192.168.0.204:2181"); // 定义spoutConfig // 第一个参数hosts是上面定义的brokerHosts // 第二个参数topic是该Spout订阅的topic名称,需要提前创建这个topic // 第三个参数zkRoot是存储消费的offset(存储在zookeeper中了),也就是当这个Topology遇到故障重启后会将故障期间未消费的message继续消费而不会丢失(可不配置) // 第四个参数id是当前spout的唯一标识,当存在多个spout时,id不能冲突 SpoutConfig spoutConfig = new SpoutConfig(brokerHosts, "shuaige33333", "", "0"); // 定义kafkaSpout如何解析数据,这里是将kafka的producer send的数据放入到String // 类型的str变量中输出,这个str是StringSchema定义的变量名称 /*通过字符串的方式解析数据*/ spoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme()); /*开始拓扑套路*/ builder.setSpout("kafkaSpout", new KafkaSpout(spoutConfig)); /*kafka 的spout*/ builder.setBolt("WordSplitBolt", new WordSplitBolt()).shuffleGrouping("kafkaSpout"); /*WordCountBolt获得从WordSplitBolt中传递过来的单词并统计词频*/ builder.setBolt("WordCountBolt", new WordCountBolt()).fieldsGrouping("WordSplitBolt", new Fields("word")); // 本地运行或者提交到集群 if (args != null && args.length == 1) { // 集群运行 StormSubmitter.submitTopology(args[0], new Config(), builder.createTopology()); } else { // 本地运行 LocalCluster cluster = new LocalCluster(); cluster.submitTopology("local", new Config(), builder.createTopology()); Thread.sleep(10000000); cluster.shutdown(); } }}
只需要更改TopologyWordCount,就可以将storm集成kafka,将storm作为kafka的消费者,之后的那些逻辑就可以自己来写了.
注意这里:
builder.setSpout("kafkaSpout", new KafkaSpout(spoutConfig));
这里的KafkaSpout 是官方的Spout,在下一个bolt进行数据的提取时,要使用的方法是:public void execute(Tuple input, BasicOutputCollector basicOutputCollector) { String line = input.getStringByField("str");//得到进入kafka的字符串 for (String word : line.split(" ")) { basicOutputCollector.emit(new Values(word)); } }
然后就可以测试了:
整体思路:
先把向kafka发送数据的那个类写好(看头顶第一篇博客),然后再练习storm(第二篇博客),然后更改掉Topology类与Spout类就好
阅读全文
0 0
- storm如何集成kafka
- 【storm kafka】storm kafka集成
- storm kafka集成
- Chap4:Storm集成Kafka
- Storm+Kafka集成
- Storm与Kafka集成
- storm集成kafka
- storm-kafka 的集成
- Storm集成Kafka
- storm集成kafka实例
- kafka与storm集成
- Storm集成Kafka数据源
- Storm集成Kafka编程模型
- storm+kafka集成简单应用
- Storm学习笔记-集成Kafka
- Storm集成Kafka编程模型
- Storm(七)Storm Kafka集成
- Storm——Storm集成kafka
- MindManager历史课堂:两汉历史
- Android 开发中 Intent 和 Intent 过滤器学习笔记
- package.json文件
- Nginx安装的前期准备工作
- 好老师
- storm如何集成kafka
- 原生H5调用摄像头
- php 经典算法
- 用sysbench压测MySQL,通过orzdba监控MySQL
- list
- arcgis for iOS10.2.5 地图加载
- mysql的timezone问题
- Android中fragment构造函数使用所报的一些错Avoid non-default constructors in fragments
- 初入职场的小白