HTTP vs Kafka Patterns

Key Differences

Aspect HTTP Kafka
Pattern Request-Response (sync) Pub-Sub (async)
Latency End-to-end (request+response) Produce latency + consumer lag
Measurement Response time Time-to-message + processing lag
Success HTTP 200 response Message consumed and processed
Failure HTTP error code Message lost, lag, partition rebalance

HTTP Simulations

Synchronous request-response pattern. Client waits for server response.

Client (Gatling)          Server
    │                       │
    ├─→ Request ────────→  │
    │                       ├─ Process request
    │  ← Response ←────────┤
    │                       │
    └─ Record latency
       (time between send and receive)

Use case: REST APIs, microservices, web applications

Kafka Simulations

Asynchronous pub-sub pattern. Producer sends, consumer processes independently.

Producer (Gatling)    Kafka Broker    Consumer
    │                    │                │
    ├─→ Send msg ──→ ────┤                │
    │                    │── stored        │
    │ (Latency: just │                    │
    │  to broker, not│                    │
    │  to consumer)  │                    │
    │                    ├─→ Message ────→ │
    │                    │                 ├─ Process
    │                    │                 └─ Commit offset
    │                    │
    └─ Continue (don't wait for consumer)

Use case: Event streaming, asynchronous processing, decoupled systems


When to Use HTTP

  • ✅ Testing REST APIs
  • ✅ Synchronous request-response
  • ✅ Microservice-to-microservice calls
  • ✅ User-facing APIs (web, mobile)
  • ✅ Any request-response interaction

When to Use Kafka

  • ✅ Testing message producers
  • ✅ Asynchronous event streaming
  • ✅ High-throughput scenarios (thousands of messages/sec)
  • ✅ Decoupled systems (producer doesn't care about consumer)
  • ✅ Consumer lag analysis
  • ✅ Multi-consumer scenarios

Real-World Example

E-commerce: Order Processing (both patterns)

HTTP pattern (immediate feedback):

Client browser
  └─→ POST /api/orders ──→ Order Service
                           ├─ Save to database
                           ├─ Charge payment
                           ├─ Reserve inventory
                           └─→ 200 OK (order created)

       Client gets immediate response
       Can show "Order Confirmed" immediately

Kafka pattern (async, decoupled):

Order Service
  └─→ Send "OrderCreated" event to Kafka ──→ Kafka Broker
                                             ├─→ Email Service (processes async)
                                             ├─→ Inventory Service (processes async)
                                             ├─→ Analytics Service (processes async)
                                             └─→ Shipping Service (processes async)

  Order Service doesn't wait for all services
  Returns immediately to client
  Services process independently, at own pace
  If one fails, others still work (resilience)


Labs Using Each Pattern

HTTP Labs

  • Lab 1: Basic HTTP
  • Lab 2: HTTP with Feeders
  • Lab 3: Checks & Validation
  • Lab 4: Load Profiles
  • Lab 5: CRUD Operations

Kafka Labs

  • Lab 6: Kafka Producer
  • Lab 7: Kafka with Feeders

Next Steps

Read next: Scenarios & Feeders