Prakash Mishra
06/25/2026, 7:41 AMkapa.ai
06/25/2026, 7:42 AMfetchSize parameter. Airbyte uses a dynamic fetch size computation to determine how many records to pull per batch. [Scaling Airbyte]
The key memory concern on the source side is that the Source worker reads up to ~10,000 records in memory at a time. So the memory required depends on your average row size, not the total dataset size. For example:
> A table with an average row size of 0.5MB will require 0.5 × 10,000 / 1,000 = 5GB of RAM.
[Scaling Airbyte]
Destination Side (Writing Data) Destination connectors also process records in batches — currently set at 10,000 records per batch. This means large datasets are written incrementally, not all at once. [Memory & Batching]
What Can Go Wrong (OOM Errors) Even though data is batched, OOM (Out of Memory) errors can still occur if:
• Your row sizes are very large (wide tables with big columns)
• The connector doesn't support chunked reads (e.g., the ClickHouse connector has this known issue) [ClickHouse Issue]
• Memory buffers accumulate across multiple tables in a single sync [MySQL Ingest]
Recommendations for Your 34GB Sync 1. Increase VM/container memory — use JOB_MAIN_CONTAINER_MEMORY_REQUEST and JOB_MAIN_CONTAINER_MEMORY_LIMIT to allocate more memory to connector pods. At least 16GB RAM is recommended for large syncs. [MySQL Ingest]
2. Split connections — create multiple Airbyte connections for different subsets of tables to parallelize and reduce per-sync memory pressure. [Postgres Memory]
3. Use Incremental sync after the initial historical load — subsequent syncs will only process new/changed data, drastically reducing memory needs. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Prakash Mishra
06/25/2026, 7:50 AMkapa.ai
06/25/2026, 7:50 AMJOB_MAIN_CONTAINER_MEMORY_LIMIT. [Configuring Resources]
For more granular details on Databricks connector internals (e.g., staging behavior, batch flush thresholds), I'd recommend checking the Airbyte Databricks connector documentation directly or raising a question in the Airbyte community forum. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsPrakash Mishra
06/26/2026, 3:55 AMkapa.ai
06/26/2026, 3:55 AMorchestrator pod
• read (source) pod — reads from BigQuery
• write (destination) pod — writes to Databricks
[Enterprise Scaling]
Memory Concern — The Critical Part The main memory concern is on the source (BigQuery read) pod. Airbyte reads up to 10,000 records at a time into memory. So the memory needed depends on your average row size, not the total 35GB directly:
> Memory needed = avg_row_size_MB × 10,000 / 1,000
For example:
• Avg row = 0.1 MB → ~1 GB RAM needed
• Avg row = 0.5 MB → ~5 GB RAM needed
• Avg row = 1 MB → ~10 GB RAM needed
[Scaling Airbyte]
With 16 GB per node, you have reasonable headroom for most row sizes, but large row sizes could still cause OOM errors.
Kubernetes Pod Scheduling Airbyte recommends your cluster can schedule up to:
> 2 × <number of concurrent connections> pods at once
[Scaling Airbyte]
For a single 35GB sync, you need only 3 pods — well within your 3-node cluster's capacity.
Recommendations 1. Check your average row size — this is the most important factor. If rows are large (>0.5 MB), consider increasing memory limits:
global:
jobs:
resources:
limits:
cpu: "2"
memory: "8Gi"
requests:
cpu: "500m"
memory: "4Gi"
[Enterprise Scaling]
2. Monitor actual usage — check your job logs for the resource configuration being applied. It will look like:
[source] image: airbyte/source-bigquery:x.x.x resources: ResourceRequirements(limits={memory=2Gi, cpu=1}, requests={memory=1Gi, cpu=0.5})
[destination] image: airbyte/destination-databricks:x.x.x resources: ...
[Debugging Resources]
3. Expect a long sync time — 35GB historical syncs can take several hours depending on connector throughput. This is normal for an initial full refresh.
4. Plan for incremental syncs after — once the historical load is done, switch to incremental mode to avoid re-syncing 35GB every time.
Bottom Line Your setup (3 × 4vCPU/16GB nodes) is likely sufficient for a single 35GB sync, provided your row sizes are not extremely large. The main risk is OOM on the source pod if rows are wide. I'd recommend tuning JOB_MAIN_CONTAINER_MEMORY_LIMIT based on your actual row size before running the sync. [Configuring Resources] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsPrakash Mishra
06/26/2026, 4:15 AMkapa.ai
06/26/2026, 4:15 AM[initContainer] resources: limits={memory=2Gi, cpu=0.5}, requests={memory=2Gi, cpu=0.3}
[GitHub Issue]
Known Issue ⚠️ There is a known open bug where REPLICATION_ORCHESTRATOR_CPU_REQUEST and REPLICATION_ORCHESTRATOR_CPU_LIMIT environment variables are not always applied correctly — the workload-launcher defaults to cpu=2 for both request and limit regardless of configuration. [GitHub Issue]
Bottom Line • Orchestrator: ~*1 vCPU* is sufficient (not 2)
• Init container: ~*0.3–0.5 vCPU*
• However, due to the known bug, you may see 2 vCPU being allocated by default even if you configure lower values 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elementsPrakash Mishra
06/26/2026, 4:17 AMKnown Issue ⚠️
There is a known open bug where REPLICATION_ORCHESTRATOR_CPU_REQUEST and REPLICATION_ORCHESTRATOR_CPU_LIMIT environment variables are not always applied correctly — the workload-launcher defaults to cpu=2 for both request and limit regardless of configuration.
then I can't assign 2vCPU directly to jobs.. because theat will lead to resource exhaustionkapa.ai
06/26/2026, 4:17 AMPending state with Insufficient CPU — exactly as reported by other users. [GitHub Issue]
Workarounds Available Since the Helm/env var configuration is unreliable due to the bug, the community-confirmed workarounds are:
1. Set resource limits directly in the database (most reliable)
UPDATE connection
SET resource_requirements = '{
"cpu_request": "0.25",
"cpu_limit": "0.9",
"memory_request": "512Mi",
"memory_limit": "1850Mi"
}'::jsonb
WHERE id = '<your-connection-id>';
[GitHub Issue]
> ⚠️ Note: This applies to source/destination containers only, not the orchestrator.
2. Use a Kubernetes Mutating Webhook to intercept and patch replication pods before they start — this is the only confirmed way to control orchestrator container resources until the bug is fixed. [GitHub Issue]
3. Use whole CPU units instead of millicores when configuring via env vars, as millicore parsing is also broken:
workloadLauncher:
extraEnv:
- name: JOB_MAIN_CONTAINER_CPU_LIMIT
value: "1" # Use "1" NOT "1000m"
- name: JOB_MAIN_CONTAINER_CPU_REQUEST
value: "1"
[GitHub Issue]
Bottom Line Given the bug, for your 4 vCPU / 16 GB nodes, I'd recommend:
• Running only 1 sync at a time on each node until the bug is fixed
• Applying the database-level workaround for source/destination containers
• Monitoring pod scheduling closely for Insufficient CPU warnings 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help., with interactive elements