class Mapper
method Map(void, items [i1, i2, ...])
for all item i in [i1, i2, ...]
for all item j in [i1, i2, ...] such that j > i
Emit(pair [i, j], count 1)
class Reducer
method Reduce(pair [i, j], counts [c1, c2, ...])
s = sum([c1, c2, ...])
Emit(pair [i, j], count s)
class Mapper
method Map(void, items [i1, i2, ...])
for all item i in [i1, i2, ...]
H = new AssociativeArray : item -> counter
for all item j in [i1, i2, ...] such that j > i
H{j} = H{j} + 1
Emit(item i, stripe H)
class Reducer
method Reduce(item i, stripes [H1, H2, ...])
H = new AssociativeArray : item -> counter
H = merge-sum([H1, H2, ...])
for all item j in H.keys()
Emit(pair [i, j], H{j})
Positive Sequential Consistency Example
Negative Sequential Consistency Example
R(x)a
and R(x)b
conflict.
Positive Causal Consistency Example
W(x)a
causally precedes R(x)a
.R(x)a
causally precedes W(x)b
.W(x)b
and W(x)c
are concurrent.
Negative Causal Consistency Example
W(x)a
causally precedes R(x)a
.R(x)a
causally precedes W(x)b
.R(x)b
before R(x)a
violates causal consistency.A fault may lead to an error, which may lead to a failure.
propose(val)
and a procedure decide()
.propose(val)
once, with some argument val
determined by the initial state of the process.decide()
.decide()
never return different values.decide()
with response v
, then some process invoked a call to propose(v)
.propose(v)
or decide()
and does not fail, then this call eventually terminates.KStream
API for record streams.KTable
API for changelog streams.