2013-02-07 33 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

相關問題