Contents
- Two paradigms with different operational logic
- Real-time email architecture
- Batch email architecture
- Latency budgets and where time is spent
- Backpressure and the failure modes specific to real-time
- Exactly-once semantics and idempotency
- Cost economics across volume tiers
- The hybrid architecture pattern
- Decision framework
Real-time email sending and batch email sending represent two different operational paradigms with different architectural requirements, different cost economics, and different failure modes. Real-time sending processes events the moment they arrive: a user takes an action, the system emits an event, the event flows through the email pipeline within seconds, and the recipient receives the email within seconds to minutes of the originating event. Batch sending collects messages over a window and processes them on a schedule: campaigns are composed in advance, sent at scheduled times to large audiences, with delivery completing over a window of minutes to hours. The two patterns coexist in most modern email programmes but require different infrastructure and produce different operational characteristics.
This comparison covers the practical differences between real-time and batch email sending in 2026: the architectural patterns that support each (event-streaming backbones for real-time, scheduled campaign infrastructure for batch), the latency budgets and where time is spent in each pipeline, the backpressure failure mode that affects real-time systems when traffic exceeds processing capacity, the exactly-once semantics that prevent duplicate sends in event-driven systems, the cost economics across volume tiers, the hybrid architecture pattern that combines both approaches, and the decision framework for selecting the right pattern for specific use cases.
Two paradigms with different operational logic
Same goal: delivered emails. Different mechanics: event-driven versus schedule-driven.
The architectural logic of the two approaches differs fundamentally. Real-time email is event-driven: the system reacts to events as they arrive, processing each one through trigger evaluation and delivery in a continuous flow. Batch email is schedule-driven: the system collects messages into campaigns, applies operator-defined schedules, and processes the campaigns as discrete units.
Real-time architecture emphasises continuous low-latency processing. Every component in the pipeline is sized to handle the expected event arrival rate plus burst capacity. Failures at any stage manifest as latency degradation that compounds through the pipeline. Operational metrics focus on per-event latency percentiles (p50, p95, p99 from event to delivery).
Batch architecture emphasises throughput optimisation within scheduled windows. The system is sized to push large message volumes through the pipeline efficiently. Failures manifest as campaign completion delays or partial delivery. Operational metrics focus on aggregate throughput (messages per minute, total send window duration) and campaign-level outcomes.
The architectural difference cascades into many specific design decisions: connection management strategies (persistent connections for real-time, batched connections for batch), queue management (priority queues for real-time, FIFO queues for batch), monitoring approaches (per-event tracking for real-time, per-campaign reporting for batch), scaling patterns (continuous capacity for real-time, scheduled capacity for batch), and error handling (immediate retry with backoff for real-time, campaign-level retry policies for batch).
Real-time email architecture
Real-time email infrastructure in 2026 uses an event-streaming architecture borrowed from modern data engineering. The typical components:
Event ingestion layer. Apache Kafka, AWS Kinesis Data Streams, Google Pub/Sub, or RabbitMQ serves as the event ingestion backbone. Producers (product applications, e-commerce platforms, payment processors) publish events to topics; consumers read events and process them. The ingestion layer must handle peak event rates without dropping or delaying events.
Stream processing engine. Apache Flink, Spark Structured Streaming, Kafka Streams, or proprietary stream processors evaluate events against trigger rules, apply transformations, and route matched events to the email-sending stage. The processing engine maintains state (user profiles, journey progress, recent activity) for stateful operations.
In-memory state store. Redis, Memcached, Flink's RocksDB state backend, or other in-memory stores hold the customer context needed for personalisation lookups during event processing. Database round-trips add latency that real-time systems cannot afford for high-frequency lookups; in-memory state achieves sub-millisecond access.
Personalisation and rendering. When a trigger fires and suppression checks pass, the event-specific personalisation is applied to the email template. The rendering must complete quickly to maintain low end-to-end latency; complex template rendering can become a bottleneck if not optimised.
Email-sending platform. The rendered message is submitted to the email delivery platform. For real-time traffic, the platform should be configured for low-latency delivery: persistent connections to recipient mail servers, priority queues for transactional traffic, aggressive retry policies for transient failures. Postmark, Amazon SES with Virtual Deliverability Manager, or self-hosted PowerMTA tuned for transactional delivery are typical choices.
Event tracking and feedback. Delivery events (delivered, bounced, opened, clicked, complained) flow back to the event-streaming layer for downstream processing. This creates a continuous loop where current outcomes inform future event handling.
The real-time architecture is operationally complex compared to batch architectures. Each component must be properly sized, monitored, and operated. Failures at any stage can cascade through the pipeline. The operational complexity is the primary cost of real-time capability; programmes adopting real-time architecture must invest in the operational maturity to run it well.
Batch email architecture
Batch email infrastructure is operationally simpler and optimised for different metrics. The typical components:
Campaign composition. A campaign editor allows marketing teams to design the campaign content with HTML and text versions, merge tags for personalisation, and A/B testing variants. The composed campaign is stored as a template that the sending stage renders for each recipient.
Audience selection. A query interface allows the marketer to select the audience for the campaign based on demographic, behavioural, and engagement criteria. The selected audience is a discrete list of recipients for that specific campaign.
Scheduling and orchestration. The marketer schedules the send time (immediate or future) and any send-time optimisation settings (per-recipient timing optimisation, throttle and ramp for very large sends). The scheduler queues the campaign for execution at the appropriate time.
Campaign execution. At send time, the platform iterates through the audience, renders the template for each recipient, applies suppression checks, and submits messages to the delivery layer. Execution typically uses parallel workers to push messages through the pipeline efficiently.
Throttled delivery. The MTA processes the campaign queue, applying throttling per recipient mail server to respect rate limits and maintain reputation. Large campaigns may take 30 minutes to several hours to complete delivery depending on volume and throttling.
Post-campaign analytics. Delivery events accumulate during the send window and continue post-completion for opens, clicks, and downstream actions. Campaign reporting aggregates these into per-campaign analytics dashboards.
The batch architecture is simpler than real-time in part because the operational rhythm is different. Campaigns are discrete units with clear start and completion; the system is not continuously processing events. Capacity planning is based on peak campaign volume rather than continuous event rates; the system can scale down between campaigns to reduce cost.
Latency budgets and where time is spent
The latency budget for real-time email determines what architectural choices are viable. Understanding where time is spent helps identify optimisation opportunities and realistic latency targets.
A typical real-time email latency budget for event-to-inbox:
| Pipeline stage | Typical latency | Optimisation opportunities |
|---|---|---|
| Event emission to ingestion | 50-500ms | Async event publishing, batched producer flushes |
| Event ingestion to stream processor | 10-100ms | Kafka partition tuning, consumer group optimisation |
| Trigger evaluation | 10-200ms | In-memory state, simplified trigger logic, parallel evaluation |
| Personalisation lookup | 5-50ms | Redis or in-memory cache, batched lookups, pre-computed data |
| Template rendering | 50-300ms | Template caching, simplified merge logic, pre-rendered fragments |
| Suppression checks | 10-50ms | In-memory suppression cache, bloom filters for fast lookups |
| Email API submission | 100-500ms | HTTP/2 connection reuse, persistent connections, regional endpoints |
| Email service queue processing | 500-3000ms | Persistent connections to recipient servers, priority queues |
| SMTP delivery to recipient server | 500-5000ms | Connection reuse, geographic proximity, TLS session resumption |
| Recipient server processing | 1000-10000ms | Outside operator's control; varies by recipient |
| Total typical | 5-15 seconds | Each stage incrementally optimised |
The cumulative latency budget is the sum of all stages. Achieving sub-10-second event-to-inbox latency requires careful optimisation at every stage. Achieving sub-5-second latency requires substantial engineering investment in each component plus operational discipline to maintain the optimisations under load.
The recipient server processing stage (1-10 seconds) is outside the operator's direct control and varies substantially across recipient mail servers. Gmail typically completes processing within 1-2 seconds; Outlook within 1-3 seconds; smaller mail servers may take longer. Operators can choose recipients (or audiences skewed toward fast recipients) but cannot directly optimise this stage.
For batch email, the latency budget is calculated differently. Per-message latency is not tracked; the metric is total campaign send duration. A 100K-recipient campaign typically completes delivery in 30-90 minutes depending on per-recipient-mail-server throttling. A 1M-recipient campaign typically takes 2-6 hours. The batch system can submit messages much faster than recipients process them, so the rate-limiting factor is recipient-side capacity rather than sender-side capacity.
Backpressure and the failure modes specific to real-time
Real-time email systems face failure modes that batch systems rarely encounter. The most common is backpressure: incoming events exceed processing capacity, and lag accumulates until outputs lose operational value.
Backpressure mechanics in email sending:
The event-streaming infrastructure can absorb temporary traffic spikes (Kafka topic buffers, queue depth headroom) but only up to a limit. If sustained traffic exceeds processing capacity, the queue depth grows continuously. Each event waits longer for processing as more events accumulate ahead of it. Eventually, events sit in the queue for so long that the operational value of the resulting email is diminished or eliminated (a cart abandonment email sent 6 hours after the abandonment event has minimal effect; a password reset code sent 30 minutes late may be useless).
The failure mode is silent in poorly-designed systems. The system continues processing events; the events still produce delivered emails; the metrics show successful sends. But the per-event latency has degraded to the point where the emails are no longer functionally useful. Without explicit latency monitoring with appropriate thresholds, operators can be unaware that the system has degraded to non-functional state.
Backpressure handling strategies:
- Rate limiting at submission. Limit the rate at which events can be submitted to the pipeline. When the rate exceeds the limit, events are rejected (with appropriate retry signals) rather than queued indefinitely.
- Queue depth monitoring. Alert when queue depth exceeds operational thresholds. A queue depth of 1,000 events per partition may be normal; a depth of 100,000 indicates the system is falling behind.
- Automatic scaling. Provision additional processing capacity automatically when queue depth or event rate exceeds thresholds. Cloud-native systems can scale horizontally; bare-metal systems require human intervention.
- Priority-based processing. When the system cannot process all events at full rate, prioritise critical events (transactional, time-sensitive) over less critical events (engagement, behavioural). The prioritisation should be explicit rather than implicit.
- Latency SLO enforcement. Define explicit Service Level Objectives for event-to-inbox latency (e.g., 95th percentile under 10 seconds). Alert when SLOs are at risk; take corrective action before SLO violations occur.
- Dead-letter queues. Events that cannot be processed within a reasonable window are routed to dead-letter queues for manual investigation rather than processed late.
An e-commerce client we worked with implemented a real-time cart abandonment email system in 2024. The system worked well at typical traffic levels. During Black Friday weekend, traffic surged to 8x normal volume. The Kafka topics began accumulating lag because the stream processors could not keep up. Cart abandonment events from Black Friday Saturday morning were being processed Sunday afternoon - 30+ hours after the original abandonment. The system continued running and metrics showed "successful" sends, but the emails arriving 30 hours late had near-zero recovery effect. The team did not realise the lag had developed until customer complaints arrived about delayed emails. The fix: explicit latency SLO monitoring with alerts when 95th percentile event-to-send time exceeded 60 seconds, plus automatic stream processor scaling triggered by queue depth. The Black Friday 2025 traffic surge handled cleanly. The lesson: real-time systems need explicit latency monitoring, not just throughput monitoring.
Exactly-once semantics and idempotency
Real-time email systems must handle events exactly once: not zero times (event lost), not twice (duplicate email sent). The exactly-once guarantee is harder to achieve than at-least-once or at-most-once delivery.
The challenge: distributed systems can fail at any point in event processing. An event may be partially processed when a node fails; on recovery, the system must determine whether the event was completed or needs to be reprocessed. Simple retry logic produces duplicate emails when the original event actually completed but the completion signal was lost. Skipping retry produces missing emails when the original event actually failed.
The dominant 2026 pattern uses Kafka with Flink (or similar stream processing engine) and idempotency keys. The mechanics:
Each event gets a unique idempotency key (typically the event ID or a hash of the event content). The processing pipeline tracks which idempotency keys have been completed. When an event is processed, the pipeline checks the key against the completed set; if present, the event is skipped (already processed); if absent, the event is processed and the key is added on completion.
Stream processing engines provide built-in support for this pattern. Flink's exactly-once semantics use distributed snapshots (the Chandy-Lamport algorithm) to checkpoint the entire pipeline state, including processed-key tracking, atomically. On failure, the pipeline restores from the most recent checkpoint and resumes from a known consistent state.
The email delivery platform must also support idempotency at submission. Postmark, SES, SendGrid, and other major platforms accept an idempotency key with each API submission; submissions with duplicate keys are treated as the same submission and not delivered twice. This pushes the exactly-once guarantee through to the SMTP delivery layer.
Programmes without proper exactly-once handling experience occasional duplicate email problems that frustrate users and damage trust. The pattern is particularly noticeable for password resets (user receives two reset codes and is confused about which to use) and for receipts (user receives two receipts for one purchase and worries about being charged twice). Investment in exactly-once semantics is essential for any real-time email system serving production traffic.
Cost economics across volume tiers
The cost economics of real-time versus batch email infrastructure differ across volume tiers in ways that affect architectural decisions.
| Volume tier | Real-time cost driver | Batch cost driver | Crossover |
|---|---|---|---|
| Under 50K monthly | Managed platform per-event cost | Managed platform per-campaign cost | Managed platforms favourable for both |
| 50K-500K monthly | $200-2000/mo for stream processing + delivery | $100-1000/mo for campaign platform | Real-time 2x batch cost |
| 500K-5M monthly | $2K-10K/mo for self-hosted streaming + delivery | $500-3K/mo for campaign platform | Real-time 3-4x batch cost |
| 5M-50M monthly | $10K-30K/mo for production streaming infra | $2K-15K/mo for high-volume campaign infrastructure | Real-time 2-3x batch cost |
| 50M+ monthly | $30K-100K+/mo for enterprise streaming | $15K-50K/mo for enterprise campaign infrastructure | Real-time 2x batch cost |
The real-time premium reflects the additional infrastructure complexity (stream processing engines, in-memory state, monitoring, operational overhead) and the lower utilisation patterns (real-time infrastructure runs continuously even when event rates are low; batch infrastructure can scale down between campaigns).
The premium is justified for traffic where real-time delivery produces business value that exceeds the additional cost. Transactional emails, behavioural triggers, and time-critical notifications typically justify real-time because the delivery timing materially affects business outcomes. Newsletters and scheduled campaigns rarely justify real-time because the timing flexibility of batch is sufficient.
Programmes that try to use real-time for all email typically over-engineer. The cost premium for moving newsletter sending from batch to real-time produces no business benefit because the newsletter timing is operator-controlled regardless. Real-time for newsletters costs more without producing better outcomes.
The hybrid architecture pattern
The dominant 2026 architecture for mature email programmes combines both patterns: real-time for event-driven traffic, batch for scheduled campaigns, with shared underlying infrastructure where appropriate.
The hybrid pattern in practice:
Real-time lane. Handles transactional emails (password resets, OTP codes, receipts, security alerts), behavioural triggers (cart abandonment, browse abandonment, post-purchase), event-driven journeys (welcome series, onboarding sequences), time-critical notifications (payment failures, subscription expirations). Infrastructure: event streaming (Kafka/Kinesis), stream processing (Flink/Streams), in-memory state, low-latency delivery (Postmark/SES with persistent connections).
Batch lane. Handles scheduled newsletters and digests, marketing campaigns, periodic announcements, bulk promotional sends, regulatory communications. Infrastructure: campaign editor and audience selection, scheduling engine, throughput-optimised delivery (SendGrid Marketing, Mailchimp, Klaviyo, self-hosted KumoMTA tuned for batch throughput).
Shared components. Customer Data Platform (Segment, RudderStack, or built-in marketing platform CDPs) serves both lanes for customer context. Suppression list infrastructure applies to both lanes uniformly. Reporting and analytics aggregate across both lanes for unified email programme visibility. Authentication infrastructure (SPF, DKIM, DMARC) covers both lanes.
The hybrid pattern produces benefits each lane independently delivers: real-time lane optimised for event-to-inbox latency, batch lane optimised for campaign throughput and operational simplicity. The shared components avoid duplication while the lane separation prevents one workload from constraining the other.
A SaaS client we worked with operates approximately 3M monthly emails total split roughly 60/40 between batch newsletters and real-time triggered messages. The real-time lane uses Kafka for event ingestion (events from product, Stripe, support tools), Customer.io for orchestration and trigger logic, Postmark for delivery (sub-10-second event-to-inbox latency p95). The batch lane uses Klaviyo for campaign management and delivery with their integrated CDP for audience management. The hybrid architecture costs approximately $1,800 monthly: $1,200 for Customer.io plus Postmark on the real-time side, $600 for Klaviyo on the batch side. A pure real-time architecture handling both workloads would cost approximately $2,500-3,000 monthly with worse operational characteristics for newsletters. A pure batch architecture would handle newsletters fine but produce 5-15 minute latency for transactional emails, which is unacceptable for their security-sensitive product. The hybrid is operationally more complex but produces better cost-and-capability outcomes than either alternative.
Decision framework
The decision framework for real-time versus batch email sending in 2026:
Use real-time for individual messages when: the message is triggered by a specific event (user action, system event, time-based trigger relative to another event); the timing relative to the trigger matters for the message's effectiveness; the recipient may be actively waiting for the message (password resets, OTP codes); the message provides context-specific value that decays rapidly with delay (cart abandonment, abandoned browse).
Use batch for campaigns when: the message is operator-scheduled rather than event-driven; the same content goes to a large audience segment; the recipient is not actively waiting for the message; the timing flexibility of batch is acceptable; the operational simplicity of batch is preferred for the use case.
Use hybrid architectures when: the programme has substantial volume in both patterns; the operational complexity of running both lanes is justified by the volume and business value; the team has or can develop expertise in both patterns.
Choose only real-time when: all email is event-driven (transactional-only programmes, alert-only programmes); the operational overhead of batch infrastructure is not justified by the volume; the team prefers operational simplicity of a single pattern.
Choose only batch when: the programme has no real-time requirements (no transactional, no time-critical triggers); the audience does not have time-sensitive expectations for any email; the volume and use case fit cleanly into scheduled campaigns; operational simplicity is the primary driver.
The 2026 default for most production email programmes is the hybrid pattern with both lanes. Pure-real-time and pure-batch programmes exist but typically reflect specific operational constraints rather than optimal architecture for general use. As programmes grow and traffic patterns diversify, they typically converge on hybrid architectures regardless of where they started.