Я хочу спроецировать потенциально очень большое состояние из потока событий. Вот как я могу реализовать это в обязательном порядке:
class ImperativeFooProcessor {
val state: mutable.Map[UUID, BarState] = mutable.HashMap.empty[UUID, BarState]
def handle(event: InputEvent) = {
event match {
case FooAdded(fooId, barId) => {
// retrieve relevant state and do some work on it
val barState = state(barId)
// let the world know about what may have happened
publish(BarOccured(fooId, barId))
// or maybe rather
publish(BazOccured(fooId, barId))
}
case FooRemoved(fooId, barId) => {
// retrieve relevant state and do some work on it
val barState = state(barId)
// let the world know about what may have happened
publish(BarOccured(fooId, barId))
// or maybe rather
publish(BazOccured(fooId, barId))
}
}
}
private def publish(event: OutputEvent): Unit = {
// push event to downstream sink
}
}
В худшем случае размер BarState будет увеличиваться в зависимости от того, сколько раз он был упомянут FooAdded
.
Количество уникальных barId очень мало по сравнению с общим количеством событий для каждого barId.
Как мне начать представлять эту структуру обработки во Flink?
Как мне работать с тем фактом, что каждое состояние BarState потенциально может стать очень большим?