GitHub user agresch opened a pull request:

    https://github.com/apache/storm/pull/2504

    STORM-2156: store metrics into RocksDB

    
    This PR adds a RocksDB key/value database to Nimbus for storing metrics 
from the Supervisors.  The implementation is replaceable by implementing the 
MetricStore interface and updating the storm.metricstore.class configuration 
option.
    
    As metrics are stored in RocksDB, their string values (for topology id and 
executor Id, etc.) are converted to unique integer Ids, and these strings are 
also stored to the database as metadata indexed by the integer Id.  When a 
metric is stored, it is also aggregated with any existing metric within the 
same 1, 10, and 60 minute timeframe.
    
    Metric.java contains all the relevant metric properties stored in the 
database.
    
    FilterOptions.java provides all the options available to pass to scan the 
database for various metrics.
    
    The Supervisor sends metrics (currently only for memory usage) to Nimbus by 
thrift in processMetrics() in Container.java
    
    Nimbus receives the Supervisor metrics and inserts them in the database in 
processWorkerMetrics().
    
    RocksDbStore is the RocksDB metric store implementation.
    
    RocksDbKey provides documentation on how metric data and metadata strings 
are stored as a key in RocksDB.  RocksDbValue provides similar documentation 
for the value format.
    
    StringMetadataCache provides an in-memory cache of the most recently used 
string metadata for fast lookup.  The cache size is configurable.
    
    RocksDbMetricsWriter performs the metric writes to RocksDB, taking metrics 
off the queue and aggregating with existing data, and storing metadata as 
required.  There's a single thread inserting to prevent threading issues.  
Metric database inserts in my tests typically take 80 to 150 microseconds 
(including the aggregation) for an individual metric.
    
    MetricsCleaner exists to periodically delete old metrics and remove unused 
metadata strings.  Metric retention time is configurable.
    
    RocksDbStoreTest provide sample code for inserting and searching for 
metrics.
    
    
    


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

    $ git pull https://github.com/agresch/storm agresch_rocksdb

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

    https://github.com/apache/storm/pull/2504.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 #2504
    
----
commit 517310586e69a139002140fec12b2e12527a0fa2
Author: Aaron Gresch <agresch@...>
Date:   2017-12-07T17:36:03Z

    STORM-2156: store metrics into RocksDB

----


---

Reply via email to