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)

Reply via email to