[ 
https://issues.apache.org/jira/browse/KAFKA-5150?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16028559#comment-16028559
 ] 

ASF GitHub Bot commented on KAFKA-5150:
---------------------------------------

GitHub user ijuma opened a pull request:

    https://github.com/apache/kafka/pull/3164

    KAFKA-5150: Reduce lz4 decompression overhead (without thread local buffers)

    Temporary PR that has additional changes over 
https://github.com/apache/kafka/pull/2967 for comparison.

You can merge this pull request into a Git repository by running:

    $ git pull https://github.com/ijuma/kafka 
kafka-5150-reduce-lz4-decompression-overhead

Alternatively you can review and apply these changes as the patch at:

    https://github.com/apache/kafka/pull/3164.patch

To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:

    This closes #3164
    
----
commit 950858e7fae838aecbf31c1ea201c3dbcd67a91d
Author: Xavier Léauté <xav...@confluent.io>
Date:   2017-05-03T17:01:07Z

    small batch decompression benchmark

commit 0177665f3321e101ccbb2e95ec724125bf784e1c
Author: Xavier Léauté <xav...@confluent.io>
Date:   2017-05-03T20:40:45Z

    KAFKA-5150 reduce lz4 decompression overhead
    
    - reuse decompression buffers, keeping one per thread
    - switch lz4 input stream to operate directly on ByteBuffers
    - more tests with both compressible / incompressible data, multiple
      blocks, and various other combinations to increase code coverage
    - fixes bug that would cause EOFException instead of invalid block size
      for invalid incompressible blocks

commit 7b553afdd7a6a7d39b122c503cd643b915b9f556
Author: Xavier Léauté <xav...@confluent.io>
Date:   2017-05-04T17:26:52Z

    remove unnecessary synchronized on reset/mark

commit b4c46ac15aa25e2c8ea6bb9392d700b02b61fccd
Author: Xavier Léauté <xav...@confluent.io>
Date:   2017-05-05T16:00:49Z

    avoid exception when reaching end of batch

commit 77e1a1d47f9060430257821704045353ec77a8d0
Author: Xavier Léauté <xav...@confluent.io>
Date:   2017-05-18T16:47:01Z

    remove reflection for LZ4 and add comments

commit e3b68668b6b2e0057bcd9a3de24ab8fce774d8d5
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-26T15:45:13Z

    Simplify DataLogInputStream.nextBatch

commit 213bb77b8a3862a325118492d658a4e58ffd3c29
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-26T15:56:16Z

    Minor comment improvement

commit 9bd10361d70de837ccb58a82b356b402d28bb94f
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-29T14:18:13Z

    Minor tweaks in `DefaultRecord.readFrom`

commit 178d4900a6c848a4f1b0aa0ae68aaa24885f36bc
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-29T15:22:01Z

    Cache decompression buffers in Fetcher instead of thread-locals
    
    This means that this only benefits the consumer for now, which
    is the most important case. For the server, we should consider
    how this fits with KIP-72.

commit c10b310cc13f5ec110cbaed8fb72f24774c2a2cd
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-29T15:23:19Z

    Tweaks to `KafkaLZ4*Stream` classes and `RecordBatchIterationBenchmark

commit d93444c147430a62f5e9d16492ad14d2c6a0dd38
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-29T18:18:23Z

    Trivial style tweaks to KafkaLZ4Test

commit 419500e848b943f20d9bce1790fe40e64080ae29
Author: Ismael Juma <ism...@juma.me.uk>
Date:   2017-05-29T18:38:55Z

    Provide a `NO_CACHING` BufferSupplier

----


> 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.8.2.2, 0.9.0.1, 0.11.0.0, 0.10.2.1
>            Reporter: Xavier Léauté
>            Assignee: Xavier Léauté
>             Fix For: 0.11.0.0
>
>
> 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