There is a class of ingestion sources like flume that will allow you to receive data before fully "acknowledging" it in order to allow transactional semantics.

I'm not sure the current API here really supports using those, because it's not clear to the receiver implementer when the underlying blocks get replicated.

I think it would be good to expose either (a) some kind of `flush` operation, where you can force the block generator to create blocks for all outstanding pushed objects or (b) a way to do a bulk write where it guarantees that the iterator is fully pushed into a block.

If you have those then you would be able to support the failure of a receiver in a nice way for sources like flume.