Oto przykład tego, co robimy dla podobnego zastosowania, w którym wysyłamy rekordy Avro do innej kolejki (Amazon Kinesis), dostosowanej do twojego schematu. Używamy go z node-avro-io 0.2.0 i stream-to-arry 2.0.2.
var avro = require('node-avro-io');
var toArray = require('stream-to-array');
var schema = {
"namespace": "com.company.wr.messages",
"type": "record",
"name": "Log",
"fields": [
{"name": "timestamp", "type": "long"},
{"name": "source", "type": "string"},
{"name": "version", "type": "string"},
{"name": "ipAddress", "type": "string"},
{"name": "name", "type": "string"},
{"name": "level", "type": "string"},
{"name": "errorCode", "type": "string"},
{"name": "message", "type": "string"}
]
};
var writer = new avro.DataFile.Writer(schema, "snappy");
toArray(writer, function(err, arr) {
var dataBuffer = Buffer.concat(arr);
// Send dataBuffer to Kafka here
});
var record = {
"timestamp": 123,
"source": "example.com",
"version": "HTTP 1.1",
"ipAddress": "123.123.123.123",
"name": "Jim",
"level": "INFO",
"errorCode": "200",
"message": "foo"
};
writer.append(record).end();
Przykłady dla węzła-Avro-IO, w momencie pisania tego tekstu, są dla szeregowania/deserializacji Avro plików w systemie plików. W tym przykładzie użyto pakietu stream-to-array jako skrótu do pobrania Buffer
z pakietu node-avro-io opartego na strumieniu. Buffer
może zostać wysłany do twojej kolejki jako wiadomość w twoim producencie Kafki.
Niektóre inne pakiety node.js, takie jak avronode i Collective's node-avro, są owijkami dla biblioteki C++. Nie miałem tak dużego sukcesu z tymi pakietami. Oto tl: dr instrukcji instalacji biblioteki Avro C++ przez node-avro (budowanie dla niej pakietu .deb). Może pomóc w każdym opakowaniu C++.
sudo apt-get install -y libboost-all-dev cmake checkinstall
ssh clone [email protected]:apache/avro.git
cd avro
git checkout release-1.7.7
cd lang/c++
cmake -G "Unix Makefiles"
sudo checkinstall -y \
--install=no \
--pkgname="avro-cpp" \
--pkgrelease="1.7.7" \
--maintainer="[email protected]" \
--addso=yes
zbiorowego za węzła-Avro, musiałem usunąć wiersz export CXXFLAGS="-fcxx-exceptions"
ze skryptu bin/install-and-run-tests
na Ubuntu 14.04.
Brilliant. Dokładnie to, czego potrzebowałem. Dziękuję Ci! – N3da