The api for the HighwaterMarkCheckpoint is:
def write(highwaterMarksPerPartition: Map[TopicAndPartition, Long])
def read(topic: String, partition: Int): Long
Pretty weird, no? The write method writes a map of all values, obliterating
previous values. The read method internally reads back that whole map, then
throws away all the values but one and returns that one. It seems like the
natural way to do it would be to either read and write one key/value pair
or read and write them all together.
Is there a rationale for this? Can we change it?
It would be nice to reuse this class to track log flushes, and the cleaner
point. However in its current form it isn't particularly useful.