イベントの生成に ruby kafka クライアント ライブラリを使用したかったのですが、解決方法がわからない問題に直面しました。どんな助けでも大歓迎です。
kafka-rb (acrosa、mheffner、および bpot フォーク) を使用してみました。問題は、ライブラリ経由で何を送信しても、たとえば
require 'kafka'
host = 'localhost'
port = 9092
producer = Kafka::Producer.new(
:topic => 'login',
:host => host,
:port => port
)
producer.send([Kafka::Message.new("aaaaa")])
私は得る:
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)
サーバー上。同じサーバーで、提供されたコンソール プロデューサーを介して問題なくテキストを送信できます。
以前にこれを見たことがあれば、助けていただければ幸いです。私は Scala にあまり詳しくないので、何が問題なのかわかりませんが、この例外がスローされる行は、ソケットからの clientId の読み取りに関係しているように思えます。 ruby クライアントから送られてくるようなものはありません。
tcpdumpフォームkafka-rbと提供されたプロデューサーで生成されたメッセージを見ると。ルビーの方が短く見えます。さらに、kafka-0.7 と 0.8 のどちらを使用しても問題ありません。まったく同じ動作が得られます。