Class SortBufferAccumulator
- java.lang.Object
-
- org.apache.flink.runtime.io.network.partition.hybrid.tiered.storage.SortBufferAccumulator
-
- All Implemented Interfaces:
AutoCloseable,BufferAccumulator
public class SortBufferAccumulator extends Object implements BufferAccumulator
The sort-based implementation of theBufferAccumulator. TheBufferAccumulatorreceives the records fromTieredStorageProducerClientand the records will accumulate and transform to finished buffers. The accumulated buffers will be transferred to the corresponding tier dynamically.The
SortBufferAccumulatorcan help use less buffers to accumulate data, which decouples the buffer usage with the number of parallelism. The number of buffers used by theSortBufferAccumulatorwill be numBuffers at most. Once theDataBufferis full, or switching from broadcast to non-broadcast(or vice versa), the buffer in the sort buffer will be flushed to the tiers.Note that this class need not be thread-safe, because it should only be accessed from the main thread.
-
-
Constructor Summary
Constructors Constructor Description SortBufferAccumulator(int numSubpartitions, int numBuffers, int bufferSizeBytes, TieredStorageMemoryManager memoryManager, boolean isPartialRecordAllowed)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidclose()Close the accumulator.voidreceive(ByteBuffer record, TieredStorageSubpartitionId subpartitionId, Buffer.DataType dataType, boolean isBroadcast)Receives the records from tiered store producer, these records will be accumulated and transformed into finished buffers.voidsetup(org.apache.flink.util.function.TriConsumer<TieredStorageSubpartitionId,Buffer,Integer> bufferFlusher)Setup the accumulator.
-
-
-
Constructor Detail
-
SortBufferAccumulator
public SortBufferAccumulator(int numSubpartitions, int numBuffers, int bufferSizeBytes, TieredStorageMemoryManager memoryManager, boolean isPartialRecordAllowed)
-
-
Method Detail
-
setup
public void setup(org.apache.flink.util.function.TriConsumer<TieredStorageSubpartitionId,Buffer,Integer> bufferFlusher)
Description copied from interface:BufferAccumulatorSetup the accumulator.- Specified by:
setupin interfaceBufferAccumulator- Parameters:
bufferFlusher- accepts the accumulated buffers. The first field is the subpartition id, the second is the accumulated buffer to flush, and the third is the number of remaining buffers to be written consecutively to the same segment.
-
receive
public void receive(ByteBuffer record, TieredStorageSubpartitionId subpartitionId, Buffer.DataType dataType, boolean isBroadcast) throws IOException
Description copied from interface:BufferAccumulatorReceives the records from tiered store producer, these records will be accumulated and transformed into finished buffers.Note that when isBroadcast is true, for a broadcast-only partition, the subpartitionId value will always be 0. Conversely, for a non-broadcast-only partition, the subpartitionId value will range from 0 to the number of subpartitions.
- Specified by:
receivein interfaceBufferAccumulator- Parameters:
record- the received recordsubpartitionId- the subpartition id of the recorddataType- the data type of the recordisBroadcast- whether the record is a broadcast record- Throws:
IOException
-
close
public void close()
Description copied from interface:BufferAccumulatorClose the accumulator. This will flush all the remaining data and release all the resources.- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceBufferAccumulator
-
-