2013-02-07 26 views
3

我想使用ruby kafka客户端库来生成事件,但遇到了一个我不确定如何解决的问题。任何帮助,将不胜感激。Ruby Kafka Producer BufferUnderflow

我尝试过使用kafka-rb(acrosa,mheffner和bpot分叉)。问题是不管我通过图书馆发送给我的东西,例如在服务器上

java.nio.BufferUnderflowException 
    at java.nio.HeapByteBuffer.get(HeapByteBuffer.java:127) 
    at java.nio.ByteBuffer.get(ByteBuffer.java:675) 
    at kafka.api.ApiUtils$.readShortString(ApiUtils.scala:22) 
    at kafka.api.ProducerRequest$.readFrom(ProducerRequest.scala:34) 
    at kafka.api.RequestKeys$$anonfun$1.apply(RequestKeys.scala:34) 
    at kafka.api.RequestKeys$$anonfun$1.apply(RequestKeys.scala:34) 
    at kafka.network.RequestChannel$Request.<init>(RequestChannel.scala:48) 
    at kafka.network.Processor.read(SocketServer.scala:321) 
    at kafka.network.Processor.run(SocketServer.scala:231) 
    at java.lang.Thread.run(Thread.java:680) 

require 'kafka' 
host = 'localhost' 
port = 9092 
producer = Kafka::Producer.new(

     :topic => 'login', 
     :host => host, 
     :port => port 
) 
producer.send([Kafka::Message.new("aaaaa")]) 

,我收到了。在同一台服务器上,我可以通过提供的控制台生产者发送文本,而不会有任何问题

如果你之前看过这个,我会很感激的帮助。因为我对Scala不是很熟悉,所以我不确定问题是什么,但在我看来,引发此异常的行与从套接字读取clientId有关,而且对我来说也是如此没有这样的事情从红宝石客户端发送。

当我看到在tcpdump表单kafka-rb和提供的生产者生成的消息。红宝石似乎更短。 此外,无论我使用kafka-0.7还是0.8,我都会得到完全相同的行为。

+0

事实证明,我是用我所有的尝试作为卡夫卡-RB 0.8不支持0.7格式,感谢您的帮助 – tarzan

回答

1

我可以重现你的错误与卡夫卡0.8,但是当我尝试这样实现:

require 'rubygems' 
require 'kafka' 
producer = Kafka::Producer.new({ :host => "localhost", :port => 9092, :topic => "test" , :compression => 0 }) 
message = Kafka::Message.new("some random message content") 
producer.send(message) 

它与卡夫卡0.7:

consumer example

根据卡夫卡的文件,客户端你上述仅支持0.7.x(https://cwiki.apache.org/KAFKA/clients.html#Clients-Ruby)。 0.8节说:

0.8发布改变协议相当大。该版本尚未发布。新协议记录在这里。一些客户正在进行中,我们会在完成后进行更新。

所以我觉得https://github.com/acrosa/kafka-rb不会在这种情况下工作:-(。

最佳

+0

看起来好像我试图用0.8的kafka-rb,即使当我以为我正在使用它0.7(它的工作原理),谢谢 – tarzan

+0

请注意,Zookeeper中内置的工作在0.7 – cevaris

相关问题