// the find
apache/eventmesh
EventMesh is a new generation serverless event middleware for building distributed event-driven applications.
Apache EventMesh is a CloudEvents-native event bus that sits between your microservices and message brokers, abstracting away Kafka, RocketMQ, Pulsar, and others behind a single protocol layer. It's aimed at teams running heterogeneous event infrastructure who want a unified gateway for pub/sub, filtering, transformation, and workflow orchestration. Think of it as an ESB that learned from the ESB era's mistakes — mostly.
CloudEvents compliance is built-in, not bolted on — events flow through the system in a standard envelope, which means your connectors and consumers don't need broker-specific serialization logic. The connector model is genuinely extensible: source/sink pairs for Kafka, RocketMQ, Pulsar, Redis, MySQL CDC, HTTP, DingTalk, and more are all pluggable via the openConnect interface. The serverless workflow engine integration (via the CNCF Serverless Workflow spec) is a real differentiator — you can express multi-step event orchestration declaratively without writing a custom state machine. The admin server with gRPC and HTTP surfaces plus job/position tracking shows they've thought about operational visibility, not just the happy path.
The module sprawl is significant — eventmesh-runtime, eventmesh-admin-server, eventmesh-connectors, eventmesh-openconnect, plus five separate subprojects, means the operational surface area for a self-hosted deployment is large before you've written a single line of business logic. The meta/registry layer requires Consul, Nacos, etcd, or ZooKeeper, which means you're adding another piece of infrastructure just to run EventMesh itself — not great for teams without existing service-discovery infrastructure. Documentation quality is uneven: the quick-start gets you to 'send a message' in five shell commands, but anything past that (connector configuration, workflow authoring, multi-datacenter federation) requires digging through scattered markdown files and a website that doesn't always match the current code. The Go implementation is a separate repo and clearly secondary — don't expect parity if your stack isn't JVM.