@Override
  public void init(Context context) {
    super.init(context);
    TableMetricsUtil tableMetricsUtil = new TableMetricsUtil(context, this, tableId);
    tableMetricsUtil.newGauge("hit-rate", () -> hitRate());
    tableMetricsUtil.newGauge("miss-rate", () -> missRate());
    tableMetricsUtil.newGauge("req-count", () -> requestCount());
  }
A hybrid table incorporating a cache with a Samza table. The cache is
represented as a {@link ReadWriteUpdateTable}.

The intented use case is to optimize the latency of accessing the actual table, e.g.
remote tables, when eventual consistency between cache and table is acceptable.
The cache is expected to support TTL such that the values can be refreshed at some
point.

{@link CachingTable} supports write-through and write-around (writes bypassing cache) policies.
For write-through policy, it supports read-after-write semantics because the value is
cached after written to the table.

Note that there is no synchronization in {@link CachingTable} because it is impossible to
implement a critical section between table read/write and cache update in the async
code paths without serializing all async operations for the same keys. Given stale
data is a presumed trade-off for using a cache with table, it should be acceptable
for the data in table and cache to be temporarily out-of-sync. Moreover, unsynchronized
operations in {@link CachingTable} also deliver higher performance when there is contention.

@param <K> type of the table key
@param <V> type of the table value
samza-core/src/main/java/org/apache/samza/table/caching/CachingTable.java