Xavier Léauté created KAFKA-5150:
------------------------------------
Summary: LZ4 decompression is 4-5x slower than Snappy on small
batches / messages
Key: KAFKA-5150
URL: https://issues.apache.org/jira/browse/KAFKA-5150
Project: Kafka
Issue Type: Bug
Components: consumer
Affects Versions: 0.10.2.0
Reporter: Xavier Léauté
Assignee: Xavier Léauté
I benchmarked RecordsIteratorDeepRecordsIterator instantiation on small batch
sizes with small messages after observing some performance bottlenecks in the
consumer.
For batch sizes of 1 with messages of 100 bytes, LZ4 heavily underperforms
compared to Snappy (see benchmark below). Most of our time is currently spent
allocating memory blocks in KafkaLZ4BlockInputStream, due to the fact that we
default to larger 64kB block sizes. Some quick testing shows we could improve
performance by almost an order of magnitude for small batches and messages if
we re-used buffers between instantiations of the input stream.
[Benchmark
Code|https://github.com/xvrl/kafka/blob/small-batch-lz4-benchmark/clients/src/test/java/org/apache/kafka/common/record/DeepRecordsIteratorBenchmark.java#L86]
{code}
Benchmark (compressionType)
(messageSize) Mode Cnt Score Error Units
DeepRecordsIteratorBenchmark.measureSingleMessage LZ4
100 thrpt 20 84802.279 ± 1983.847 ops/s
DeepRecordsIteratorBenchmark.measureSingleMessage SNAPPY
100 thrpt 20 407585.747 ± 9877.073 ops/s
DeepRecordsIteratorBenchmark.measureSingleMessage NONE
100 thrpt 20 579141.634 ± 18482.093 ops/s
{code}
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)