This is an automated email from the ASF dual-hosted git repository. ableegoldman pushed a commit to branch 2.7 in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/2.7 by this push: new 30ce0ea KAFKA-9924: Add docs for RocksDB properties-based metrics (#9895) 30ce0ea is described below commit 30ce0ea7b827a4552ad0415fbd33a7414963f51c Author: Bruno Cadonna <br...@confluent.io> AuthorDate: Tue Jan 19 22:30:23 2021 +0100 KAFKA-9924: Add docs for RocksDB properties-based metrics (#9895) Document the new properties-based metrics for RocksDB Reviewers: Leah Thomas <ltho...@confluent.io>, Anna Sophie Blee-Goldman <ableegold...@apache.org> --- docs/ops.html | 147 ++++++++++++++++++++- .../state/internals/metrics/RocksDBMetrics.java | 6 +- 2 files changed, 146 insertions(+), 7 deletions(-) diff --git a/docs/ops.html b/docs/ops.html index 2249ae2..05276e9 100644 --- a/docs/ops.html +++ b/docs/ops.html @@ -2013,10 +2013,11 @@ dropped-records-rate and dropped-records-total which have a recording level of < </table> <h5 class="anchor-heading"><a id="kafka_streams_rocksdb_monitoring" class="anchor-link"></a><a href="#kafka_streams_rocksdb_monitoring">RocksDB Metrics</a></h5> - All of the following metrics have a recording level of <code>debug</code>. - The metrics are collected every minute from the RocksDB state stores. - If a state store consists of multiple RocksDB instances as it is the case for aggregations over time and session windows, - each metric reports an aggregation over the RocksDB instances of the state store. + RocksDB metrics are grouped into statistics-based metrics and properties-based metrics. + The former are recorded from statistics that a RocksDB state store collects whereas the latter are recorded from + properties that RocksDB exposes. + Statistics collected by RocksDB provide cumulative measurements over time, e.g. bytes written to the state store. + Properties exposed by RocksDB provide current measurements, e.g., the amount of memory currently used. Note that the <code>store-scope</code> for built-in RocksDB state stores are currently the following: <ul> <li><code>rocksdb-state</code> (for RocksDB backed key-value store)</li> @@ -2024,6 +2025,14 @@ dropped-records-rate and dropped-records-total which have a recording level of < <li><code>rocksdb-session-state</code> (for RocksDB backed session store)</li> </ul> + <strong>RocksDB Statistics-based Metrics:</strong> + All of the following statistics-based metrics have a recording level of <code>debug</code> because collecting + statistics in <a href="https://github.com/facebook/rocksdb/wiki/Statistics#stats-level-and-performance-costs">RocksDB + may have an impact on performance</a>. + Statistics-based metrics are collected every minute from the RocksDB state stores. + If a state store consists of multiple RocksDB instances, as is the case for WindowStores and SessionStores, + each metric reports an aggregation over the RocksDB instances of the state store. + <table class="data-table"> <tbody> <tr> @@ -2114,6 +2123,136 @@ dropped-records-rate and dropped-records-total which have a recording level of < </tbody> </table> + <strong>RocksDB Properties-based Metrics:</strong> + All of the following properties-based metrics have a recording level of <code>info</code> and are recorded when the + metrics are accessed. + If a state store consists of multiple RocksDB instances, as is the case for WindowStores and SessionStores, + each metric reports the sum over all the RocksDB instances of the state store, except for the block cache metrics + <code>block-cache-*</code>. The block cache metrics report the sum over all RocksDB instances if each instance uses its + own block cache, and they report the recorded value from only one instance if a single block cache is shared + among all instances. + + <table class="data-table"> + <tbody> + <tr> + <th>Metric/Attribute name</th> + <th>Description</th> + <th>Mbean name</th> + </tr> + <tr> + <td>num-immutable-mem-table</td> + <td>The number of immutable memtables that have not yet been flushed.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>cur-size-active-mem-table</td> + <td>The approximate size of the active memtable in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>cur-size-all-mem-tables</td> + <td>The approximate size of active and unflushed immutable memtables in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>size-all-mem-tables</td> + <td>The approximate size of active, unflushed immutable, and pinned immutable memtables in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-entries-active-mem-table</td> + <td>The number of entries in the active memtable.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-entries-imm-mem-tables</td> + <td>The number of entries in the unflushed immutable memtables.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-deletes-active-mem-table</td> + <td>The number of delete entries in the active memtable.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-deletes-imm-mem-tables</td> + <td>The number of delete entries in the unflushed immutable memtables.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>mem-table-flush-pending</td> + <td>This metric reports 1 if a memtable flush is pending, otherwise it reports 0.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-running-flushes</td> + <td>The number of currently running flushes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>compaction-pending</td> + <td>This metric reports 1 if at least one compaction is pending, otherwise it reports 0.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-running-compactions</td> + <td>The number of currently running compactions.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>estimate-pending-compaction-bytes</td> + <td>The estimated total number of bytes a compaction needs to rewrite on disk to get all levels down to under + target size (only valid for level compaction).</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>total-sst-files-size</td> + <td>The total size in bytes of all SST files.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>live-sst-files-size</td> + <td>The total size in bytes of all SST files that belong to the latest LSM tree.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>num-live-versions</td> + <td>Number of live versions of the LSM tree.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>block-cache-capacity</td> + <td>The capacity of the block cache in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>block-cache-usage</td> + <td>The memory size of the entries residing in block cache in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>block-cache-pinned-usage</td> + <td>The memory size for the entries being pinned in the block cache in bytes.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>estimate-num-keys</td> + <td>The estimated number of keys in the active and unflushed immutable memtables and storage.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>estimate-table-readers-mem</td> + <td>The estimated memory in bytes used for reading SST tables, excluding memory used in block cache.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + <tr> + <td>background-errors</td> + <td>The total number of background errors.</td> + <td>kafka.streams:type=stream-state-metrics,thread-id=([-.\w]+),task-id=([-.\w]+),[store-scope]-id=([-.\w]+)</td> + </tr> + </tbody> + </table> + <h5 class="anchor-heading"><a id="kafka_streams_cache_monitoring" class="anchor-link"></a><a href="#kafka_streams_cache_monitoring">Record Cache Metrics</a></h5> All of the following metrics have a recording level of <code>debug</code>: diff --git a/streams/src/main/java/org/apache/kafka/streams/state/internals/metrics/RocksDBMetrics.java b/streams/src/main/java/org/apache/kafka/streams/state/internals/metrics/RocksDBMetrics.java index 998304e..a30a891 100644 --- a/streams/src/main/java/org/apache/kafka/streams/state/internals/metrics/RocksDBMetrics.java +++ b/streams/src/main/java/org/apache/kafka/streams/state/internals/metrics/RocksDBMetrics.java @@ -131,7 +131,7 @@ public class RocksDBMetrics { private static final String CURRENT_SIZE_OF_ACTIVE_MEMTABLE_DESCRIPTION = "Approximate size of active memtable in bytes"; private static final String CURRENT_SIZE_OF_ALL_MEMTABLES_DESCRIPTION = - "Approximate size of active and unflushed immutable memtable in bytes"; + "Approximate size of active and unflushed immutable memtables in bytes"; private static final String SIZE_OF_ALL_MEMTABLES_DESCRIPTION = "Approximate size of active, unflushed immutable, and pinned immutable memtables in bytes"; private static final String MEMTABLE_FLUSH_PENDING_DESCRIPTION = @@ -145,14 +145,14 @@ public class RocksDBMetrics { private static final String TOTAL_SST_FILE_SIZE_DESCRIPTION = "Total size in bytes of all SST files"; private static final String LIVE_SST_FILES_SIZE_DESCRIPTION = "Total size in bytes of all SST files that belong to the latest LSM tree"; - private static final String NUMBER_OF_LIVE_VERSIONS_DESCRIPTION = "Number of live versions"; + private static final String NUMBER_OF_LIVE_VERSIONS_DESCRIPTION = "Number of live versions of the LSM tree"; private static final String CAPACITY_OF_BLOCK_CACHE_DESCRIPTION = "Capacity of the block cache in bytes"; private static final String USAGE_OF_BLOCK_CACHE_DESCRIPTION = "Memory size of the entries residing in block cache in bytes"; private static final String PINNED_USAGE_OF_BLOCK_CACHE_DESCRIPTION = "Memory size for the entries being pinned in the block cache in bytes"; private static final String ESTIMATED_NUMBER_OF_KEYS_DESCRIPTION = - "Estimated number of total keys in the active and unflushed immutable memtables and storage"; + "Estimated number of keys in the active and unflushed immutable memtables and storage"; private static final String ESTIMATED_MEMORY_OF_TABLE_READERS_DESCRIPTION = "Estimated memory in bytes used for reading SST tables, excluding memory used in block cache"; private static final String TOTAL_NUMBER_OF_BACKGROUND_ERRORS_DESCRIPTION = "Total number of background errors";