How to Tune the aggregate-vector Sink
aggregate-vector reads records from Kafka and writes them into ClickHouse or OpenSearch. Its batching, buffering, retry, and concurrency defaults suit the vast majority of clusters. When the platform-default profile does not fit — for example when ClickHouse is throwing TooManyParts, OpenSearch is tripping its bulk breaker, or you want the collector to trade latency for a bigger flush — the platform exposes tuning knobs on PlatformLogForward.spec.aggregateVector.sinks.*.
Every field is optional. Fields you do not set follow the platform-default baseline; upgrading a cluster that has never touched these knobs is a no-op.
log-storage-operator reconciles PlatformLogForward on every change and rolls aggregate-vector automatically when a knob changes. No kubectl rollout restart is needed.
TOC
Before You BeginWhen to TuneClickHouse sink knobsOpenSearch sink knobsExample — ClickHouseExample — OpenSearchApply and verifyRelated TopicsBefore You Begin
- Alauda Container Platform Log Storage Management installed on the storage cluster, and
PlatformLogForward/platform-defaultisReady. See Installation. - You edit
PlatformLogForwardwithkubectl edit platformlogforward platform-default.
When to Tune
The clickhouse block under spec.aggregateVector.sinks is only rendered when PlatformLogForward.spec.externalStorage.type is clickhouse. The opensearch block is only rendered when the type is opensearch. Setting a knob for the other backend on a running cluster is a silent no-op — the values sit in the CR but never reach Vector. Verify the backend with kubectl get platformlogforward platform-default -o jsonpath='{.spec.externalStorage.type}' before you edit.
Reach for these knobs when you observe one specific symptom in production. Do not preemptively change defaults.
If your symptom is not on this list, capture the storage-side error before tuning; changing a knob without a specific reason usually makes things worse.
ClickHouse sink knobs
Set under spec.aggregateVector.sinks.clickhouse.
Notes:
- The Vector
buffer.typeis alwaysmemoryand is not tunable. Kafka is the durable buffer; a second on-disk buffer inside Vector would duplicate durability without extra safety. When the memory buffer fills, Vector back-pressures the Kafka source and records stay on the broker; a Vector restart replays them from the last committed offset. requestConcurrencyaccepts three forms: the strings"adaptive"or"fixed", or a positive integer written as a string (for example"4"). The platform renders quoted strings as quoted strings and integer strings as bare integers in the Vector configuration.
OpenSearch sink knobs
Set under spec.aggregateVector.sinks.opensearch. The same knobs apply to the legacy Elasticsearch backend (output.type: elasticsearch).
retryPartial: false caveat: only disable partial-failure retry when you have a strong reason (for example, your monitoring cannot tolerate the duplicate-index alert that retries can trigger) and you have verified that duplicates are folded away by the platform's idempotent bulk.action = create + document _id pattern. In earlier ACP releases the default was effectively false and one production cluster silently dropped 79,000 records; the current default true exists to prevent that class of incident.
Notes:
- The Vector
buffer.typeismemoryandbuffer.when_fullisblock; neither is tunable. See the ClickHouse sink notes for the reasoning. compression: gzip,bulk.action: create, andapi_version: v8are fixed by the platform because they express the invariants of the OpenSearch write path (compression saves 3–5× on the wire;create+ document_idkeeps retries idempotent;v8avoids the removed_typefield that OpenSearch 3.7 rejects). These are not exposed as knobs.
Example — ClickHouse
Example — OpenSearch
Apply and verify
After you save the resource:
The Ready column should stay True. log-storage-operator renders the new Vector configuration into the aggregate-vector-config ConfigMap in cpaas-system and rolls the aggregate-vector Deployment.
Verify the new values landed in Vector's configuration:
If a knob you set does not appear in the ConfigMap, check the field name and the PLF status conditions for a validation error.
Related Topics
- Installation — the PLF creation flow.
- How to Override the aggregate-vector Configuration — the escape hatch when the CRD does not expose the field you need.