Ecco un esempio di ciò che stiamo facendo per un caso di utilizzo simile in cui inviamo i record Avro in un'altra coda (Amazon Kinesis), adattata al tuo schema. Lo stiamo usando con node-avro-io 0.2.0 e 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();
Gli esempi per il nodo-avro-io, al momento della scrittura, sono per la serializzazione/deserializzazione file Avro sul filesystem. Questo esempio utilizza il pacchetto stream-to-array come collegamento per ottenere un Buffer
dal pacchetto node-avro-io basato sul flusso. Buffer
può essere inviato alla tua coda come messaggio nel tuo produttore Kafka.
Alcuni altri pacchetti node.js, come l'avronode e Collective's node-avro, sono wrapper per la libreria C++. Non ho avuto tanto successo con questi pacchetti. Ecco un tl: dr per le istruzioni di installazione della libreria Avro C++ di node-avro (creazione di un pacchetto .deb per esso). Può essere d'aiuto con qualsiasi pacchetto di wrapper 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
Per il nodo-avro Collective, ho dovuto rimuovere la riga export CXXFLAGS="-fcxx-exceptions"
dallo script bin/install-and-run-tests
su Ubuntu 14.04.
Brillante. Proprio quello di cui avevo bisogno. Grazie! – N3da