Shawna Zhao
03/11/2026, 11:46 AMkapa.ai
03/11/2026, 11:46 AMSource process exited with non-zero exit code 143 is a known issue in Airbyte. Exit code 143 typically means the process received a SIGTERM signal (i.e., it was terminated), which can happen in a few scenarios:
Common Causes
1. Job cancellation: Exit code 143 is normal when a sync job is manually cancelled. As noted in Airbyte's own log messages: "This warning is normal if the job was cancelled." [sync cancellation]
2. Out of Memory (OOM): A very common cause is the sync process running out of memory, especially when handling large amounts of data. This causes the container/process to be killed with a SIGTERM. [exit code 143 OOM]
3. Large data volumes: Syncs processing large datasets (hundreds of MBs or GBs) are particularly prone to this issue. [large sync failures]
Recommended Solutions
1. Increase memory allocation (OSS/self-hosted only): Increase the memory limits for your sync jobs by raising the JOB_MAIN_CONTAINER_MEMORY_REQUEST and JOB_MAIN_CONTAINER_MEMORY_LIMIT environment variables on your scheduler and worker pods. Values like 4GB–8GB are commonly suggested. [exit code 143 fix; custom source OOM]
2. Reduce batch/data size: If possible, reduce the date range or scope of the sync to process smaller chunks of data at a time. [OOM large records]
3. Check for large individual records: Very large individual records (e.g., 500MB+ JSON payloads) can cause memory pressure during processing. [OOM large records]
4. Retry the sync: In some cases, the issue is transient and a retry resolves it. [sync failures]
Next Steps
To better diagnose the issue, check your full sync logs for any OOM-related messages or signs of the process being killed due to resource constraints. If you are on Airbyte Cloud, you may need to contact Airbyte support, as memory configuration is not user-adjustable there. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 11:53 AMERROR DefaultDispatcher-worker-1 i.a.c.l.t.DestinationTaskLauncher$WrappedTask(execute):129 Caught exception in task io.airbyte.cdk.load.task.internal.InputConsumerTask@44639c80 io.airbyte.cdk.TransientErrorException: Input was fully read, but some streams did not receive a terminal stream status message. If the destination did not encounter other errors, this likely indicates an error in the source or platform. Streams without a status message: [stripe_source.invoice_items, stripe_source.refunds, stripe_source.balance_transactions, stripe_source.accounts, stripe_source.customers, stripe_source.shipping_rates, stripe_source.disputes, stripe_source.customer_balance_transactions, stripe_source.credit_notes, stripe_source.invoices, stripe_source.payment_intents, stripe_source.prices, stripe_source.payment_methods, stripe_source.charges, stripe_source.transactions, stripe_source.subscription_schedule, stripe_source.subscriptions, stripe_source.subscription_items, stripe_source.invoice_line_items, stripe_source.transfer_reversals, stripe_source.plans, stripe_source.coupons, stripe_source.transfers, stripe_source.events, stripe_source.products, stripe_source.promotion_codes]
at io.airbyte.cdk.load.state.SyncManager.markInputConsumed(SyncManager.kt:116) ~[bulk-cdk-toolkit-legacy-task-loader-0.2.0.jar:?]
at io.airbyte.cdk.load.state.PipelineEventBookkeepingRouter.close(PipelineEventBookkeepingRouter.kt:300) ~[bulk-cdk-toolkit-legacy-task-loader-0.2.0.jar:?]
at io.airbyte.cdk.load.task.internal.InputConsumerTask.execute(InputConsumerTask.kt:117) ~[bulk-cdk-toolkit-legacy-task-loader-0.2.0.jar:?]
at io.airbyte.cdk.load.task.internal.InputConsumerTask$execute$1.invokeSuspend(InputConsumerTask.kt) ~[bulk-cdk-toolkit-legacy-task-loader-0.2.0.jar:?]
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33) [kotlin-stdlib-2.1.10.jar:2.1.10-release-473]
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704) [kotlinx-coroutines-core-jvm-1.10.2.jar:?]
Stack Trace: io.airbyte.cdk.TransientErrorException: Input was fully read, but some streams did not receive a terminal stream status message. If the destination did not encounter other errors, this likely indicates an error in the source or platform. Streams without a status message: [stripe_source.invoice_items, stripe_source.refunds, stripe_source.balance_transactions, stripe_source.accounts, stripe_source.customers, stripe_source.shipping_rates, stripe_source.disputes, stripe_source.customer_balance_transactions, stripe_source.credit_notes, stripe_source.invoices, stripe_source.payment_intents, stripe_source.prices, stripe_source.payment_methods, stripe_source.charges, stripe_source.transactions, stripe_source.subscription_schedule, stripe_source.subscriptions, stripe_source.subscription_items, stripe_source.invoice_line_items, stripe_source.transfer_reversals, stripe_source.plans, stripe_source.coupons, stripe_source.transfers, stripe_source.events, stripe_source.products, stripe_source.promotion_codes]
at io.airbyte.cdk.load.state.SyncManager.markInputConsumed(SyncManager.kt:116)
at io.airbyte.cdk.load.state.PipelineEventBookkeepingRouter.close(PipelineEventBookkeepingRouter.kt:300)
at io.airbyte.cdk.load.task.internal.InputConsumerTask.execute(InputConsumerTask.kt:117)
at io.airbyte.cdk.load.task.internal.InputConsumerTask$execute$1.invokeSuspend(InputConsumerTask.kt)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:100)
at kotlinx.coroutines.internal.LimitedDispatcher$Worker.run(LimitedDispatcher.kt:124)
at kotlinx.coroutines.scheduling.TaskImpl.run(Tasks.kt:89)
at kotlinx.coroutines.scheduling.CoroutineScheduler.runSafely(CoroutineScheduler.kt:586)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.executeTask(CoroutineScheduler.kt:820)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.runWorker(CoroutineScheduler.kt:717)
at kotlinx.coroutines.scheduling.CoroutineScheduler$Worker.run(CoroutineScheduler.kt:704)kapa.ai
03/11/2026, 11:53 AMTransientErrorException: Input was fully read, but some streams did not receive a terminal stream status message is a destination-side error that occurs because the source (Stripe) failed to emit terminal stream status messages before it was killed (exit code 143).
In other words, the two errors are connected:
1. The source process was terminated (exit code 143, likely OOM)
2. Because the source was killed abruptly, it never sent the required terminal status messages to the destination
3. The destination (which uses CDK v3) then throws this TransientErrorException because it expects those messages [streams without status]
This is a known issue. As confirmed in a GitHub issue, this error means the destination did not receive the required STREAM_STATUS messages that CDK v3 destinations expect. The error message itself even hints at this: "If the destination did not encounter other errors, this likely indicates an error in the source or platform." [HubSpot associations issue]
What This Means for You
Since you're using source-stripe with a large number of streams (26 streams listed in the error), the most likely root cause remains the OOM / exit code 143 issue from the source. The destination error is a downstream consequence.
Recommended Actions
1. Address the root cause first: Focus on resolving the exit code 143 issue (increase memory, reduce sync scope, etc.) as described in the previous answer. Once the source completes successfully and emits proper status messages, the destination error should also resolve.
2. Check for Stripe-specific memory issues: There is a known memory leak in source-stripe related specifically to invoice_line_items and subscription_items streams, where memory continuously grows until the container is OOMKilled. [Stripe memory leak] Both of these streams appear in your error list, which strongly suggests this known bug may be affecting you.
3. Update your source-stripe connector: If you are on an older version of source-stripe, check if a newer version has addressed the memory leak. The known issue was observed on version 5.12.0.
4. Reduce the number of streams: As a temporary workaround, try syncing fewer streams at a time to reduce memory pressure. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 12:03 PMkapa.ai
03/11/2026, 12:03 PMJOB_MAIN_CONTAINER_CPU_REQUEST — the job container's minimum CPU usage
• JOB_MAIN_CONTAINER_CPU_LIMIT — the job container's maximum CPU usage
[configuring connector resources]
So the request should be smaller than or equal to the limit. For example, from a real-world configuration seen in the knowledge sources:
JOB_MAIN_CONTAINER_CPU_REQUEST: "1"
JOB_MAIN_CONTAINER_CPU_LIMIT: "2"
[custom source OOM]
> ⚠️ Important note on millicore notation: There is a known bug where specifying CPU values using Kubernetes millicore notation (e.g., 4000m) causes sync failures, because Airbyte misinterprets the value. As a workaround, use whole CPU units (e.g., '4' instead of '4000m'). [millicore bug] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 12:04 PMkapa.ai
03/11/2026, 12:04 PMJOB_MAIN_CONTAINER_CPU_REQUEST | 1 or 2 |
| JOB_MAIN_CONTAINER_CPU_LIMIT | 2 or 4 |
| JOB_MAIN_CONTAINER_MEMORY_REQUEST | 2Gi or 4Gi |
| JOB_MAIN_CONTAINER_MEMORY_LIMIT | 4Gi or 8Gi |
[Helm config example; custom source OOM]
For Your Specific Case
Given that you're syncing 26 Stripe streams and experiencing OOM-related failures, a reasonable starting point would be:
JOB_MAIN_CONTAINER_CPU_REQUEST: "2"
JOB_MAIN_CONTAINER_CPU_LIMIT: "4"
JOB_MAIN_CONTAINER_MEMORY_REQUEST: "4Gi"
JOB_MAIN_CONTAINER_MEMORY_LIMIT: "8Gi"
> ⚠️ Remember to use whole CPU units (e.g., "4") rather than millicore notation (e.g., "4000m") due to a known parsing bug. [millicore bug] 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 12:34 PMlimits:
cpu: "2"
memory: "2Gi"
requests:
cpu: "2"
memory: "1Gi"kapa.ai
03/11/2026, 12:34 PMvalues.yaml or environment variables are ignored by the workload launcher in some Airbyte versions. [resource limits ignored]
A workaround is to set the resource environment variables directly on the workload-launcher deployment using extraEnv, rather than relying on the ConfigMap:
workloadLauncher:
extraEnv:
- name: JOB_MAIN_CONTAINER_CPU_LIMIT
value: "4"
- name: JOB_MAIN_CONTAINER_CPU_REQUEST
value: "2"
- name: JOB_MAIN_CONTAINER_MEMORY_LIMIT
value: "8Gi"
- name: JOB_MAIN_CONTAINER_MEMORY_REQUEST
value: "4Gi"
[resource limits ignored]
After applying this, you can verify the values are actually reaching the workload-launcher pod by running:
kubectl exec -n airbyte deploy/airbyte-abctl-workload-launcher -- env | grep JOB_MAIN
[resource limits ignored]
> ⚠️ Also note: your current config has requests.cpu equal to limits.cpu ("2"), which is valid, but requests.memory (1Gi) is lower than limits.memory (2Gi), which is the correct pattern (request ≤ limit). 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 12:35 PMShawna Zhao
03/11/2026, 12:38 PMkapa.ai
03/11/2026, 12:38 PMglobal.jobs.resources Helm structure
Some users have reported success with this approach after forcing a recreation of the worker pod:
global:
jobs:
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"
[workload resource requests]
2. Set resource requirements directly in the database
As a last resort, one user reported success by setting resource_requirements directly at the connection level in the database when nothing else worked: [workload resource requests]
> _"I end up with setting resource_requirements directly in database on a connection level and it worked well."_
3. Verify what the pod actually sees
First confirm whether the env vars are even reaching the workload-launcher pod:
kubectl exec -n airbyte deploy/airbyte-abctl-workload-launcher -- env | grep JOB_MAIN
If the values are present in the pod's environment but still not applied to replication pods, this confirms the bug where the workload-launcher uses its own internal defaults (2Gi/2CPU) instead of the configured values. [resource limits ignored]
Current Status
This issue has been escalated to Airbyte's internal engineering team for investigation (tracked internally as airbytehq/oncall#11290). [resource limits ignored] There is no confirmed fix available yet, so the database-level override may be your most reliable option in the meantime. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 12:38 PMjobs:
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"Shawna Zhao
03/11/2026, 12:40 PMjobs:
resources:
requests:
cpu: "2"
memory: "4Gi"
limits:
cpu: "4"
memory: "8Gi"kapa.ai
03/11/2026, 12:40 PMresource_requirements directly in the Airbyte database at the connection level:
> _"Nothing of the above worked so I ended up with setting resource_requirements directly in the database on a connection level and it worked well."_ [workload resource requests]
What You Can Do Now
1. Database-level override: Set resource_requirements directly in the database for your connection(s). This has been confirmed as working by multiple users when all other methods failed. [workload resource requests]
2. Verify env vars are reaching the pod: Before anything else, confirm whether the variables are even visible inside the workload-launcher pod:
kubectl exec -n airbyte deploy/airbyte-abctl-workload-launcher -- env | grep JOB_MAIN
If the values are present but still not applied to replication pods, this definitively confirms the internal bug. [resource limits ignored]
3. Wait for a fix: This has been escalated to Airbyte's internal engineering team (airbytehq/oncall#11290), but there is no confirmed fix available yet. [resource limits ignored]
The knowledge sources do not provide the exact SQL to update the database directly, so I'd recommend reaching out to Airbyte support or the GitHub issue thread for the specific database update syntax. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 1:48 PMkapa.ai
03/11/2026, 1:48 PMkubectl get pods -n airbyte
kubectl describe pod <job-pod-name> -n airbyte
This will show you the actual nodeSelector, resources.requests, and resources.limits applied to the pod.
Configuring nodeSelector for Job Pods
For job pods (sync/check/discover), the node selector is controlled via the JOB_KUBE_NODE_SELECTORS environment variable or via the Helm values under global.jobs.kube.nodeSelector. [configuring Airbyte jobs]
In your `values.yaml`:
global:
jobs:
kube:
nodeSelector:
cloud.google.com/gke-spot: "true"
Or via extraEnv on the workload-launcher:
workload-launcher:
extraEnv:
- name: JOB_KUBE_NODE_SELECTORS
value: "cloud.google.com/gke-spot=true"
[values.yaml reference]
> ⚠️ Note: As discussed in our previous conversation, there is a known bug where resource configurations may not be properly applied to job pods by the workload-launcher. The same may apply to node selectors. I'd recommend verifying the actual pod spec after applying the config to confirm it's taking effect. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 2:08 PMkapa.ai
03/11/2026, 2:09 PMupdate actor_definition
set resource_requirements = '{"jobSpecific": [{"jobType": "sync", "resourceRequirements": {"cpu_limit": "4", "cpu_request": "2", "memory_limit": "8Gi", "memory_request": "4Gi"}}]}'
where id = '<id-from-step-1>';
[configuring connector resources]
After applying any change, re-run a sync and check the log again for the Launching replication pod line to confirm the new values are being used. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.Shawna Zhao
03/11/2026, 2:09 PMShawna Zhao
03/11/2026, 9:51 PMkapa.ai
03/11/2026, 9:52 PMrecordsSynced=0, bytesEmitted=0, recordsCommitted=0
The sync completed "successfully" but nothing was actually moved.
3. Truncate refresh generation ID mismatch
There is an open bug where a truncate refresh sync silently produces empty final tables due to a generation ID mismatch in TypeAndDedupe — raw tables are populated correctly, but final tables are overwritten with empty temp tables, and the sync still reports success. [generation ID mismatch]
What to Check
1. Review the sync summary metrics in the Connection Timeline — check the actual number of extracted records and loaded records. If both are 0, the source emitted nothing. [connection timeline]
2. Check the start date configured for your Stripe source — if the start date is set too recently or incorrectly, the source may legitimately return 0 records. [Stripe no records]
3. Check the job logs for lines like recordsEmitted=0 or absence of SELECT / FETCH / EMITTED RECORDS log entries, which would confirm the source sent nothing.
4. Given your previous OOM issues: Since your source process was being killed (exit code 143), it's very likely the source was terminated before emitting any records, causing the destination to receive nothing — yet the job may still report success after retries. This aligns directly with the errors you were seeing earlier in our conversation. 👍 0 button 👎 0 button ℹ️ Tip: Mention @kapa.ai in the thread for follow-ups or DM the app for 1-to-1 help.