docs/benchmark-results/salesforce.md
Benchmarks for the salesforce processor (read/CDC) and salesforce_sink output (write).
See internal/impl/salesforce/bench/ for the benchmark configs and run instructions.
Full snapshot of all SObjects (no query filter), using parallel_fetch=10 and query_batch_size=2000.
Environment: Intel Core i7-10850H @ 2.70GHz, 32 GB RAM, WSL2 (Linux 6.6.87.2), x86_64, remote Salesforce org over internet
Dataset: ~5,000,000 records across all queryable SObjects
Configuration:
parallel_fetch: 10query_batch_size: 2000restapi_version: v65.0Throughput:
INFO rolling stats: 4979 msg/sec, 7.0 MB/sec @service=redpanda-connect bytes/sec=6.993878e+06 label="" msg/sec=4979 path=root.output.processors.0
INFO rolling stats: 5542 msg/sec, 4.7 MB/sec @service=redpanda-connect bytes/sec=4.676375e+06 label="" msg/sec=5542 path=root.output.processors.0
INFO rolling stats: 7530 msg/sec, 5.4 MB/sec @service=redpanda-connect bytes/sec=5.369691e+06 label="" msg/sec=7530 path=root.output.processors.0
INFO rolling stats: 14402 msg/sec, 10 MB/sec @service=redpanda-connect bytes/sec=9.986754e+06 label="" msg/sec=14402 path=root.output.processors.0
INFO rolling stats: 14712 msg/sec, 10 MB/sec @service=redpanda-connect bytes/sec=1.0092878e+07 label="" msg/sec=14712 path=root.output.processors.0
INFO rolling stats: 11281 msg/sec, 8.7 MB/sec @service=redpanda-connect bytes/sec=8.693893e+06 label="" msg/sec=11281 path=root.output.processors.0
Steady state: ~11,000–15,000 msg/sec, 8–10 MB/sec
Observations: Throughput is highly dependent on the data in the Salesforce org — specifically the number of records per SObject, the field count of each SObject (wider objects produce larger messages and slower queries), and the distribution across queryable SObjects. Orgs with different record volumes or schema shapes will see significantly different numbers.
Streams Account change events via the gRPC Pub/Sub API with cdc_replay_preset=earliest.
Environment: Intel Core i7-10850H @ 2.70GHz, 32 GB RAM, WSL2 (Linux 6.6.87.2), x86_64, remote Salesforce org over internet
Dataset: Account change events generated by the write benchmark running concurrently at ~1,000 new Account upserts/sec
Configuration:
cdc_objects: [Account]cdc_batch_size: 100cdc_buffer_size: 1000cdc_replay_preset: earliestThroughput:
INFO rolling stats: 200 msg/sec, 2.2 MB/sec @service=redpanda-connect bytes/sec=2.16551e+06 label="" msg/sec=200 path=root.output.processors.0
INFO rolling stats: 200 msg/sec, 2.2 MB/sec @service=redpanda-connect bytes/sec=2.165481e+06 label="" msg/sec=200 path=root.output.processors.0
INFO rolling stats: 200 msg/sec, 2.2 MB/sec @service=redpanda-connect bytes/sec=2.165464e+06 label="" msg/sec=200 path=root.output.processors.0
INFO total stats: 197.305814 msg/sec, 2.1 MB/sec @service=redpanda-connect bytes/sec=2.130857396314649e+06 label="" msg/sec=197.30581373954723 path=root.output.processors.0
Steady state: 200 msg/sec, ~2.2 MB/sec, ~11 KB per event.
Observations: Throughput is bounded by the Pub/Sub API batch delivery rate and the rate at which Salesforce processes incoming writes (~1,000 upserts/sec from the concurrent write benchmark).
Upserts synthetic Account records via the sObject Collections REST API (mode: realtime, up to 200 records/call).
Environment: Intel Core i7-10850H @ 2.70GHz, 32 GB RAM, WSL2 (Linux 6.6.87.2), x86_64, remote Salesforce org over internet
Configuration:
mode: realtimemax_in_flight: 10bulk_batch_size: 400Throughput:
INFO total stats: 350.528008 msg/sec, 406 kB/sec @service=redpanda-connect bytes/sec=406188.590473545 label="" msg/sec=350.5280077237632 path=root.pipeline.processors.0
Observations: Throughput is ~350 msg/sec at ~1.16 KB per record (synthetic Account with ~30 fields including billing/shipping address, contact info, and custom fields). The batch size of 400 records per call and 10 parallel in-flight requests were the limiting factors on the Connect side. Overall write speed is bounded by Salesforce's request acceptance rate — each sObject Collections call is a synchronous HTTP round-trip, so latency to the Salesforce instance directly caps throughput.
Upserts synthetic Account records via the Bulk API 2.0 (mode: bulk, async CSV upload).
Environment: Intel Core i7-10850H @ 2.70GHz, 32 GB RAM, WSL2 (Linux 6.6.87.2), x86_64, remote Salesforce org over internet
Configuration:
mode: bulkmax_in_flight: 10bulk_batch_size: 400max_concurrent_bulk_jobs: 30Throughput:
INFO total stats: 1066.264001 msg/sec, 1.2 MB/sec @service=redpanda-connect bytes/sec=1.235496338878739e+06 label="" msg/sec=1066.2640005337596 path=root.pipeline.processors.0
Steady state: ~1,066 msg/sec, 1.2 MB/sec, ~1.16 KB per record.
Observations: Bulk API 2.0 delivers ~3x higher write throughput than realtime mode (1,066 vs 350 msg/sec) using the same synthetic Account payload (~1.16 KB, ~30 fields). The gain comes from async CSV upload — Bulk API jobs are submitted and processed server-side in parallel, removing the per-call round-trip latency that caps realtime mode. Throughput is bounded by Salesforce's bulk job processing capacity and the rate at which jobs are accepted.