blob: 6e98b0b1f18b59da431bec37f31ff60079768065 [file] [view]
# Introduction
**Audience:** anyone evaluating EventMesh what it is, what problems it
solves, and how its pieces fit together. Everything here is elaborated in the
[documentation map](index.md).
---
## What is EventMesh?
Apache EventMesh is an **application-layer event mesh** that sits between
your applications and your messaging backends (Apache RocketMQ, Apache
Kafka, …). Applications talk to EventMesh over plain **HTTP using the
[CloudEvents 1.0](https://cloudevents.io) format**; EventMesh talks to the
broker on their behalf.
The defining design decision: **the broker is used purely as a write-ahead
log (WAL)**. EventMesh itself owns every delivery semantic subscriptions,
offsets, retries, dead-lettering, load balancing. This inversion is what
makes the rest of the properties possible:
| Property | How it follows |
| --- | --- |
| **Client simplicity** | An app only needs an HTTP client and CloudEvents. No MQ client libraries, consumer groups, or broker credentials in application space. |
| **Backend freedom** | Switching RocketMQ Kafka is a runtime configuration change; the client API and semantics do not move. |
| **Elastic scale** | The runtime is stateless with respect to delivery cluster state lives in a meta store and local RocksDB, so scaling is adding instances. |
| **Uniform reliability** | ACK-tracked at-least-once delivery, exponential-backoff retries, and a dead-letter queue identical across every backend. |
| **Event-driven agents** | The A2A protocol turns the same substrate into an agent collaboration bus with durable tasks and streamed replies. |
## The three planes
1. **Data plane** the wire path: publish, subscribe, poll, ACK, push
(long-poll / SSE / WebSocket), request-reply. Implemented in the
`eventmesh-runtime` module around a single internal frame type
(`EventMeshFrame`). See [Architecture overview](architecture/overview.md).
2. **Control plane** everything stateful: subscriptions, sessions,
offsets, dead-letter and A2A task records, each behind a typed store
(L1 local / L2 cluster-shared / L3 durable). Multi-instance coordination
runs over a meta store (Nacos today). See
[Control plane](feature/control-plane.md).
3. **Agent plane** the A2A gateway: a task lifecycle
(`submitted → working → completed | failed | canceled`) mapped onto the
same pub/sub substrate, so agent workloads inherit durability, quota, and
observability. See [A2A protocol](feature/a2a.md)
*(Experimental)*.
## What a deployment looks like
```
┌─────────────────────────────┐
publishers / │ EventMesh Runtime(s) │ storage backend
subscribers ─HTTP─▶│ 10105 traffic 10106 admin │─WAL──▶ RocketMQ / Kafka
(SDK or curl) │ 10107 WebSocket (opt-in) │ (pluggable SPI)
└──────────────┬──────────────┘
│ meta (optional, multi-instance)
Nacos meta store
```
- **One process per instance**, launched by `bin/start.sh` or the Docker
image; traffic and admin HTTP are on separate ports so data and management
never interfere.
- **Multi-instance is opt-in**: point every instance at the same meta store
and partitions are owned by exactly one instance (CAS + fencing), with no
duplicate consumption.
- **Connectors** (Kafka, JDBC, Slack, ChatGPT, …) run in a *separate*
process (`eventmesh-connector-runtime`) and talk to the runtime over the
same HTTP + CloudEvents contract a misbehaving connector cannot poison
the data plane.
## Feature highlights
| Feature | One-liner | Detail |
| --- | --- | --- |
| CloudEvents pub/sub | Vendor-neutral events over HTTP; the runtime owns semantics | [Publish & subscribe](feature/pubsub.md) |
| Delivery reliability | At-least-once with ACK tracking, retries, DLQ, crash recovery | [Reliable delivery](feature/delivery-reliability.md) |
| Multiple transports | Long-poll, SSE, WebSocket, request-reply | [Streaming](feature/streaming.md) |
| LLM streaming | Mode-1 streaming calls and Mode-2 pub/sub sessions | [Streaming](feature/streaming.md) |
| Lite Topic | RocketMQ 5.x hierarchical messaging | [Lite Topic](feature/lite-topic.md) |
| A2A protocol | Durable agent-to-agent tasks bridging MCP / JSON-RPC | [A2A](feature/a2a.md) |
| Security gate | Auth filters + per-tenant quota + audit at every ingress | [Security](architecture/security.md) |
| Observability | Prometheus metrics, traces, health, SLOs/alerts | [Observability](feature/observability.md) |
| Pluggable storage | `MeshStoragePlugin` SPI with a TCK per backend | [Storage SPI](feature/storage-spi.md) |
| Connectors | 23 source/sink plugins in a separate process | [Deployment](feature/deployment.md#connectors) |
## Try it in five minutes
```shell
docker run -d --name eventmesh \
-e EVENTMESH_STORAGE_TYPE=kafka \
-e EVENTMESH_KAFKA_NAMESRV=YOUR_KAFKA:9092 \
-p 10105:10105 -p 10106:10106 \
apache/eventmesh:latest
curl -X POST "http://localhost:10105/events/publish?topic=hello" \
-H "Content-Type: application/cloudevents+json" \
-d '{"specversion":"1.0","id":"1","source":"/demo","type":"demo.hello","data":"world"}'
```
Continue with the [Quickstart](quickstart/getting-started.md).
## Subprojects
The EventMesh ecosystem also maintains separate repositories:
[EventMesh-workflow](https://github.com/apache/eventmesh-workflow)
(serverless workflow orchestration),
[EventMesh-dashboard](https://github.com/apache/eventmesh-dashboard)
(operations console),
[EventMesh-catalog](https://github.com/apache/eventmesh-catalog)
(event schema catalog using AsyncAPI), and language SDKs under
`eventmesh-sdks/` (Java, Go, C, Rust).