public static VersionedBytesStoreSupplier persistentVersionedKeyValueStore(final String name,
                                                                               final Duration historyRetention) {
        Objects.requireNonNull(name, "name cannot be null");
        final String hrMsgPrefix = prepareMillisCheckFailMsgPrefix(historyRetention, "historyRetention");
        final long historyRetentionMs = validateMillisecondDuration(historyRetention, hrMsgPrefix);
        if (historyRetentionMs < 0L) {
            throw new IllegalArgumentException("historyRetention cannot be negative");
        }
        return new RocksDbVersionedKeyValueBytesStoreSupplier(name, historyRetentionMs);
    }
Create a persistent versioned key-value store {@link VersionedBytesStoreSupplier}.
<p>
This store supplier can be passed into a
{@link #versionedKeyValueStoreBuilder(VersionedBytesStoreSupplier, Serde, Serde)}.
<p>
Note that it is not safe to change the value of {@code historyRetention} between
application restarts without clearing local state from application instances,
as this may cause incorrect values to be read from the state store if it impacts
the underlying storage format.

@param name             name of the store (cannot be {@code null})
@param historyRetention length of time that old record versions are available for query
                        (cannot be negative). If a timestamp bound provided to
                        {@link VersionedKeyValueStore#get(Object, long)} is older than this
                        specified history retention, then the get operation will not return data.
                        This parameter also determines the "grace period" after which
                        out-of-order writes will no longer be accepted.
@return an instance of {@link VersionedBytesStoreSupplier}
@throws IllegalArgumentException if {@code historyRetention} can't be represented as {@code long milliseconds}
streams/src/main/java/org/apache/kafka/streams/state/Stores.java