Implementation:Apache Flink BulkWriterFormatFactory
| Knowledge Sources | |
|---|---|
| Domains | Connectors, File_Connector |
| Last Updated | 2026-02-09 00:00 GMT |
Overview
A factory interface for creating encoding formats that produce BulkWriter.Factory<RowData> instances for the file system connector's table sink.
Description
BulkWriterFormatFactory is an internal marker interface that extends EncodingFormatFactory<BulkWriter.Factory<RowData>>. It serves as the base interface for factories that produce bulk writing formats within the file system connector's table integration layer.
The interface itself declares no additional methods beyond those inherited from EncodingFormatFactory. It is fully specified by its generic type parameters, binding the encoding format output type to BulkWriter.Factory<RowData>. The interface exists primarily for service discovery: implementations are registered via Java SPI so that Flink's FactoryUtil can discover and instantiate them when a table sink is configured with a particular bulk writing format.
This design allows format implementations such as Parquet, ORC, or Avro to provide their own BulkWriterFormatFactory implementations that the file system connector automatically discovers and uses.
Usage
Implement BulkWriterFormatFactory to register a new bulk writing format for the file system connector's table sink. The factory is loaded via Java SPI (META-INF/services/org.apache.flink.table.factories.Factory) and is instantiated by FactoryUtil.createTableFactoryHelper when a table is configured to use the corresponding format for writing.
Code Reference
Source Location
- Repository: Apache_Flink
- File: flink-connectors/flink-connector-files/src/main/java/org/apache/flink/connector/file/table/factories/BulkWriterFormatFactory.java
- Lines: 1-36
Signature
@Internal
public interface BulkWriterFormatFactory
extends EncodingFormatFactory<BulkWriter.Factory<RowData>> {
// interface is used for discovery but is already fully specified by the generics
}
Import
import org.apache.flink.connector.file.table.factories.BulkWriterFormatFactory;
I/O Contract
Inputs
| Name | Type | Required | Description |
|---|---|---|---|
| context | DynamicTableFactory.Context | Yes | The table factory context providing catalog, schema, and configuration information (inherited from EncodingFormatFactory). |
| formatOptions | ReadableConfig | Yes | Format-specific configuration options such as compression codec or block size (inherited from EncodingFormatFactory). |
Outputs
| Name | Type | Description |
|---|---|---|
| createEncodingFormat result | EncodingFormat<BulkWriter.Factory<RowData>> | An encoding format that produces BulkWriter.Factory<RowData> instances for writing file data in bulk. |
Usage Examples
// Implement a custom bulk writer format factory
public class MyBulkWriterFormatFactory implements BulkWriterFormatFactory {
@Override
public String factoryIdentifier() {
return "my-format";
}
@Override
public Set<ConfigOption<?>> requiredOptions() {
return Collections.emptySet();
}
@Override
public Set<ConfigOption<?>> optionalOptions() {
return Collections.singleton(MY_COMPRESSION_OPTION);
}
@Override
public EncodingFormat<BulkWriter.Factory<RowData>> createEncodingFormat(
DynamicTableFactory.Context context,
ReadableConfig formatOptions) {
// Return an encoding format that creates BulkWriter factories
return new MyBulkEncodingFormat(formatOptions);
}
}
// Register via META-INF/services/org.apache.flink.table.factories.Factory