I don't really understand why author treats Flink datastream API as "high temporal locality" and "can't express our running example". Windowing operators provided by Flink are just an one way of using datastream, and you can easily express any operations you want using something like KeyedProcessFunction and manually manipulating the state.