Apache storm Java客户端库,用于从Storm Spout中读取Kestrel服务器队列

Apache storm Java客户端库,用于从Storm Spout中读取Kestrel服务器队列,apache-storm,kestrel,Apache Storm,Kestrel,我已经安装了Kestrel服务器,能够通过python库设置和使用队列 我们有一个场景,python客户端写入Kestrel队列,而Storm spout需要从队列中读取数据。 我尝试过使用storm kestrel库,但遇到了问题。谷歌似乎暗示它不支持memcache端口(22133) 我已经添加了提供的maven绑定。没有使用Kestrel Riftspoot喷口,而是使用Kestrel.Client。编译很好,但我在运行时得到java.lang.NoClassDefFoundError错误

我已经安装了Kestrel服务器,能够通过python库设置和使用队列

我们有一个场景,python客户端写入Kestrel队列,而Storm spout需要从队列中读取数据。 我尝试过使用storm kestrel库,但遇到了问题。谷歌似乎暗示它不支持memcache端口(22133)

我已经添加了提供的maven绑定。没有使用Kestrel Riftspoot喷口,而是使用Kestrel.Client。编译很好,但我在运行时得到java.lang.NoClassDefFoundError错误

堆栈跟踪

1098 [main] ERROR org.apache.zookeeper.server.NIOServerCnxn  - Thread Thread[main,5,main] died
java.lang.NoClassDefFoundError: Lnet/lag/kestrel/thrift/Kestrel$Client;
    at java.lang.Class.getDeclaredFields0(Native Method)
    at java.lang.Class.privateGetDeclaredFields(Class.java:2397)
    at java.lang.Class.getDeclaredField(Class.java:1946)
    at java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1659)
    at java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:72)
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:480)
    at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:468)
    at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1133)
    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
    at backtype.storm.utils.Utils.serialize(Utils.java:52)
    at backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:94)
    at com.rr.storm.ArticleTolopolgy.main(ArticleTolopolgy.java:35)
Caused by: java.lang.ClassNotFoundException: net.lag.kestrel.thrift.Kestrel$Client
    at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
    ... 15 more
1098[main]错误org.apache.zookeeper.server.NIOServerCnxn-线程[main,5,main]已死亡
NoClassDefFoundError:Lnet/lag/kestrel/thrift/kestrel$Client;
位于java.lang.Class.getDeclaredFields0(本机方法)
位于java.lang.Class.privateGetDeclaredFields(Class.java:2397)
位于java.lang.Class.getDeclaredField(Class.java:1946)
位于java.io.ObjectStreamClass.getDeclaredSUID(ObjectStreamClass.java:1659)
在java.io.ObjectStreamClass.access$700(ObjectStreamClass.java:72)
位于java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:480)
在java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:468)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.io.ObjectStreamClass。(ObjectStreamClass.java:468)
位于java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:365)
位于java.io.ObjectOutputStream.WriteObject 0(ObjectOutputStream.java:1133)
位于java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:347)
在backtype.storm.utils.utils.serialize(utils.java:52)中
位于backtype.storm.topology.TopologyBuilder.createTopology(TopologyBuilder.java:94)
在com.rr.storm.ArticleTolopolgy.main(ArticleTolopolgy.java:35)
原因:java.lang.ClassNotFoundException:net.lag.kestrel.thrift.kestrel$Client
在java.net.URLClassLoader$1.run(URLClassLoader.java:366)
在java.net.URLClassLoader$1.run(URLClassLoader.java:355)
位于java.security.AccessController.doPrivileged(本机方法)
位于java.net.URLClassLoader.findClass(URLClassLoader.java:354)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:425)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 还有15个
是否有人可以确认风暴红隼是否可以或不能在这种情况下使用


如果没有,是否建议在风暴喷口内使用另一个kestrel客户端库从kestrel队列读取数据?

很抱歉更新太晚

  • 之所以出现java.lang.NoClassDefFoundError,是因为某些JAR不在类路径中。涉及到几个依赖项,因此我们通过将所有依赖项打包到一个JAR中来解决这个问题。有几个依赖冲突需要解决,特别是一个涉及AWS SQS和storm的严重冲突,具体取决于不同的httpclient库。发布时需要将AWS SQS Java SDK版本降级至1.4.7,而不是最新的1.7.2

  • 看起来这个库不再适用于kestrel服务器,但是如果理解错误,其他人可以纠正

  • 用于Python客户端,效果非常好

  • 用于Java kestrel客户端(Storm Spoute),效果非常好

  • 由于冲突,使用了用于AWS SQS的Java SDK,效果非常好


请发布您收到的错误消息,以及您如何配置喷口以读取Kestrel的信息?我已按照此处指定的方式将绑定添加到maven:。它编译得很好,但在运行时会出现可怕的Java NoClassDefFound错误。我刚接触storm和Java,所以故障排除很困难。说真的,没有stacktraces(合理的),我帮不了你,你的配偶会在我回去工作的时候添加这些。我想你是说风暴红隼库适用于这个场景,这只是我这边的一个错误?谢谢凯龙。我们通过节俭使用风暴红隼0.7.2-SNAPSHOT和红隼2.4.1,没有问题。谢谢安吉洛。应该更清楚。我正在寻找memcached客户端,但无法使其工作。