A. Sophie Blee-Goldman created KAFKA-12314:
----------------------------------------------
Summary: Leverage custom comparator for optimized range scans on
RocksDB
Key: KAFKA-12314
URL: https://issues.apache.org/jira/browse/KAFKA-12314
Project: Kafka
Issue Type: Improvement
Reporter: A. Sophie Blee-Goldman
Currently our SessionStore has poor performance on any range scans due to the
byte layout and possibility of varyingly sized keys. A session window consists
of the key and two timestamps, the windowEnd and windowStart. This data is
formatted as
[key, windowEnd, windowStart]
The default comparator in rocksdb is lexicographical, and so it compares bytes
starting with the key. This means with the above format, the records are
effectively sorted first by key and then by windowEnd. But if two keys are of
different lengths, the comparator will start on the left and end up comparing
the tail bytes of the longer key against the windowEnd timestamp of the shorter
key. Due to this, we have to set the bounds on SessionStore range scans very
conservatively, which means we end up reading way more data than we need.
One way out of this would be to use a custom comparator which understands the
window bytes format we use. So far we haven't done this because of the overhead
in crossing the JNI with the Java Comparator; we would need a native comparator
to avoid further performance hit.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)