public class SortBufferAccumulator extends Object implements BufferAccumulator
BufferAccumulator. The BufferAccumulator
receives the records from TieredStorageProducerClient and the records will accumulate and
transform to finished buffers. The accumulated buffers will be transferred to the corresponding
tier dynamically.
The SortBufferAccumulator can help use less buffers to accumulate data, which
decouples the buffer usage with the number of parallelism. The number of buffers used by the
SortBufferAccumulator will be numBuffers at most. Once the DataBuffer is 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 and Description |
|---|
SortBufferAccumulator(int numSubpartitions,
int numBuffers,
int bufferSizeBytes,
TieredStorageMemoryManager memoryManager,
boolean isPartialRecordAllowed) |
| Modifier and Type | Method and Description |
|---|---|
void |
close()
Close the accumulator.
|
void |
receive(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.
|
void |
setup(org.apache.flink.util.function.TriConsumer<TieredStorageSubpartitionId,Buffer,Integer> bufferFlusher)
Setup the accumulator.
|
public SortBufferAccumulator(int numSubpartitions,
int numBuffers,
int bufferSizeBytes,
TieredStorageMemoryManager memoryManager,
boolean isPartialRecordAllowed)
public void setup(org.apache.flink.util.function.TriConsumer<TieredStorageSubpartitionId,Buffer,Integer> bufferFlusher)
BufferAccumulatorsetup in interface BufferAccumulatorbufferFlusher - 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.public void receive(ByteBuffer record, TieredStorageSubpartitionId subpartitionId, Buffer.DataType dataType, boolean isBroadcast) throws IOException
BufferAccumulatorNote 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.
receive in interface BufferAccumulatorrecord - the received recordsubpartitionId - the subpartition id of the recorddataType - the data type of the recordisBroadcast - whether the record is a broadcast recordIOExceptionpublic void close()
BufferAccumulatorclose in interface AutoCloseableclose in interface BufferAccumulatorCopyright © 2014–2024 The Apache Software Foundation. All rights reserved.