From 45c94da36c38203b7bc0b74309d2198aeb4b3507 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Sun, 18 Jun 2023 13:37:29 +0300 Subject: [PATCH 1/8] add `max_batch_byte_size` parameter --- .../prometheusremotewriteexporter/README.md | 3 ++ .../prometheusremotewriteexporter/config.go | 7 ++++ .../prometheusremotewriteexporter/exporter.go | 36 +++++++++---------- .../prometheusremotewriteexporter/factory.go | 7 ++-- 4 files changed, 32 insertions(+), 21 deletions(-) diff --git a/exporter/prometheusremotewriteexporter/README.md b/exporter/prometheusremotewriteexporter/README.md index 6036da52eac1..db60a4cc1e06 100644 --- a/exporter/prometheusremotewriteexporter/README.md +++ b/exporter/prometheusremotewriteexporter/README.md @@ -61,6 +61,9 @@ The following settings can be optionally configured: - `enabled` (default = false): If `enabled` is `true`, a `_created` metric is exported for Summary, Histogram, and Monotonic Sum metric points if `StartTimeUnixNano` is set. +- `max_batch_byte_size` (default = `3000000` -> `~2.861 mb`): Maximum size of a batch of + samples to be sent to the remote write endpoint. If the batch size is larger + than this value, it will be split into multiple batches. Example: diff --git a/exporter/prometheusremotewriteexporter/config.go b/exporter/prometheusremotewriteexporter/config.go index f70b635ad8d2..8757c4c19dd5 100644 --- a/exporter/prometheusremotewriteexporter/config.go +++ b/exporter/prometheusremotewriteexporter/config.go @@ -31,6 +31,9 @@ type Config struct { HTTPClientSettings confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. + // maximum size in bytes of time series batch sent to remote storage + maxBatchByteSize int `mapstructure:"max_batch_byte_size"` + // ResourceToTelemetrySettings is the option for converting resource attributes to telemetry attributes. // "Enabled" - A boolean field to enable/disable this option. Default is `false`. // If enabled, all the resource attributes will be converted to metric labels by default. @@ -97,5 +100,9 @@ func (cfg *Config) Validate() error { Enabled: false, } } + if cfg.maxBatchByteSize <= 0 { + return fmt.Errorf("max_batch_byte_size must be greater than 0") + } + return nil } diff --git a/exporter/prometheusremotewriteexporter/exporter.go b/exporter/prometheusremotewriteexporter/exporter.go index 102110994296..c39c6010e849 100644 --- a/exporter/prometheusremotewriteexporter/exporter.go +++ b/exporter/prometheusremotewriteexporter/exporter.go @@ -29,18 +29,17 @@ import ( "github.com/open-telemetry/opentelemetry-collector-contrib/pkg/translator/prometheusremotewrite" ) -const maxBatchByteSize = 3000000 - // prwExporter converts OTLP metrics to Prometheus remote write TimeSeries and sends them to a remote endpoint. type prwExporter struct { - endpointURL *url.URL - client *http.Client - wg *sync.WaitGroup - closeChan chan struct{} - concurrency int - userAgentHeader string - clientSettings *confighttp.HTTPClientSettings - settings component.TelemetrySettings + endpointURL *url.URL + client *http.Client + wg *sync.WaitGroup + closeChan chan struct{} + concurrency int + userAgentHeader string + maxBatchByteSize int + clientSettings *confighttp.HTTPClientSettings + settings component.TelemetrySettings wal *prweWAL exporterSettings prometheusremotewrite.Settings @@ -61,13 +60,14 @@ func newPRWExporter(cfg *Config, set exporter.CreateSettings) (*prwExporter, err userAgentHeader := fmt.Sprintf("%s/%s", strings.ReplaceAll(strings.ToLower(set.BuildInfo.Description), " ", "-"), set.BuildInfo.Version) prwe := &prwExporter{ - endpointURL: endpointURL, - wg: new(sync.WaitGroup), - closeChan: make(chan struct{}), - userAgentHeader: userAgentHeader, - concurrency: cfg.RemoteWriteQueue.NumConsumers, - clientSettings: &cfg.HTTPClientSettings, - settings: set.TelemetrySettings, + endpointURL: endpointURL, + wg: new(sync.WaitGroup), + closeChan: make(chan struct{}), + userAgentHeader: userAgentHeader, + maxBatchByteSize: cfg.maxBatchByteSize, + concurrency: cfg.RemoteWriteQueue.NumConsumers, + clientSettings: &cfg.HTTPClientSettings, + settings: set.TelemetrySettings, exporterSettings: prometheusremotewrite.Settings{ Namespace: cfg.Namespace, ExternalLabels: sanitizedLabels, @@ -154,7 +154,7 @@ func (prwe *prwExporter) handleExport(ctx context.Context, tsMap map[string]*pro } // Calls the helper function to convert and batch the TsMap to the desired format - requests, err := batchTimeSeries(tsMap, maxBatchByteSize) + requests, err := batchTimeSeries(tsMap, prwe.maxBatchByteSize) if err != nil { return err } diff --git a/exporter/prometheusremotewriteexporter/factory.go b/exporter/prometheusremotewriteexporter/factory.go index bfbd1b6e222f..7b3dbd116142 100644 --- a/exporter/prometheusremotewriteexporter/factory.go +++ b/exporter/prometheusremotewriteexporter/factory.go @@ -69,9 +69,10 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, func createDefaultConfig() component.Config { return &Config{ - Namespace: "", - ExternalLabels: map[string]string{}, - TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), + Namespace: "", + ExternalLabels: map[string]string{}, + maxBatchByteSize: 3000000, + TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), RetrySettings: exporterhelper.RetrySettings{ Enabled: true, InitialInterval: 50 * time.Millisecond, From 237347090377fb479254fc8c3d81619831368e71 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Mon, 19 Jun 2023 12:51:17 +0300 Subject: [PATCH 2/8] `maxBatchByteSize` -> `MaxBatchByteSize` --- exporter/prometheusremotewriteexporter/config.go | 4 ++-- exporter/prometheusremotewriteexporter/exporter.go | 2 +- exporter/prometheusremotewriteexporter/factory.go | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/exporter/prometheusremotewriteexporter/config.go b/exporter/prometheusremotewriteexporter/config.go index 8757c4c19dd5..66a2ff1e9b45 100644 --- a/exporter/prometheusremotewriteexporter/config.go +++ b/exporter/prometheusremotewriteexporter/config.go @@ -32,7 +32,7 @@ type Config struct { HTTPClientSettings confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. // maximum size in bytes of time series batch sent to remote storage - maxBatchByteSize int `mapstructure:"max_batch_byte_size"` + MaxBatchByteSize int `mapstructure:"max_batch_byte_size"` // ResourceToTelemetrySettings is the option for converting resource attributes to telemetry attributes. // "Enabled" - A boolean field to enable/disable this option. Default is `false`. @@ -100,7 +100,7 @@ func (cfg *Config) Validate() error { Enabled: false, } } - if cfg.maxBatchByteSize <= 0 { + if cfg.MaxBatchByteSize <= 0 { return fmt.Errorf("max_batch_byte_size must be greater than 0") } diff --git a/exporter/prometheusremotewriteexporter/exporter.go b/exporter/prometheusremotewriteexporter/exporter.go index c39c6010e849..cf559b5bfc95 100644 --- a/exporter/prometheusremotewriteexporter/exporter.go +++ b/exporter/prometheusremotewriteexporter/exporter.go @@ -64,7 +64,7 @@ func newPRWExporter(cfg *Config, set exporter.CreateSettings) (*prwExporter, err wg: new(sync.WaitGroup), closeChan: make(chan struct{}), userAgentHeader: userAgentHeader, - maxBatchByteSize: cfg.maxBatchByteSize, + maxBatchByteSize: cfg.MaxBatchByteSize, concurrency: cfg.RemoteWriteQueue.NumConsumers, clientSettings: &cfg.HTTPClientSettings, settings: set.TelemetrySettings, diff --git a/exporter/prometheusremotewriteexporter/factory.go b/exporter/prometheusremotewriteexporter/factory.go index 7b3dbd116142..741e1053345c 100644 --- a/exporter/prometheusremotewriteexporter/factory.go +++ b/exporter/prometheusremotewriteexporter/factory.go @@ -71,7 +71,7 @@ func createDefaultConfig() component.Config { return &Config{ Namespace: "", ExternalLabels: map[string]string{}, - maxBatchByteSize: 3000000, + MaxBatchByteSize: 3000000, TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), RetrySettings: exporterhelper.RetrySettings{ Enabled: true, From 21015388c6a6959dcd4d844759771eb4fe4a62cb Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Mon, 19 Jun 2023 12:51:25 +0300 Subject: [PATCH 3/8] tests --- exporter/prometheusremotewriteexporter/config_test.go | 3 ++- .../prometheusremotewriteexporter/exporter_test.go | 10 ++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/exporter/prometheusremotewriteexporter/config_test.go b/exporter/prometheusremotewriteexporter/config_test.go index 822d516185a2..5ca30dee89fc 100644 --- a/exporter/prometheusremotewriteexporter/config_test.go +++ b/exporter/prometheusremotewriteexporter/config_test.go @@ -40,7 +40,8 @@ func TestLoadConfig(t *testing.T) { { id: component.NewIDWithName(metadata.Type, "2"), expected: &Config{ - TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), + MaxBatchByteSize: 3000000, + TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), RetrySettings: exporterhelper.RetrySettings{ Enabled: true, InitialInterval: 10 * time.Second, diff --git a/exporter/prometheusremotewriteexporter/exporter_test.go b/exporter/prometheusremotewriteexporter/exporter_test.go index 35ff6028e427..231206eac409 100644 --- a/exporter/prometheusremotewriteexporter/exporter_test.go +++ b/exporter/prometheusremotewriteexporter/exporter_test.go @@ -129,10 +129,11 @@ func Test_NewPRWExporter(t *testing.T) { // Test_Start checks if the client is properly created as expected. func Test_Start(t *testing.T) { cfg := &Config{ - TimeoutSettings: exporterhelper.TimeoutSettings{}, - RetrySettings: exporterhelper.RetrySettings{}, - Namespace: "", - ExternalLabels: map[string]string{}, + TimeoutSettings: exporterhelper.TimeoutSettings{}, + RetrySettings: exporterhelper.RetrySettings{}, + MaxBatchByteSize: 3000000, + Namespace: "", + ExternalLabels: map[string]string{}, TargetInfo: &TargetInfo{ Enabled: true, }, @@ -675,6 +676,7 @@ func Test_PushMetrics(t *testing.T) { ReadBufferSize: 0, WriteBufferSize: 512 * 1024, }, + MaxBatchByteSize: 3000000, RemoteWriteQueue: RemoteWriteQueue{NumConsumers: 1}, TargetInfo: &TargetInfo{ Enabled: true, From c93edb617a362024a433e08d6012be8a81dfacc3 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Mon, 19 Jun 2023 13:10:19 +0300 Subject: [PATCH 4/8] changelog --- ...heus-remote-write-max-batch-byte-size.yaml | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .chloggen/prometheus-remote-write-max-batch-byte-size.yaml diff --git a/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml b/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml new file mode 100644 index 000000000000..acdb745a9436 --- /dev/null +++ b/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml @@ -0,0 +1,20 @@ +# Use this changelog template to create an entry for release notes. +# If your change doesn't affect end users, such as a test fix or a tooling change, +# you should instead start your pull request title with [chore] or use the "Skip Changelog" label. + +# One of 'breaking', 'deprecation', 'new_component', 'enhancement', 'bug_fix' +change_type: enhancement + +# The name of the component, or a single word describing the area of concern, (e.g. filelogreceiver) +component: prometheusremotewriteexporter + +# A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). +note: addition of `max_batch_byte_size` configurable parameter, to allow users to adjust it based on the capabilities of their specific remote storage + +# Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. +issues: [21911] + +# (Optional) One or more lines of additional information to render under the primary note. +# These lines will be padded with 2 spaces and then inserted directly into the document. +# Use pipe (|) for multiline entries. +subtext: From 7f82ed2dadc488930275ef37848dc4f1000de110 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Mon, 19 Jun 2023 13:20:37 +0300 Subject: [PATCH 5/8] default value --- exporter/prometheusremotewriteexporter/config.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/exporter/prometheusremotewriteexporter/config.go b/exporter/prometheusremotewriteexporter/config.go index 66a2ff1e9b45..d9852664d0a7 100644 --- a/exporter/prometheusremotewriteexporter/config.go +++ b/exporter/prometheusremotewriteexporter/config.go @@ -100,9 +100,13 @@ func (cfg *Config) Validate() error { Enabled: false, } } - if cfg.MaxBatchByteSize <= 0 { + if cfg.MaxBatchByteSize < 0 { return fmt.Errorf("max_batch_byte_size must be greater than 0") } + if cfg.MaxBatchByteSize == 0 { + // Defaults to ~2.81MB + cfg.MaxBatchByteSize = 3000000 + } return nil } From 1b2d042fd3d271a68d09315995695ba68f453653 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Thu, 14 Sep 2023 11:41:24 +0300 Subject: [PATCH 6/8] Refactor `MaxBatchByteSize` -> `MaxBatchSizeBytes` --- .../prometheusremotewriteexporter/config.go | 8 ++-- .../config_test.go | 4 +- .../prometheusremotewriteexporter/exporter.go | 42 ++++++++++--------- .../exporter_test.go | 14 +++---- .../prometheusremotewriteexporter/factory.go | 8 ++-- 5 files changed, 39 insertions(+), 37 deletions(-) diff --git a/exporter/prometheusremotewriteexporter/config.go b/exporter/prometheusremotewriteexporter/config.go index 2b470e7a2463..22b0b3a969d9 100644 --- a/exporter/prometheusremotewriteexporter/config.go +++ b/exporter/prometheusremotewriteexporter/config.go @@ -32,7 +32,7 @@ type Config struct { HTTPClientSettings confighttp.HTTPClientSettings `mapstructure:",squash"` // squash ensures fields are correctly decoded in embedded struct. // maximum size in bytes of time series batch sent to remote storage - MaxBatchByteSize int `mapstructure:"max_batch_byte_size"` + MaxBatchSizeBytes int `mapstructure:"max_batch_size_bytes"` // ResourceToTelemetrySettings is the option for converting resource attributes to telemetry attributes. // "Enabled" - A boolean field to enable/disable this option. Default is `false`. @@ -103,12 +103,12 @@ func (cfg *Config) Validate() error { Enabled: false, } } - if cfg.MaxBatchByteSize < 0 { + if cfg.MaxBatchSizeBytes < 0 { return fmt.Errorf("max_batch_byte_size must be greater than 0") } - if cfg.MaxBatchByteSize == 0 { + if cfg.MaxBatchSizeBytes == 0 { // Defaults to ~2.81MB - cfg.MaxBatchByteSize = 3000000 + cfg.MaxBatchSizeBytes = 3000000 } return nil diff --git a/exporter/prometheusremotewriteexporter/config_test.go b/exporter/prometheusremotewriteexporter/config_test.go index d6a98e010eec..19926e845652 100644 --- a/exporter/prometheusremotewriteexporter/config_test.go +++ b/exporter/prometheusremotewriteexporter/config_test.go @@ -40,8 +40,8 @@ func TestLoadConfig(t *testing.T) { { id: component.NewIDWithName(metadata.Type, "2"), expected: &Config{ - MaxBatchByteSize: 3000000, - TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), + MaxBatchSizeBytes: 3000000, + TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), RetrySettings: exporterhelper.RetrySettings{ Enabled: true, InitialInterval: 10 * time.Second, diff --git a/exporter/prometheusremotewriteexporter/exporter.go b/exporter/prometheusremotewriteexporter/exporter.go index e26774081613..dd2d4e9b9488 100644 --- a/exporter/prometheusremotewriteexporter/exporter.go +++ b/exporter/prometheusremotewriteexporter/exporter.go @@ -33,17 +33,18 @@ import ( // prwExporter converts OTLP metrics to Prometheus remote write TimeSeries and sends them to a remote endpoint. type prwExporter struct { - endpointURL *url.URL - client *http.Client - wg *sync.WaitGroup - closeChan chan struct{} - concurrency int - userAgentHeader string - clientSettings *confighttp.HTTPClientSettings - settings component.TelemetrySettings - retrySettings exporterhelper.RetrySettings - wal *prweWAL - exporterSettings prometheusremotewrite.Settings + endpointURL *url.URL + client *http.Client + wg *sync.WaitGroup + closeChan chan struct{} + concurrency int + userAgentHeader string + maxBatchSizeBytes int + clientSettings *confighttp.HTTPClientSettings + settings component.TelemetrySettings + retrySettings exporterhelper.RetrySettings + wal *prweWAL + exporterSettings prometheusremotewrite.Settings } // newPRWExporter initializes a new prwExporter instance and sets fields accordingly. @@ -61,14 +62,15 @@ func newPRWExporter(cfg *Config, set exporter.CreateSettings) (*prwExporter, err userAgentHeader := fmt.Sprintf("%s/%s", strings.ReplaceAll(strings.ToLower(set.BuildInfo.Description), " ", "-"), set.BuildInfo.Version) prwe := &prwExporter{ - endpointURL: endpointURL, - wg: new(sync.WaitGroup), - closeChan: make(chan struct{}), - userAgentHeader: userAgentHeader, - concurrency: cfg.RemoteWriteQueue.NumConsumers, - clientSettings: &cfg.HTTPClientSettings, - settings: set.TelemetrySettings, - retrySettings: cfg.RetrySettings, + endpointURL: endpointURL, + wg: new(sync.WaitGroup), + closeChan: make(chan struct{}), + userAgentHeader: userAgentHeader, + maxBatchSizeBytes: cfg.MaxBatchSizeBytes, + concurrency: cfg.RemoteWriteQueue.NumConsumers, + clientSettings: &cfg.HTTPClientSettings, + settings: set.TelemetrySettings, + retrySettings: cfg.RetrySettings, exporterSettings: prometheusremotewrite.Settings{ Namespace: cfg.Namespace, ExternalLabels: sanitizedLabels, @@ -156,7 +158,7 @@ func (prwe *prwExporter) handleExport(ctx context.Context, tsMap map[string]*pro } // Calls the helper function to convert and batch the TsMap to the desired format - requests, err := batchTimeSeries(tsMap, prwe.maxBatchByteSize) + requests, err := batchTimeSeries(tsMap, prwe.maxBatchSizeBytes) if err != nil { return err } diff --git a/exporter/prometheusremotewriteexporter/exporter_test.go b/exporter/prometheusremotewriteexporter/exporter_test.go index e4a17068e480..875264cfca25 100644 --- a/exporter/prometheusremotewriteexporter/exporter_test.go +++ b/exporter/prometheusremotewriteexporter/exporter_test.go @@ -131,11 +131,11 @@ func Test_NewPRWExporter(t *testing.T) { // Test_Start checks if the client is properly created as expected. func Test_Start(t *testing.T) { cfg := &Config{ - TimeoutSettings: exporterhelper.TimeoutSettings{}, - RetrySettings: exporterhelper.RetrySettings{}, - MaxBatchByteSize: 3000000, - Namespace: "", - ExternalLabels: map[string]string{}, + TimeoutSettings: exporterhelper.TimeoutSettings{}, + RetrySettings: exporterhelper.RetrySettings{}, + MaxBatchSizeBytes: 3000000, + Namespace: "", + ExternalLabels: map[string]string{}, TargetInfo: &TargetInfo{ Enabled: true, }, @@ -685,8 +685,8 @@ func Test_PushMetrics(t *testing.T) { ReadBufferSize: 0, WriteBufferSize: 512 * 1024, }, - MaxBatchByteSize: 3000000, - RemoteWriteQueue: RemoteWriteQueue{NumConsumers: 1}, + MaxBatchSizeBytes: 3000000, + RemoteWriteQueue: RemoteWriteQueue{NumConsumers: 1}, TargetInfo: &TargetInfo{ Enabled: true, }, diff --git a/exporter/prometheusremotewriteexporter/factory.go b/exporter/prometheusremotewriteexporter/factory.go index fb1e50f57cdd..63135b9b8cb5 100644 --- a/exporter/prometheusremotewriteexporter/factory.go +++ b/exporter/prometheusremotewriteexporter/factory.go @@ -68,10 +68,10 @@ func createMetricsExporter(ctx context.Context, set exporter.CreateSettings, func createDefaultConfig() component.Config { return &Config{ - Namespace: "", - ExternalLabels: map[string]string{}, - MaxBatchByteSize: 3000000, - TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), + Namespace: "", + ExternalLabels: map[string]string{}, + MaxBatchSizeBytes: 3000000, + TimeoutSettings: exporterhelper.NewDefaultTimeoutSettings(), RetrySettings: exporterhelper.RetrySettings{ Enabled: true, InitialInterval: 50 * time.Millisecond, From 95c5c92f788d2a2073a54f81289e0ac02dc29416 Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Thu, 14 Sep 2023 11:41:32 +0300 Subject: [PATCH 7/8] docs --- exporter/prometheusremotewriteexporter/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/exporter/prometheusremotewriteexporter/README.md b/exporter/prometheusremotewriteexporter/README.md index 77d197172e68..16b899be50c6 100644 --- a/exporter/prometheusremotewriteexporter/README.md +++ b/exporter/prometheusremotewriteexporter/README.md @@ -64,7 +64,7 @@ The following settings can be optionally configured: - `enabled` (default = false): If `enabled` is `true`, a `_created` metric is exported for Summary, Histogram, and Monotonic Sum metric points if `StartTimeUnixNano` is set. -- `max_batch_byte_size` (default = `3000000` -> `~2.861 mb`): Maximum size of a batch of +- `max_batch_size_bytes` (default = `3000000` -> `~2.861 mb`): Maximum size of a batch of samples to be sent to the remote write endpoint. If the batch size is larger than this value, it will be split into multiple batches. From f17e8c71693e5c0f41f9a98686fd930d8e4c18ff Mon Sep 17 00:00:00 2001 From: Yotam loewenbach Date: Thu, 14 Sep 2023 11:45:10 +0300 Subject: [PATCH 8/8] changelog --- .chloggen/prometheus-remote-write-max-batch-byte-size.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml b/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml index acdb745a9436..a82f3d0c0a31 100644 --- a/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml +++ b/.chloggen/prometheus-remote-write-max-batch-byte-size.yaml @@ -9,7 +9,7 @@ change_type: enhancement component: prometheusremotewriteexporter # A brief description of the change. Surround your text with quotes ("") if it needs to start with a backtick (`). -note: addition of `max_batch_byte_size` configurable parameter, to allow users to adjust it based on the capabilities of their specific remote storage +note: addition of `max_batch_size_bytes` configurable parameter, to allow users to adjust it based on the capabilities of their specific remote storage # Mandatory: One or more tracking issues related to the change. You can use the PR number here if no issue exists. issues: [21911]