Apache Kafka vs NATS: when each one fits
Choose Apache Kafka when your main need is a partitioned event log built for high-volume streaming, where consumers replay history and a large ecosystem of connectors moves data in and out of other systems. Choose NATS when you need a lightweight messaging server that is simple to run, with JetStream added on the same process to provide persistence. Both can carry events between services, but they optimize for different shapes of work, and the wrong choice shows up later as either an over-built cluster or a stream layer that cannot keep up with replay and retention demands.
Kafka fits best when retention and replay are central, when partitions let you scale consumer groups across high message volumes, and when Kafka Connect source and sink connectors reduce custom integration work. It also suits teams ready to run a KRaft cluster, since Apache Kafka 4.0 supports only KRaft mode and the upgrade notes require ZooKeeper-based clusters to migrate first. NATS fits better for edge sites, small footprints and multi-tenant messaging. Its server is a single binary that the NATS documentation describes as typically using about 15 MB of memory, and NATS accounts isolate messaging domains within one server or cluster. JetStream streams offer at-least-once delivery and replay from several starting points, and its tooling includes bridges to Kafka.
The decision turns on six questions: how much replay you need and for how long, how much volume you expect, whether tenants must be isolated inside one platform, how many existing connectors you need, how little footprint the edge sites can spare, and how many operators you can staff. Before committing, confirm JetStream's replication settings against your durability target (the NATS clustering documentation recommends R3 as the production floor) and check your Kafka client and connector versions against the supported releases on the Kafka downloads page.
Which platform fits which scenario
This table maps common workloads to the platform that usually fits better, with the condition that would reverse the choice. Read each row as a starting point and test it against your own throughput, retention, tenancy and team skills before committing.
| Scenario | Better fit | Why and when the other platform wins |
|---|---|---|
| High-volume analytics pipelines | Apache Kafka | Partitioned logs with consumer groups and Kafka Connect sinks suit sustained high throughput into warehouses and lakes. NATS wins if the volume is modest and the pipeline is mostly small service-to-service events. |
| Event sourcing with long replay windows | Apache Kafka | Retention is configured per topic and consumers replay by offset across long histories. JetStream also replays from a sequence or time, so NATS fits if stream sizes and storage limits stay within your R3 cluster budget. |
| Microservice messaging with request and reply | NATS | Core NATS offers lightweight subject-based request and reply with low latency and a small operational surface. Kafka fits when those same messages also need durable history for other consumers. |
| Edge or branch sites with small hardware | NATS | The server is a small single binary with a footprint of typically about 15 MB, and leaf nodes extend a site to a central cluster. Kafka needs a JVM and brokers sized for its log, so choose it only where branch hardware can carry that load. |
| Multi-tenant SaaS with isolated domains | NATS | Accounts isolate messaging domains inside one server or cluster, which suits team and customer separation. Kafka isolates tenants through topic naming, quotas and ACLs, which is workable but needs more deliberate design. |
| Teams that already run Kafka Connect | Apache Kafka | Existing connectors, distributed mode operations and REST management carry over directly. NATS fits only if its bridges cover the specific sources and sinks you need, so confirm each connector before moving. |
| Replay for audit or regulated record keeping | Apache Kafka | Log retention, ACLs in the cluster metadata log and TLS options give a mature record of events. Confirm your retention, encryption and access controls against your own requirements on either platform. |
How Kafka and NATS are built and what that means for operations
Kafka and NATS both move messages between services, but they are built around different units of work. Kafka stores partitioned logs on brokers that a KRaft controller quorum coordinates, while NATS runs as one server binary where clustering and JetStream persistence are settings on the same process. The cards below cover what those choices mean for upgrades, sizing and daily operations.
Kafka brokers and KRaft controllers
Since Kafka 4.0 the cluster runs only in KRaft mode, so ZooKeeper is gone and the controllers hold cluster metadata themselves. You can combine the broker and controller roles on the same nodes or place controllers on dedicated nodes. Combined mode lowers the node count, but it ties controller availability to broker load. Confirm the layout the Kafka documentation recommends for your version and your criticality before you size hardware. Clusters that still run ZooKeeper must migrate to KRaft before moving to 4.x.
The partitioned log model
Kafka writes each topic into partitions, and each partition is an ordered, append-only log on the brokers. Ordering holds within a partition, and consumer groups read partitions in parallel. Partition count is a capacity decision you make early, because adding partitions later changes how keys map to partitions. Retention is configured per topic, so storage grows with throughput and retention period. Check your partition plan and disk budget with your own message rates, not with generic guidance.
NATS as a single server binary
The nats-server binary handles core messaging, clustering, JetStream, leaf nodes, MQTT and WebSocket through configuration on the same process. That means one artifact to deploy, patch and monitor at the edge or in a data center, with a memory footprint typically around 15 MB according to NATS. The trade-off is that a single process carries several roles, so you should plan resource limits and monitoring for each enabled feature. Confirm which features your target environment needs before you enable them.
JetStream Raft quorum and replication
JetStream stream replication uses Raft majority voting, so a stream survives only while a majority of its replicas agree. The NATS documentation recommends an odd number of servers, typically three or five, and treats R3 as the production floor, with a maximum of five copies per stream. Losing a majority halts writes to affected streams until quorum returns. Size the cluster so that one planned upgrade or one node failure still leaves a majority. Confirm stream replica settings against the JetStream clustering page for your server version.
Upgrades and version coordination
Kafka supports rolling upgrades from each release in the past year to the latest version, and the project maintains three supported lines, currently 4.3.1, 4.2.2 and 4.1.2. Each upgrade touches the controller quorum and the brokers, so teams usually stage controllers first and check metadata version compatibility. NATS releases a single server binary, and cluster upgrades are typically performed one node at a time. Plan a test cluster that matches your topology and confirm the rolling upgrade sequence for your exact versions.
Day-two sizing and monitoring
Kafka operations usually center on disk throughput, partition counts, replication lag and controller health, and they often need dedicated tooling for capacity planning. NATS operations center on stream limits, consumer lag, memory use and quorum health, and it exposes a Prometheus exporter for monitoring. Ask each vendor or community for the metrics they recommend alerting on, then test alerts against a failure in your own environment. Your team's existing observability stack will shape how much custom work each option needs.
Side-by-side capability comparison
This table compares Apache Kafka and NATS with JetStream on the capabilities that usually decide a shortlist: delivery and replay, tenancy, replication, bridges, clients, footprint and license. Read each row against your own workload, and treat the confirm notes as questions to put to the vendor or your own test cluster before you commit.
| Capability | Apache Kafka | NATS with JetStream |
|---|---|---|
| Delivery guarantees and replay | Consumers track offsets within partitions and can re-read retained records. Confirm the delivery semantics your producer and consumer settings give in your own tests. | JetStream gives at-least-once delivery. Consumers can replay from the beginning, the latest message, a sequence number or a point in time. |
| Retention model | Partitioned log retained by configured policy, so history stays available to new consumer groups. Confirm retention settings and storage sizing for your volume. | Streams bound to subjects store messages in memory or on disk. Confirm stream limits and storage placement for your retention target. |
| Multi-tenancy and access control | Authentication through SSL or SASL (GSSAPI, PLAIN, SCRAM-SHA-256, SCRAM-SHA-512, OAUTHBEARER). In KRaft, ACLs live in the metadata log and resources without ACLs are restricted to super users by default. | NATS accounts isolate messaging domains within one server or cluster, supporting team isolation and SaaS platforms. Confirm how account, user and permission design maps to your teams. |
| Replication and cluster sizing | Replication is configured per topic. Plan broker count, replication factor and the KRaft controller layout for your durability target. | JetStream clusters use Raft majority voting. The docs recommend an odd number of servers, typically three or five, with R3 as the production floor and at most five copies per stream. |
| Connectors and bridges | Kafka Connect runs source and sink connectors in standalone or distributed mode with a REST API. Confirm connector availability for your systems. | Documented bridges to Kafka, JMS, Spark and Flink, plus a Prometheus exporter and NACK and Helm charts for Kubernetes. Confirm each bridge's maturity before depending on it. |
| Client language support | Client support depends on the language ecosystem. Confirm the client libraries your services use and their Kafka protocol versions. | Official Tier 1 clients: Go, JavaScript/TypeScript, Python, Java, Rust, C#/.NET and C. Tier 2 clients (Zig, Swift, Ruby, Elixir) may lag on new server features. |
| Footprint at the edge | Runs on the JVM, and since Kafka 4.0 brokers, Kafka Connect and tools require Java 17. Plan for a heavier footprint than a single binary. | Small single binary with typical memory around 15 MB, and clustering, JetStream, leaf nodes and MQTT are configuration on the same process. Confirm the footprint under your own load. |
| License | Apache-2.0 with no paid edition from the project itself. | Apache-2.0 under the CNCF after the May 1, 2025 agreement that moved the NATS trademarks to the Linux Foundation. Confirm current governance terms with the CNCF. |
What the license covers for Kafka and for NATS
Apache Kafka is an Apache Software Foundation project released under the Apache License 2.0 (SPDX identifier Apache-2.0). The project itself does not sell a paid edition, so there is no feature gate that a license key unlocks. The code you download from the project is the code you run, and you can modify and redistribute it under the terms of that license. Operationally, the project publishes its supported release lines on its downloads page, which means your upgrade planning should track those lines rather than a commercial support calendar.
- No paid edition from the project: every feature in the Apache distribution is available under Apache-2.0 without a license key or usage cap.
- Support comes from third parties: paid support, consulting and managed services are offered by vendors and service providers, not by the Apache Software Foundation.
- Release lines are public: the downloads page lists the currently supported releases, and older versions are archived.
- Governance is project-based: changes are made through the Apache community process, so your influence over the roadmap comes through contributions or your chosen vendor.
Before you sign, confirm the scope of any vendor support contract, including which Kafka versions it covers, whether it includes Kafka Connect connectors and whether it extends to your clients and tooling.
The nats-server repository states that NATS is part of the Cloud Native Computing Foundation and is licensed under the Apache License 2.0. On May 1, 2025, CNCF and Synadia announced that Synadia would assign its two NATS trademark registrations to the Linux Foundation, that CNCF keeps the NATS.io domain and GitHub repositories, and that NATS development continues under the Apache-2.0 license. For a team evaluating the software, the practical point is that the server code and the trademark situation were both addressed in that announcement, so the license terms you read in the repository are the terms that apply.
- Apache-2.0 for the server: the server, clients and tooling in the official repositories are published under the same license family as Kafka.
- CNCF stewardship: the project is part of the Cloud Native Computing Foundation, and the NATS.io domain and GitHub repositories remain with CNCF.
- Trademark moved to the Linux Foundation: the trademark registrations were assigned from Synadia to the Linux Foundation as part of the 2025 announcement.
- Continued development under Apache-2.0: the announcement states that development continues under Apache-2.0.
- Commercial support terms are separate: any paid support, managed service or enterprise offering is a commercial relationship. Ask the vendor for its written terms and for the versions and tiers they cover.
Confirm with the vendor any commercial support terms, service levels and which NATS components sit inside the support scope, and check that they match your own security and procurement requirements.
Both platforms are open source under Apache-2.0, so the license itself does not create a purchase decision. The purchase decision comes from support, managed hosting and the internal effort you accept. Procurement teams often ask for a signed support agreement, a named escalation path and a written statement of covered versions, and neither project can provide those directly as a single vendor product. Your costs are therefore driven by who you pay to run the platform, not by a license fee for the software.
- What is one-time: planning, architecture, initial deployment, integration and hardening work agreed in a written scope.
- What recurs: infrastructure in your own accounts or data centers, upgrades, monitoring, backups and any support or retainer you buy.
- What drives cost up: the number of environments, the need for high availability, the number of connectors or client integrations and the frequency of upgrades.
- What to ask a vendor for: the supported versions, the upgrade and patch policy, the response model and the terms for security fixes.
- What to ask DeployOpen for: a written scope that names the platform versions, the environments and the deliverables, since quotes follow from that scope.
Check these terms against your own change-management process before comparing quotes, because the same license can carry very different support obligations.
How multi-tenancy and client identity differ in practice
NATS isolates tenants with accounts, which are separate messaging domains inside one server or cluster. Each account has its own subjects, streams and consumers, so a subject published in one account is not visible to another unless you explicitly export and import it. The NATS documentation names secure multi-tenant deployments, team isolation and SaaS platforms as the use cases this design targets. Kafka has no equivalent container. Its tenancy comes from the cluster boundary, topic naming conventions and ACLs, and many teams separate tenants with distinct clusters when isolation or blast radius matters. Decide early which of those models your tenants need, because moving from shared topics to separate clusters later is a migration, not a configuration change.
On the Kafka side, client identity is set per listener. Kafka supports SSL and SASL, and the documented SASL mechanisms are GSSAPI (Kerberos), PLAIN, SCRAM-SHA-256, SCRAM-SHA-512 and OAUTHBEARER. OAUTHBEARER is the option to evaluate if your identity provider issues tokens, while SCRAM fits environments that store credentials in Kafka. In KRaft clusters, the StandardAuthorizer keeps ACLs in the cluster metadata log, and resources without ACLs are restricted to super users unless allow.everyone.if.no.acl.found is set to true. Leave that key at its default for any shared cluster, and confirm that every topic, consumer group and transactional ID your tenants use has an explicit ACL before go-live.
Because Kafka's security surface depends on the exact release, test your identity provider integration against the Kafka version you plan to run, not against documentation for another line. Confirm token validation, claim mapping to principals, and ACL behavior for both producers and consumers, and check how the release you choose handles SASL and authorizer settings. On the NATS side, verify that account JWTs and user credentials are issued and rotated through your chosen process before you rely on them for tenant separation. Ask your team to write a negative test for each tenant boundary, so a misconfigured account or ACL fails in staging rather than in production.
What drives the running cost of each platform
Running cost for Kafka and NATS comes from the same few places: the servers that hold replicas, the people who operate them, and the upgrade work that recurs over each platform's life. The cards below separate what is paid once from what recurs, and list what to request in any quote before comparing totals.
Broker, controller and replica infrastructure
Kafka needs broker nodes and, in KRaft mode, controller capacity, whether combined or dedicated, sized for replication and partition counts. NATS needs JetStream replicas: the NATS documentation calls R3 the production floor and recommends an odd number of servers, typically three or five. Storage for retention is a separate line in both cases, because retained messages consume disk on every replica. Ask the quote to state node count, replication factor, retention period and storage class for each platform, so the two totals rest on the same assumptions.
Skills and operating staff
Recurring cost is mostly people. Kafka operators need working knowledge of partitions, consumer groups, KRaft controllers, security configuration and connector management. NATS operators need JetStream stream and consumer tuning, Raft cluster health and account configuration. Both are one-time to learn and recurring to keep current. Ask for the staffing assumption behind each estimate, including on-call coverage and whether the engagement includes knowledge transfer to your own team.
Java 17 runtime for Kafka
Since Kafka 4.0, brokers, Kafka Connect and tools require Java 17, while clients and Kafka Streams applications need at least Java 11. Teams without an existing Java 17 standard must budget for runtime patching, JVM tuning and the vulnerability scanning that follows. NATS server ships as a single binary with a memory footprint of typically about 15 MB, so it avoids this line. Confirm whether your image standard, scanner and support contract already cover the JVM before pricing it.
Upgrade effort on each release cadence
Kafka aims for three releases a year and supports rolling upgrades from each release in the past year to the latest version. Supported releases are 4.3.1, 4.2.2 and 4.1.2, so each upgrade cycle is recurring work with a testing gate. Clusters older than the 3.3.x line must first move to 3.9.x before 4.x. NATS releases also recur, with nats-server v2.15.1 and v2.14.8 published on October 9, 2026, so the same planning applies. Ask the vendor or partner how many supported lines it will track and how upgrade windows are priced.
Paid support and managed options
Both platforms are open source under Apache-2.0, so the license carries no fee. Any subscription, managed service or support contract is a separate, optional line that recurs. Kafka has no paid edition from the project itself, so commercial support comes from third parties. NATS support is available through its stewards and vendors, and the 2025 agreement that moved NATS trademarks to the Linux Foundation did not change its license. Ask each provider for its support hours, response targets in writing, what is included in upgrades and whether exit terms let you move the workload back in-house.
Moving from Kafka to NATS or from NATS to Kafka
This sequence turns an inventory of topics, subjects and consumer groups into a tested cutover, so each event flow moves with its retention, replay and access needs intact. It produces a dated record of what moved, what was rebuilt and what was retired.
Inventory topics, subjects and consumer groups
List every Kafka topic, its partitions, producers, consumer groups and committed offsets, along with every NATS subject and queue group in scope. Record which consumers depend on keys, ordering or Kafka Connect connectors, since those dependencies shape the move. The platform team and each owning application team sign off on the list. The step is done when every flow has an owner and a named target, and no consumer is unaccounted for.
Map retention and replay needs to targets
For each flow, decide whether consumers need replay from the beginning, from a point in time or only from the latest message. Map those needs to JetStream streams with their storage type, retention limits and consumer replay policy, or keep them as Kafka topics with their retention settings. Confirm the replication setting for each stream, noting that JetStream clusters use a Raft majority vote and that R3 is the recommended production floor. The output is a mapping table reviewed by the data owners.
Confirm access model and client language support
Translate Kafka SASL users, ACLs and topic-level permissions into NATS accounts, users and subject permissions, or confirm the equivalent in the Kafka deployment you keep. Check every client language in use against the NATS client tiers: Go, JavaScript/TypeScript, Python, Java, Rust, C#/.NET and C are Tier 1, while Zig, Swift, Ruby and Elixir are Tier 2 and may lag on new server features. Where a team depends on a Tier 2 client, plan an earlier test or a different migration path. Confirm each item with the NATS documentation and your own test results.
Choose a bridge or dual-run period
Select how events cross during the transition: a bridge between the systems, such as the NATS bridges to Kafka listed in the NATS tooling, or producers writing to both platforms for a defined window. Assess the bridge for ordering, duplicate delivery and offset tracking, since JetStream gives at-least-once delivery and consumers must tolerate redelivery. Document the cutover criteria before any production traffic moves. The output is a written runbook the change board approves.
Migrate producers and consumers in stages
Move producers first in low-risk flows, then consumers, starting with consumers that can run idempotently. For each consumer, run old and new paths side by side, compare message counts, sequence gaps and business outputs, and only then switch the source of truth. Keep rollback steps for each flow. The step is complete when each flow has passed its comparison checks and the old consumer group has no unprocessed backlog that matters to the business.
Rebuild connectors, ACLs and runbooks
Kafka Connect source and sink connectors do not run on NATS, so replace each one with a NATS-side integration or keep it on Kafka if the sink requires it. Rebuild monitoring, alerting and backup procedures for the new platform, and update incident runbooks so on-call engineers know where to look. Confirm that the new access model is tested with both allowed and denied actions. The output is a signed-off operations package for each platform still in use.
Decommission the retired platform
Once every flow has run on its target for the agreed observation period, stop producers and consumers on the retired side, archive topic or stream data as your retention policy requires, and remove credentials and network paths. Record the final state, including what was kept for audit. The step closes when the retired cluster is no longer referenced by any application, dashboard or connector and the archive is verified.
Where implementation projects usually run long
Projects run long when sizing, retention and identity decisions are made after the first environment is already running. On the Kafka side, the work starts with broker and controller layout in KRaft mode, replication factors per topic, and the retention and compaction settings that decide how far back consumers can replay. On the NATS side, the team must design JetStream streams, choose memory or file storage, and set R3 replication across an odd number of servers, with the production floor described in the NATS clustering documentation. Replay windows and retention set late force rework of stream definitions and client offset logic, which is the most common source of schedule slip we would expect to see on either side. Confirm the expected replay horizon and peak message rate with the platform owners before any cluster is built.
Security configuration is the second overrun risk. Kafka supports SSL and SASL, including GSSAPI, PLAIN, SCRAM and OAUTHBEARER, and its StandardAuthorizer keeps ACLs in the metadata log, so every topic and consumer group needs an explicit grant unless allow.everyone.if.no.acl.found is deliberately changed. NATS uses accounts for isolation, and each account's users, exports and imports must be mapped to teams. Identity integration with your existing directory or OAuth provider is often where a project waits longest, because it depends on other teams' approvals. Cross-site replication adds further time: Kafka's geo-replication tooling and NATS leaf node or cluster links each need network paths, certificates and failover tests in the client's own environment. Client library gaps also matter. NATS lists Tier 1 clients for Go, JavaScript, Python, Java, Rust, C# and C, and Tier 2 clients may lag on new server features, so confirm every language your services use before the build starts.
Connectors, bridges, observability and upgrades make up the rest of the effort. Kafka Connect requires its own distributed workers, connector configuration and REST management, while NATS relies on bridges such as its Kafka bridge, which need their own sizing and monitoring. Observability should cover broker or server metrics, consumer lag, stream state and certificate expiry, and the Prometheus exporter for NATS is one input, not a complete design. Upgrade planning starts with the supported Kafka lines, which the downloads page lists as 4.3.1, 4.2.2 and 4.1.2, and with nats-server release lines such as v2.15.x and v2.14.x. Client migration tends to take the longest because each producer and consumer changes its protocol library and offset handling. DeployOpen plans and implements these components inside your own cloud accounts, data centers or air-gapped networks. Any timeline comes from a written, fixed scope agreed before work starts, not from this page.
Questions buyers ask before choosing Kafka or NATS
What does it cost to implement Kafka or NATS in our own infrastructure?
The cost depends on scope more than on the license, because both Apache Kafka and NATS are open source and carry no license fee from the project itself. You pay for infrastructure in your cloud account or data center, for the staff who run the clusters, and for any implementation partner work such as design, connector setup, security hardening and runbooks. Drivers include the number of clusters, replication level, number of topics or subjects, connector count and how many client languages must be supported. Ask any quote to itemize infrastructure, one-time build work, recurring operations and any retainer for upgrades and testing, and to state which Kafka or NATS versions it targets. DeployOpen does not publish prices and quotes from a written scope.
How long does a migration from one messaging system to the other take?
The timeline is set by the number of producers and consumers that must move, the delivery semantics your applications rely on, and how much replay history must be preserved. Moving from a log-based Kafka estate to NATS JetStream usually means rewriting client code and redesigning consumer offsets, while a parallel run period adds time because both systems must carry traffic. Ask for a dependency inventory of every topic and subject, a cutover plan per service and a rollback path before agreeing dates. DeployOpen agrees scope, deliverables and timelines in writing before work starts, so the timeline comes from that document rather than from a generic estimate.
Can our internal team run Kafka or NATS without an outside partner?
A team with existing Linux, network and observability skills can run either platform, but the workload differs. Kafka brokers need Java 17 or later for Kafka 4.x, KRaft controller planning, partition and retention tuning and ACL management, and Kafka Connect adds its own operating surface. NATS is a single small binary with clustering and JetStream as configuration on the same server process, which generally lowers day-one effort, though JetStream still needs replica and storage planning. Assess your team against the operational tasks in each platform's documentation, then decide which upgrades, testing and on-call duties you will keep in-house. DeployOpen can run that assessment as part of scoping.
Can NATS bridge into an existing Kafka estate?
Yes, NATS documents bridges to Kafka, along with bridges to JMS, Spark and Flink. A bridge lets a NATS subject feed Kafka topics or the reverse, so you can keep Kafka as the system of record while adding NATS for low-latency service messaging. Confirm the exact bridge behavior, delivery semantics, throughput ceiling and failure handling against the version you plan to run, because a bridge adds a component to monitor and secure. Also confirm how Kafka Connect connectors you already use will coexist with the bridge. DeployOpen can design and test the bridge path as part of a fixed-scope engagement.
How does the CNCF agreement affect NATS licensing?
NATS remains licensed under the Apache License 2.0. On May 1, 2025, CNCF and Synadia announced that Synadia would assign its two NATS trademark registrations to the Linux Foundation, that CNCF keeps the NATS.io domain and GitHub repositories, and that development continues under Apache-2.0. For a license review, the code license is the main point, and the trademark move matters mainly if you redistribute or brand a product around NATS. Ask your legal team to confirm trademark use terms with the Linux Foundation and to review any commercial add-ons you consider. Apache Kafka is also Apache-2.0 licensed, with no paid edition from the project itself.
What does a fixed-scope engagement need from our side?
A fixed-scope engagement needs a written statement of what is in and out of scope, named owners on your side, access to the target environment and a list of systems that produce or consume events. You should provide architecture diagrams, current throughput and retention figures, security requirements such as TLS and authentication choices, and the compliance evidence your assessors expect. Agree acceptance criteria per deliverable, such as a tested failover or a documented ACL model. Timelines depend on how quickly these inputs arrive, so ask for a dependency list in the proposal. DeployOpen agrees scope, deliverables and timelines in writing before work starts.
What replication and security settings should we confirm before going live?
Confirm the replication factor and the number of nodes for each cluster, since JetStream recommends an odd number of servers, typically three or five, and treats R3 as the production floor. For Kafka, confirm the authentication mechanism, such as SCRAM-SHA-512 or OAUTHBEARER, that TLS is enforced on every listener, and that ACLs are defined because resources without ACLs are restricted to super users unless allow.everyone.if.no.acl.found is set to true. Check the chosen versions against the Kafka upgrade notes and the NATS server release notes. Record each decision so it can be shown to auditors or assessors.
How DeployOpen helps teams choose and implement either platform
DeployOpen plans, implements, hardens, documents and supports self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks. For Apache Kafka vs NATS, we help you test the choice against your delivery, replay and tenancy requirements before any platform is built out.
How we scope
- We start with the workloads: which events need log retention and replay, and which need lightweight request and messaging patterns.
- The written scope fixes deliverables, environments, connectors and timelines before any work starts, so the choice is documented.
- Scope covers the Kafka Connect or NATS bridge integrations your systems actually need, including the authentication model for each.
How we build
- We size and deploy the chosen cluster, including replication settings for Kafka KRaft or JetStream R3 in your own infrastructure.
- Security configuration covers TLS, SASL or NATS accounts, and authorization rules, checked against the platform documentation.
- Security testing of the deployed messaging layer can be included in scope to check tenancy boundaries and access controls.
How we hand over
- You receive configuration, runbooks for upgrades and failover, and documentation of the chosen topology and its trade-offs.
- Handover includes operator training on monitoring, consumer lag or stream health, and recovery from node loss.
- Evidence for compliance readiness, such as access and backup records, is prepared for your independent assessors.
How we support
- Ongoing support, version upgrades and continuous testing are available as retainers after handover.
- Retainer work can track supported release lines so your cluster stays within the upgrade paths you choose.
- Ask for the support scope, response expectations and upgrade responsibilities in writing before you sign.

