私は、confluent.io kafkaパッケージを使用してavroメッセージを含むカフカストリームを持っています。これはJavaアプリケーションにとってうまくいきます。しかし、私は今、これらのメッセージをjavascriptで読み込もうとしています。範囲外のインデックスthis.buf.utf8Slice
私はkafka-node + avscパッケージを使用して、スキーマを使用してバッファ配列から文字列にメッセージをデコードしようとしました。コンフルエントは、最初の5バイトをスキーマIDのマジックバイト(0)+ 4バイトとして置きます。
私はこれらのバイトを削除するためにスライスをスライスし、これをデコードするためにavscに送信しようとします。しかし、私はエラー
return this.buf.utf8Slice(pos, pos + len);
RangeError: out of range index at RangeError (native) at Tap.readString (C:\git\workflowapps\workItemsApp\node_modules\avsc\lib\utils.js:452:19) at StringType._read (C:\git\workflowapps\workItemsApp\node_modules\avsc\lib\types.js:612:58)
はまた、手動で、これは非UTF8文字の多くを残して、私はそのようにデータを失っていデコードしようとします。
サンプルコード:
consumer.on('message', function(message) {
var val = message.value.slice(4);
sails.log.info('val buffer', val, val.length);
sails.log.info('hex',val.toString('hex'));
var type = avro.parse({"type":"record",
"name":"StatusEvent",
"fields":[{"name":"ApplicationUUID","type":"string"},
{"name":"StatusUUID","type":"string"},
{"name":"Name","type":"string"},
{"name":"ChangedBy","type":"string"},
{"name":"ChangedByUUID","type":"string"},
{"name":"ChangedAt","type":"long"}]
});
var decodedValue = type.fromBuffer(val);
sails.log.info('Decoded', decodedValue);
});
スライスがゼロで開始したと思った。今は正確な損失エラーです。私はこれがスキーマでは長いと思います。それを文字列に変更すると、エラーは切り詰められたバッファに変わります。私はこのデータにヌルがないことを知っています。 – KnowHowSolutions
ロングとストリングの切り替えは機能しません。精度ロスエラーを修正するには、 "ビッグ整数"ライブラリを使用する必要があります。ここに手順があります:https://github.com/mtth/avsc/wiki/Advanced-usage#custom-long-types – mtth
これは基本的にこれは私がすでに知っていて、まだ解決していない別の問題を示しています。私はC#のダニがavroに来ている、私は本当にしたくない。最初に修正してください。お手伝いありがとう。 – KnowHowSolutions