frsyuki
Fuentd provides "buffer_type file" to buffer records on disk. Shutting down won't loose data. If you need to choose memory buffer for performance reasons, fluentd enables "flush_at_shutdown" option by default.
You would also want to use <secondary> feature. This lets you to write a buffer chunk to another storage if the primary destination is not available "retry_limit" times.
Those concerns would be solved by the document: http://docs.fluentd.org/articles/out_forward#buffered-output...
Fluentd vs. Logstash
An important point we should consider here is that actual performance depends on implementation.
MessagePack for Ruby version 5
Verelo + PagerDuty: New integration is live
Understanding the Book-Crossing Dataset: Setup
As for strings, JSON has to allocate memory and copy to deserialize strings because strings are escaped.
MessagePack does't have to allocate/copy because the serialized format of strings is same as the format in memory. But it depends on the implementation whether actually it doesn't allocate/copy.
C++ and Ruby implementations try to suppress allocation and copying (zero-copy). But Java implementation doesn't support zero-copy feature so far (we have plan to do so. Here is "TODO" comment: https://github.com/msgpack/msgpack-java/blob/master/src/main...).
As for the other types, C++ implementation (and new Ruby implementation which is under development) has memory pool which optimizes those memory allocations petterns. But it's hard to implement such optimizations for Java because JVM (and Dalvik VM) doesn't allow to hook object allocation.
Compared with other serialization libraries such as Protocol Buffers, Avro or BSON, one of the advantages of MessagePack is compatibility with JSON. (In spite of its name, BSON has special types which cause incompatibility with JSON)
It means we can exchange objects sent from browsers (in JSON format) between servers written in different languages without losing information.
I will not use MessagePack with browsers but it's still useful to use it with web applications.
So far, MessagePack for Java, C++ and D implement the concept.
A major use case of MessagePack is to store serialized objects in memcached. A blog post written by Pinterest describes this use case (http://engineering.pinterest.com/posts/2012/memcache-games/). They use MessagePack with Python which is faster than one with JavaScript. They could store more objects in a server without performance declination (e.g. gzip).
It's true that MessagePack is not always faster than JSON (e.g. within browsers), and it's not always smaller than other serialization methods (e.g. with gzip compression). So we should consider that which serialization methods should I use for "my" case.
There are also general tendency which is helpful to select MessagePack or JSON:
MessagePack is faster to serialize binary data such as thumbnail images.
MessagePack is better to reduce overheads to exchange small objects between servers.
JSON is better to use it with browsers.My thoughts on MessagePack
JSX - a faster, safer, easier alternative to JavaScript
Fluentd deals with JSON-based logs. JSON is good for human facing interface because it is human readable and GREPable.
On the other side, Fluentd handles logs in MessagePack format internally. Msgpack is a serialization format compatible with JSON and can be an efficient replacement of JSON.
I wrote plugin for Fluentd that send those structured logs to Librato Metrics (https://metrics.librato.com/) which provides charting and dashboard features.
With Fluentd, our logs became program-friendly as well as human-firnedly.
You can simply replace JSON with MessagePack since MessagePack is compatible with JSON.
[1] Why Not MessagePack? http://blog.andrewvc.com/why-arent-you-using-messagepack
[2] Performant Entity Serialization: BSON vs MessagePack (vs JSON) http://stackoverflow.com/questions/6355497/performant-entity...
LINE Storage: Storing billions of rows in Sharded-Redis and HBase per Month
Enabling Facebook’s Log Infrastructure with Fluentd
Japan’s Rakuten Acquires UK E-commerce Site Play.com For $39.1 Million
Architectural Evolution: From Middleware to The Cloud
What Every Data Programmer Needs to Know About Disks
NextGen MapReduce Hits Apache Hadoop Mainline
Note that this is a characteristic of the implementation, not of the data format. Some libraries for JSON like JSONIC (Java) provides these APIs.
Since Protocol Buffers brings their original semantics, you must change lots of codes.
I wrote about the pros/cons of schema here: http://news.ycombinator.com/item?id=2836242
I've used MessagePack on iPhone 3GS for the format of a dictionary file (> 100MB). I utilized mmap and zero-copy deserialization feature of MessagePack. And I received (and merged) some patches sent by those who use it on iPhone4/iPad2.
I've never tried to run it on MIPS. But it probably works if you use gcc.
(I'm author of MessagePack)
CloudFS is now HekaFS
"Performant Entity Serialization: BSON vs MessagePack (vs JSON)" http://stackoverflow.com/questions/6355497/performant-entity...