storm-sql-kafka问题情况
首先上官方文档:http://storm.apache.org/releases/1.2.2/storm-sql.html
解决的问题
1、kafka版本不对
开始测试时采用storm1.2.2+kafka2.0.1的组合进行测试,测试过程完全按照官方文档所写进行。出现了kafka无法获取scala依赖的问题,经查找发现是storm-kafka采用的是2.10版本的scala,而kafka2.0.1采用的是2.11或者2.12,无法兼容。于是只能换回kafka0.8.2.2进行测试。
2、storm找不到依赖
按照官方文档所写的提交命令无法找到storm-sql-runtime,所以需要加入storm-sql相关依赖包,任务提交命令如下:
./bin/storm sql /softwares/storm-1.2./storm-sql.sql stormsql1 --artifacts "org.apache.storm:storm-sql-kafka:1.2.2,org.apache.storm:storm-kafka:1.2.2,org.apache.kafka:kafka_2.10:0.8.2.2^org.slf4j:slf4j-log4j12,org.apache.kafka:kafka-clients:0.8.2.2,org.apache.storm:storm-sql-runtime:1.2.2,org.apache.storm:storm-sql-core:1.2.2"
遇到的问题
任务提交成功,但是bolt执行总是失败。
此问题无法直接解决,并且在UI上无法找到日志。
排除过程如下:首先去日志里看看:
less logs/workers-artifacts/stormsql1--//worker.log
发现:
-- ::03.992 o.a.s.t.t.s.TransactionalState Thread--$spoutcoord-spout-TRIDENTSTREAMSCANREL_21_0-executor[ ] [WARN] Failed to deserialize zookeeper data for path /meta/
org.apache.storm.shade.org.json.simple.parser.ParseException: null
at org.apache.storm.shade.org.json.simple.parser.Yylex.yylex(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.shade.org.json.simple.parser.JSONParser.nextToken(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.shade.org.json.simple.parser.JSONParser.parse(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.shade.org.json.simple.parser.JSONParser.parse(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.shade.org.json.simple.parser.JSONParser.parse(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.shade.org.json.simple.JSONValue.parseWithException(Unknown Source) ~[storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.state.TransactionalState.getData(TransactionalState.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.state.RotatingTransactionalState.sync(RotatingTransactionalState.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.state.RotatingTransactionalState.<init>(RotatingTransactionalState.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.spout.TridentSpoutCoordinator.prepare(TridentSpoutCoordinator.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.topology.BasicBoltExecutor.prepare(BasicBoltExecutor.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.daemon.executor$fn__10795$fn__10808.invoke(executor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.util$async_loop$fn__553.invoke(util.clj:) [storm-core-1.2..jar:1.2.]
at clojure.lang.AFn.run(AFn.java:) [clojure-1.7..jar:?]
at java.lang.Thread.run(Thread.java:) [?:1.8.0_131]
-- ::03.997 o.a.s.d.executor Thread--$spoutcoord-spout-TRIDENTSTREAMSCANREL_21_0-executor[ ] [INFO] Prepared bolt $spoutcoord-spout-TRIDENTSTREAMSCANREL_21_0:()
-- ::04.550 o.a.s.k.t.TridentKafkaState Thread--b--executor[ ] [WARN] Could not send messages [[null, null], [null, null], [null, null]] to topic = testout
java.lang.NullPointerException: null
at org.apache.storm.kafka.IntSerializer.serialize(IntSerializer.java:) ~[dep-org.apache.storm-storm-kafka-jar-1.2..jar.:1.2.]
at org.apache.storm.kafka.IntSerializer.serialize(IntSerializer.java:) ~[dep-org.apache.storm-storm-kafka-jar-1.2..jar.:1.2.]
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:) ~[dep-org.apache.kafka-kafka-clients-jar-0.8.2.2.jar.:?]
at org.apache.kafka.clients.producer.KafkaProducer.send(KafkaProducer.java:) ~[dep-org.apache.kafka-kafka-clients-jar-0.8.2.2.jar.:?]
at org.apache.storm.kafka.trident.TridentKafkaState.updateState(TridentKafkaState.java:) [dep-org.apache.storm-storm-kafka-jar-1.2..jar.:1.2.]
at org.apache.storm.kafka.trident.TridentKafkaUpdater.updateState(TridentKafkaUpdater.java:) [dep-org.apache.storm-storm-kafka-jar-1.2..jar.:1.2.]
at org.apache.storm.kafka.trident.TridentKafkaUpdater.updateState(TridentKafkaUpdater.java:) [dep-org.apache.storm-storm-kafka-jar-1.2..jar.:1.2.]
at org.apache.storm.trident.planner.processor.PartitionPersistProcessor.finishBatch(PartitionPersistProcessor.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.planner.SubtopologyBolt.finishBatch(SubtopologyBolt.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.TridentBoltExecutor.finishBatch(TridentBoltExecutor.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.TridentBoltExecutor.checkFinish(TridentBoltExecutor.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.trident.topology.TridentBoltExecutor.execute(TridentBoltExecutor.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.daemon.executor$fn__10795$tuple_action_fn__10797.invoke(executor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.daemon.executor$mk_task_receiver$fn__10716.invoke(executor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.disruptor$clojure_handler$reify__10135.onEvent(disruptor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.utils.DisruptorQueue.consumeBatchToCursor(DisruptorQueue.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.utils.DisruptorQueue.consumeBatchWhenAvailable(DisruptorQueue.java:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.disruptor$consume_batch_when_available.invoke(disruptor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.daemon.executor$fn__10795$fn__10808$fn__10861.invoke(executor.clj:) [storm-core-1.2..jar:1.2.]
at org.apache.storm.util$async_loop$fn__553.invoke(util.clj:) [storm-core-1.2..jar:1.2.]
at clojure.lang.AFn.run(AFn.java:) [clojure-1.7..jar:?]
at java.lang.Thread.run(Thread.java:) [?:1.8.0_131]
接下来分为两步,其一是查找/meta/1这个目录在zookeeper的哪里,另一个是查找报错的源码在哪里,根据storm源码可以看到:
public Object getData(String path) {
path = "/" + path;
try {
Object data;
if (_curator.checkExists().forPath(path) != null) {
// Use parseWithException instead of parse so we can capture deserialization errors in the log.
// They are likely to be bugs in the spout code.
try {
data = JSONValue.parseWithException(new String(_curator.getData().forPath(path), "UTF-8"));
} catch (ParseException e) {
LOG.warn("Failed to deserialize zookeeper data for path {}", path, e);
data = null;
}
} else {
data = null;
}
LOG.debug("Get. [path = {}] => [data = {}]", path, data);
return data;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
可以看到报错的是JSONValue.parseWithException出错。获取数据是解析一个json,并放到data里,而通过判断条件我们可以知道path是有内容的,只不过读不出来。
通过查询源码找到/meta/1的完整路径为:/transactional/....../meta/1,去此路径下找到对应的文件为:/transactional/TRIDENTSTREAMSCANREL_21_0/coordinator/meta/1
获取此文件信息:get /transactional/TRIDENTSTREAMSCANREL_21_0/coordinator/meta/1
[GlobalPartitionInformation{topic=testin, partitionMap={=cloud22:, =cloud22:, =cloud22:, =cloud22:, =cloud22:}}]
cZxid = 0xf02f
ctime = Thu Nov :: CST
mZxid = 0x45a9b
mtime = Thu Nov :: CST
pZxid = 0xf02f
cversion =
dataVersion =
aclVersion =
ephemeralOwner = 0x0
dataLength =
numChildren =
可以发现,emmm...这一段信息看格式应该是通过toString写出来的,但是读却是用json格式读。代码鬼才,我觉得不行。
结论:storm-sql-kafka基本不可用,至少未找到解决方案,从错误来看,zookeeper中写kafka partitions meta的代码和读的代码完全无法匹配上。在不修改源码的前提下无法解决此问题。
storm-sql-kafka问题情况的更多相关文章
- Storm集成Kafka应用的开发
我们知道storm的作用主要是进行流式计算,对于源源不断的均匀数据流流入处理是非常有效的,而现实生活中大部分场景并不是均匀的数据流,而是时而多时而少的数据流入,这种情况下显然用批量处理是不合适的,如果 ...
- storm集成kafka
kafkautil: import java.util.Properties; import kafka.javaapi.producer.Producer; import kafka.produce ...
- 2018.5.12 storm数据源kafka堆积
问题现象: storm代码依赖4个源数据topic,2018.5.12上午8点左右开始收到告警短信,源头的4个topic数据严重堆积. 排查: 1.查看stormUI, storm拓扑结构如下: 看现 ...
- storm集成kafka的应用,从kafka读取,写入kafka
storm集成kafka的应用,从kafka读取,写入kafka by 小闪电 0前言 storm的主要作用是进行流式的实时计算,对于一直产生的数据流处理是非常迅速的,然而大部分数据并不是均匀的数据流 ...
- Storm sql 简单测试
准备工作: 1.安装Kafka,启动,以及创建相应的topic 1.启动kafka bin/kafka-server-start.sh config/server.properties > /d ...
- Storm 学习之路(九)—— Storm集成Kafka
一.整合说明 Storm官方对Kafka的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对0.8.x版本的Kafka提供整合支持: Storm ...
- Storm 系列(九)—— Storm 集成 Kafka
一.整合说明 Storm 官方对 Kafka 的整合分为两个版本,官方说明文档分别如下: Storm Kafka Integration : 主要是针对 0.8.x 版本的 Kafka 提供整合支持: ...
- Storm消费Kafka提交集群运行
1.创建拓扑,配置KafkaSpout.Bolt KafkaTopologyBasic.java: package org.mort.storm.kafka; import org.apache.ka ...
- Spark Streaming,Flink,Storm,Kafka Streams,Samza:如何选择流处理框架
根据最新的统计显示,仅在过去的两年中,当今世界上90%的数据都是在新产生的,每天创建2.5万亿字节的数据,并且随着新设备,传感器和技术的出现,数据增长速度可能会进一步加快. 从技术上讲,这意味着我们的 ...
- storm消费kafka实现实时计算
大致架构 * 每个应用实例部署一个日志agent * agent实时将日志发送到kafka * storm实时计算日志 * storm计算结果保存到hbase storm消费kafka 创建实时计算项 ...
随机推荐
- JS对象2
1.Date对象 创建对象 //方法1:不指定参数 var nowd1=new Date(); alert(nowd1.toLocaleString( )); //方法2:参数为日期字符串 var n ...
- [LeetCode] Flatten a Multilevel Doubly Linked List 压平一个多层的双向链表
You are given a doubly linked list which in addition to the next and previous pointers, it could hav ...
- wf 2017A
给一个多边形,问能放进去的最长的线段的长度. 我调了两个小时结果加了inline就过???什么东西啊.2000+MS->890MS 真实自闭啊. dls寒假已经讲的很清楚了(别问我为什么现在才做 ...
- PDF的水印怎么去掉
很多朋友私下都有问过PDF去除水印的方法,现在在网上下载一些PDF电子书,几乎页面内都会有水印的,而且有的水印还带有超链接,稍微不注意就会点开进入别的页面内,不仅影响了阅读效果还带给读者负面影响,那如 ...
- Spark入门到精通--(第十节)环境搭建(ZooKeeper和kafka搭建)
上一节搭建完了Hive,这一节我们来搭建ZooKeeper,主要是后面的kafka需要运行在上面. ZooKeeper下载和安装 下载ZooKeeper 3.4.5软件包,可以在百度网盘进行下载.链接 ...
- KMP初步
KMP算法专门用于处理字符串匹配问题. 开始学习的时候觉得很有道理,但是一些细节总觉得有些模糊,所以一直觉得懵懵懂懂.今天思考了一下,总结一下,希望对大家也有帮助. 朴素的字符串匹配算法就是一个一个字 ...
- Java面试题和解答(一)
1.说说JVM原理?内存泄露与溢出区别,何时产生内存泄露? JVM原理 :http://www.cnblogs.com/jiayi/archive/2010/06/08/1753863.html 内存 ...
- vs code代码对齐快捷键
vscode缩进快捷键: 选中文本: Ctrl + [ 和 Ctrl + ] 实现文本的向左移动或者向右移动: vscode代码对齐快捷键: 选中文本: Shift + ...
- btcpool之BlockMaker
一.简介 BlockServer将StratumServer发送的solvedshare数据(块头和coinbase交易)与GbtMaker发送的rawgbt数据(其他交易)一起组装成一个块,然后通过 ...
- 牛客(web 1)
bootstrap(Web框架) 有关换行的知识: http://www.cnblogs.com/wqsbk/p/3493948.html 关于link加载问题: link是同时加载的,script标 ...