Event streaming RFP questions

Questions to put to partners who propose to build or run a self-hosted streaming platform, with what a credible answer contains and which answers should stop the evaluation. The questions cover sizing, upgrades, security defaults, replication and recovery testing, monitoring and handover.

On this page

How to run an event streaming RFP without hiring on slide decks

Your organization is choosing among self-hosted Apache Kafka, Apache Pulsar or NATS, and you need a partner who can prove operating competence rather than describe it. This page gives the questions to put to each candidate, what a good answer sounds like for each area, and the red flags that should slow the decision down. Sizing, upgrade path, security defaults, replication and recovery testing, monitoring and handover each get their own section below. Use them as a script, not a checklist to tick in a meeting. Issue every question in writing before the first call, and ask for answers in writing too. Require the names and roles of the engineers who would run your cluster, and require at least one reference environment that is comparable in broker count, data volume and regulatory context, described in enough detail that you could check it. Ask for the evidence behind each claim: a runbook excerpt, a sample upgrade plan, a recent restore test report with dates. Be wary of answers such as "we follow best practices" or "we are vendor-neutral", because neither can be tested. A good answer names the exact setting, the version, the person and the artifact.

Be aware that DeployOpen is one of the partners you may ask. DeployOpen plans, implements, hardens, backs up, upgrades and documents self-hosted open-source platforms inside your own cloud accounts, data centers or air-gapped networks, and it runs security testing that can be scoped against the same environment. Hold DeployOpen to the same standard as every other bidder: fixed scope in writing, named people, and evidence you can inspect. Before you compare answers, confirm the current supported Kafka releases on the Apache Kafka downloads page and the active support window of any Pulsar LTS line you are offered, since those dates decide which upgrade path a partner can honestly propose.

Which questions test sizing and platform choice?

How should a partner size throughput and retention for our streaming platform?

A credible partner starts from a written message profile, not a product default: average and peak message rate, average and maximum message size, number of producers and consumer groups, and the retention period each topic needs for replay and audit. From those numbers they derive raw ingress, replication factor multiplied storage, and the headroom needed for failover and rebalancing. Ask for the calculation in a spreadsheet you can change. Red flags include sizing by copying a vendor sample configuration, quoting broker counts before seeing your message sizes, or giving no retention math at all. Illustrative: a topic at 10 MB per second with 7 days of retention and replication factor 3 stores roughly 6 TB before compression, which changes the hardware answer completely.

What load tests should prove a streaming cluster will hold our traffic?

Good answers describe load tests run against your message profile: realistic payload sizes, your partition counts, consumer lag under sustained peak, and a broker failure during load. The partner should state pass criteria before testing and record results for handover. Ask whether tests include producer acknowledgement settings and consumer restarts, since those change behavior more than raw throughput. A red flag is a benchmark run on synthetic one-kilobyte messages with no consumer side measured, or a partner who will not share the test scripts. Ask for the test plan as a deliverable before any production sizing is signed off.

How should storage growth be planned for partitions and retention?

The partner should model storage growth per topic as ingress rate multiplied by retention, multiplied by replication factor, and show how partition count affects open file handles, memory and rebalance time. For Kafka, partition counts can be increased later but this changes key-to-partition mapping, so ask how they will handle ordering-sensitive topics. For Pulsar, storage grows by adding BookKeeper bookies independently of brokers, which the partner should explain if they propose it. Red flags: no alarm thresholds for disk, no tiered storage or archive plan for long retention, and partition counts chosen by habit. Ask how they will revisit the numbers after the first quarter of real data.

Why should we choose Kafka, Pulsar or NATS for our protocols and delivery needs?

The answer should map your requirements to the platform: Kafka API ecosystem and connectors, Pulsar's multi-tenancy and topic and queue semantics, or NATS's small footprint, low latency and JetStream persistence with at-least-once delivery. Ask the partner to name which protocols you need (Kafka API, AMQP, MQTT), what ordering and delivery guarantees each consumer depends on, and whether exactly-once processing is required end to end. Red flags include choosing a platform before the requirements are reviewed, recommending one tool for every use case, or claiming guarantees without describing the configuration that provides them. Ask for a short decision record that explains what was rejected and why.

Which Kafka release and upgrade path should a new cluster start on?

Start by checking the supported releases on the Apache Kafka downloads page and confirming which release your partner will deploy. The project lists 4.3.1, 4.2.2 and 4.1.2 as supported at the time of writing, and rolling upgrades are supported from each release in the past year to the latest version. Kafka 4.0 supports only KRaft mode, so ZooKeeper-based clusters must migrate first, and KRaft clusters older than 3.3.x should move to 3.9.x before 4.x. Since Kafka 4.0, brokers and Kafka Connect require Java 17. Red flags: a partner who proposes a legacy release with no upgrade plan, or who cannot name the Java version.

What does a Pulsar or NATS release and support policy mean for us?

For Pulsar, ask which line is deployed and its support window: Pulsar 5.0 LTS was released on October 5, 2026 with active support until October 5, 2028, while Pulsar 4.0 LTS reaches the end of active support on October 21, 2026. Pulsar uses LTS releases every 18 months with 24 months of active and 36 months of security support. For NATS, ask which nats-server line the partner targets and how they track patches, since v2.15.1 and v2.14.8 were both published on October 9, 2026. Red flags: no written support end date, or a plan to run a release that is already out of support. Ask who pays for upgrades under the engagement and how they are scoped.

Can our team run this platform after handover, and what skills does it need?

Ask for an honest skills map: broker operations, Java tuning for Kafka, BookKeeper and metadata store operations for Pulsar, or JetStream clustering and account configuration for NATS. A good partner lists which roles your staff need, which runbooks and dashboards they will receive, and what on-call coverage looks like after handover. Red flags include a handover that is a single training session with no runbook, or no plan for monitoring without the partner's tools. Ask whether the work is fixed scope or a retainer, and what support is included after go-live.

How do Kafka, Pulsar and NATS change the questions?

Kafka is an Apache-2.0 project with no paid edition from the project itself, so the partner's proposal should show exactly which release line it will deploy and how it will move between lines. The supported releases listed on the downloads page at the time of writing are 4.3.1, 4.2.2 and 4.1.2, and KRaft is the only mode from 4.0 onward, so any cluster still on ZooKeeper must migrate before upgrading to 4.x.

  • Release line and upgrade path: Ask which exact version will be deployed and how the cluster will reach the next supported line. A sound answer names the KRaft migration steps, and notes that the upgrade notes recommend KRaft clusters older than 3.3.x move to 3.9.x before 4.x. Red flag: "we will install the latest version" with no mention of supported lines.
  • Runtime requirements: Since 4.0, brokers and Kafka Connect require Java 17. Ask how the partner will keep the JVM patched on every node. Red flag: no Java version stated, or a plan to run older runtimes for convenience.
  • Authentication defaults: Kafka security is optional, so clusters can run with unsecured or mixed listeners. Ask which SASL mechanism (for example SCRAM-SHA-512 or OAUTHBEARER) and TLS settings will be enforced on every listener. Red flag: a plaintext listener left open for "testing" that carries into production.
  • Authorization model: In KRaft clusters the StandardAuthorizer stores ACLs in the metadata log, and unmatched resources are restricted to super users unless allow.everyone.if.no.acl.found is set. Ask whether that setting will be false and how ACLs are reviewed. Red flag: the setting is set to true to avoid access errors.

Check that the proposal names a specific release, a Java version, a listener and authentication matrix, and a written upgrade plan tied to the published support lines.

Upgrade path questions that expose hidden risk

Which Apache Kafka versions are currently supported, and how old is our cluster?

Ask the partner to state the exact version of every broker and client in your estate, then compare it against the supported releases on the Apache Kafka downloads page. As of the supplied release data, the supported lines are 4.3.1, 4.2.2 and 4.1.2, and all earlier versions are archived. A partner who cannot answer this from your inventory has not yet read your environment. Ask them to list each cluster, its version, whether it runs KRaft or ZooKeeper, and which clients and Kafka Connect workers depend on it. That list is the starting point for every later estimate of effort and risk.

Does our Kafka cluster still use ZooKeeper, and what must change first?

If the cluster still uses ZooKeeper, it must move to KRaft before it can upgrade to any 4.x release, because Apache Kafka 4.0 supports only KRaft mode and removed ZooKeeper mode. Ask the partner for a written migration plan that covers the metadata migration, the rollback path if the migration stalls, and the validation steps for topics, ACLs, quotas and client connections afterward. The Apache Kafka upgrade notes are the primary reference for this step. A partner who proposes upgrading to 4.x first and migrating later has misread the requirement and should be questioned on the rest of the plan.

Do KRaft clusters older than 3.3.x need an intermediate upgrade?

Yes. The Kafka upgrade notes recommend that KRaft clusters older than 3.3.x first upgrade to 3.9.x before moving to 4.x. A partner should show this as a named step in the plan, with a checkpoint after each hop, not as a single jump. Each hop needs its own compatibility review, client testing and a rollback point. Ask whether the partner has a written map of every hop from your current version to your target, and who signs off on each one. If the answer is to skip the intermediate versions because the upgrade seems simple, treat that as a serious red flag.

Can we run a rolling upgrade without downtime, and from which versions?

The Kafka time-based release plan says rolling upgrades are supported from each release in the past year, which covers the last three releases, to the latest version. Anything older falls outside that documented path and needs a plan of its own. Ask the partner to confirm which of your versions sit inside that window, and what they will do with the ones that do not. Also ask how the rolling upgrade will be checked, including producer and consumer lag, under-replicated partitions and client compatibility during the rolling window. Availability during the upgrade depends on your replication and client settings, so ask the partner to describe those settings for your clusters.

How will Java version changes affect our brokers, Connect workers and clients?

Since Kafka 4.0, brokers, Kafka Connect and tools require Java 17, while clients and Kafka Streams applications need at least Java 11. Many estates have older JVMs pinned on application servers, connector hosts or build pipelines, so this requirement often surfaces late. Ask the partner to inventory the JVM version on every host and application that touches Kafka, and to list the upgrades needed before the broker change. Ask who owns those application upgrades, since a broker upgrade plan that quietly assumes application teams will move their JVMs is incomplete. The DeployOpen engagement scope for each step should be written into the statement of work before work begins.

What does a dated upgrade plan with staging rehearsal and rollback look like?

A credible plan has dates for each hop, a staging environment that mirrors production topology and data volumes closely enough to rehearse the change, and written go or no-go criteria for each stage. Expect a rollback plan with named triggers, such as sustained consumer lag beyond an agreed threshold, failed produce requests or client errors after a version change. Ask the partner to show a rehearsal log from a previous engagement, or an equivalent test record, rather than a slide. Ask who approves the rollback decision and how long a rollback takes for your data volumes. Timelines should come from the written scope, and any duration the partner quotes should explain what drives it.

How should we handle plugins, connectors and clients during the upgrade?

Connectors, transforms, custom authorizers and client libraries each have their own version and compatibility matrix, and they often break before the broker does. Ask the partner to list every connector plugin and custom component with its exact version, its source, and the Kafka version it was tested against. Plugins that are unversioned, copied into a directory without a record or pinned to a snapshot build are a red flag. Ask how plugin artifacts are stored, how they are promoted from staging to production, and how an old artifact is restored if a new one fails. Also ask who owns connector compatibility after handover.

What should worry us about an upgrade partner's answers?

Be cautious when a partner proposes an in-place upgrade without first checking the supported upgrade paths, or when they cannot name the current version of your clusters. Also treat as a warning any plan that ignores the Java requirements, skips KRaft migration checks, lacks a staging rehearsal or has no rollback criteria. Vague answers such as ready to upgrade when you are, or no downtime expected, without a written basis, are signals to press harder. A good partner will document the plan in writing, state what is out of scope, and explain how upgrades will be tested and supported after go-live. Ask for those documents before comparing prices.

Security defaults to verify before the contract is signed

Kafka security is optional, so the partner must prove that TLS and authentication are enforced on every listener before you sign. The Kafka security overview documents that clusters can run unsecured or mix secured and unsecured listeners. A proposal that says "Kafka with TLS" tells you little until you know which listeners exist, which ports clients use, whether inter-broker traffic is encrypted, and whether any plaintext listener remains open for tools or legacy clients. Ask for the broker listener configuration as it will ship, and for a scan or test showing that a plaintext connection is refused from each network segment that should be isolated.

On authentication, Kafka supports SSL and SASL. The documented SASL mechanisms are GSSAPI (Kerberos), PLAIN, SCRAM-SHA-256, SCRAM-SHA-512 and OAUTHBEARER. Ask the partner which mechanism each client group uses and why. PLAIN sends credentials that must be protected entirely by TLS, so a proposal that enables it without TLS everywhere should be treated as a finding, not a convenience. Ask who owns the identity source behind SCRAM credentials or OAuth tokens, how credentials are rotated, and how a departing service account is revoked. Confirm that the design uses your existing identity provider where possible, rather than a separate credential store that nobody reviews.

For authorization, check how ACLs are designed in KRaft mode. The StandardAuthorizer stores ACLs in the cluster metadata log, and unless allow.everyone.if.no.acl.found is set to true, resources without ACLs are restricted to super users. The partner should explain which principals are super users, why, and how that list is reviewed. Ask for a written ACL matrix mapping each topic, consumer group and transactional ID to producers and consumers, and for the hardening baseline itself: the configuration, the admin access model, and the evidence of each control. Be clear about the boundary: DeployOpen prepares controls and evidence for compliance assessments, but independent auditors issue any audit report, so ask what evidence will exist on handover rather than what certificate will be granted.

Which security answers should be checked in a lab?

Security answers in a proposal are cheap to write and expensive to discover late. Each card below names a control a streaming partner should explain, the answer that signals a sound design, and the red flag that should trigger a harder look. Ask for every check to be shown on a test cluster before the scope is signed.

Unauthenticated listeners

Ask which listeners accept connections without TLS or authentication, on every broker, controller and admin port. Kafka security is optional, so a cluster can mix secured and unsecured listeners unless someone removes the plaintext ones. The good answer is that every client listener requires TLS and one of the documented SASL mechanisms, and that plaintext listeners are absent from the production configuration. Red flag: a partner who cannot list every listener. Ask for a scan of the test cluster from a host outside the broker network.

ACL defaults

Ask what happens to a topic or resource that has no ACL. In KRaft clusters, the StandardAuthorizer restricts resources without ACLs to super users unless allow.everyone.if.no.acl.found is set to true. The good answer is that this setting stays false and that super users are a short, named list. Red flag: a proposal that sets the flag to true to make early testing easier. Ask for a demonstration in which an unlisted client is denied access to a test topic.

Secrets rotation

Ask how SASL credentials, TLS certificates and service tokens are issued, stored and replaced without downtime. The good answer describes a documented rotation procedure for each credential type, with secrets held in a vault or the platform's secret store rather than in configuration files or pipeline variables. Red flag: rotation described as a future task or done by restarting the whole cluster. Ask for a live rotation of one client credential on the test cluster while producers and consumers keep running.

Encryption at rest for storage

Ask where data lands on disk and who encrypts it. Pulsar keeps persistent data in Apache BookKeeper bookies, while Kafka and NATS JetStream write to their own log directories, so the answer depends on the platform chosen. The good answer names the encryption layer for each storage tier, such as volume encryption managed by the organization's key service, and explains who holds the keys. Red flag: encryption promised for the broker but not for the bookies or the log volumes. Ask the partner to show where the keys live and how a disk image taken from a test node is unreadable without them.

Tenant isolation

Ask how one team or customer is kept from reading or disrupting another's messages. NATS accounts isolate messaging domains within one server or cluster, and Pulsar offers tenants with authentication, authorization and quotas. The good answer maps each tenant or account to an owner, sets quotas, and tests that cross-tenant subscriptions fail. Red flag: isolation described only by topic naming conventions. Ask for a test in which one account attempts to subscribe to another account's subjects and is refused.

Audit logging retention

Ask which events are logged, where they are sent, and how long they are kept. Authentication failures, ACL changes, admin actions and topic deletions are the minimum set to review. The good answer names a retention period agreed with the compliance owner and shows that logs leave the broker host for tamper-resistant storage. For high-risk AI systems, Article 19(1) of the EU AI Act requires providers to keep automatically generated logs for at least six months unless other law provides otherwise. Red flag: logs kept only on the broker. Ask for a failed login and an ACL change to be found in the central store during the demonstration.

How should replication and recovery be tested?

What replication settings should a Kafka cluster use for critical topics?

Critical topics should use a replication factor of at least three with a minimum in-sync replica count that lets producers keep writing through a single broker failure while still refusing writes that would not be durable. Ask the partner to show the actual values per topic, set through default.replication.factor and min.insync.replicas or per-topic overrides, and to explain what happens when a broker drops out. Replication factor on paper says little until someone has tested a broker loss under load and recorded whether producers stalled, lost acknowledgements or kept going. A partner who cannot name the values for your top ten topics has not designed the setting, only inherited the defaults.

How is cross-site replication set up and checked for Kafka, Pulsar and NATS?

Each platform has its own mechanism, and the partner should name it for each cluster in scope. Kafka cross-cluster replication is usually handled with MirrorMaker 2, documented in the Kafka geo-replication guide. Pulsar uses its built-in geo-replication between clusters. NATS JetStream replicates streams inside a cluster using Raft, with R3 as the production floor and at most five copies per stream, so cross-site design needs an explicit plan for the second site. For each one, ask how lag between sites is measured, how often it is alerted on, and who verified that data written at the primary arrives at the secondary without gaps or duplicates.

Who sets recovery point and recovery time objectives for each streaming workload?

The business owner of each workload sets the recovery point objective (how much data loss is tolerable) and the recovery time objective (how long the stream can be down), and the platform team designs replication and failover to meet them. A partner should not pick these numbers for you. Ask for a register that lists each topic or stream, its owning function, the agreed objectives, and the design that backs them. Payment streams, clinical orders and telemetry rarely share the same targets, so a single cluster-wide figure is a warning sign. Objectives agreed in writing also become the pass criteria for the failover tests described below.

How often should failover drills be run, and what should the results show?

Failover drills should be scheduled, repeated and recorded, not run once at handover. Your organization should agree the frequency with the partner and the risk owner, and the test plan should name the scenarios: single broker loss, loss of a full site, and a controller or metadata failure. Each run should record the start and end time, the messages produced and consumed, any duplicates or gaps, the measured data loss against the recovery point objective, and the time to resume against the recovery time objective. Ask to see the last three drill reports and the open actions from them. Where a regulator or auditor will review resilience, the same records serve as evidence.

How are consumer offsets handled after a failover?

Consumer offsets are the most common cause of duplicated or skipped processing after a site switch, because the offset numbers on the primary cluster do not match the secondary. With Kafka and MirrorMaker 2, the offset translation for each consumer group has to be checked and applied during failover, and consumers must be ready to handle redelivery. Ask who owns this step, whether it is scripted and tested, and how the team confirms that each critical consumer group resumed at the right position. Consumers that are not idempotent need a documented plan for duplicates. If the partner cannot name an owner for offset translation, the failover plan is incomplete.

Does a backup of Kafka topics or NATS streams prove recovery works?

No. A backup that has never been restored is an unverified file, and a replicated cluster is not a backup, because replication copies mistakes and corruption along with good data. Ask the partner to describe how topic data, cluster configuration, ACLs and schemas are backed up separately, and how each piece is restored into an isolated environment on a schedule. The restore test should compare restored data against a known checkpoint and record the elapsed time. The DORA and PCI DSS sibling topics go further into evidence, but for this question the test is simple: a restore that was run, timed and written down.

Can our own team run replication and recovery tests after handover?

Yes, if the handover covers runbooks, access, and a tested drill your staff can repeat without the partner in the room. Your team needs named operators, documented procedures for failover and offset translation, monitoring of replication lag, and a practiced restore path. The cost of this depends on how many people you will train, how often drills run, and whether a retainer covers standby support during drills. Ask the partner for the handover plan, the training scope in writing, and which drill steps they will still perform after handover. Keep in mind that the first few drills are where gaps surface, so budget for them to be observed rather than assumed to work.

What answers about replication and recovery should worry a buyer?

Be cautious when a partner describes replication without any test history, names a replication factor but cannot say what min in-sync replicas is set to, or says backups are in place without a restore record. Also worry about recovery objectives that were never agreed with the business, a single failover runbook written for one scenario, and no named owner for consumer offset translation. Vague claims that a cluster is highly available or fault tolerant, without test data, are not evidence. Good answers are specific, show recent drill results, and identify who signs off on each objective.

Ask the partner to prove recovery in a rehearsal

A written rehearsal turns recovery claims into measured results: the partner breaks a defined part of the cluster while your engineers watch, then reports what was restored, how fast and what was lost. The record shows whether the platform meets the guarantees your business agreed to, before you rely on it in production.

  1. Agree the test cluster and pass criteria

    Before any test, the partner names the cluster used for the rehearsal, its version, topology, replication settings and the client applications that will produce and consume messages. Your team and the business owners set pass criteria in writing: the recovery time target, the acceptable message loss and the delivery guarantee each topic must keep. Set the targets with the business, since they depend on the systems that consume the streams. The output is a signed test plan that names the topics in scope and who decides pass or fail.

  2. Confirm the baseline and message accounting

    The partner produces a known message set to the test topics with producer settings matching production, such as acknowledgment mode and idempotence where used. Your engineers check the consumer side and record offsets or sequence numbers so every message can be traced afterward. Without this baseline, no later claim about loss can be checked. The step closes when both sides agree on the counts and the replication state is healthy.

  3. Inject the failure in a defined way

    The partner stops one broker or, if the design calls for it, a whole site, using a documented method such as a controlled process stop, a node shutdown or a network cut. The exact target and time of the fault are logged by your engineers, not only by the partner. Ask for the injection to match a failure you expect in production, so the test does not only show the easy case. The step closes when the fault is confirmed in monitoring and the affected components are visibly degraded.

  4. Measure time to restored service

    Your engineers measure from the fault to the point where producers and consumers complete normal operation again, using timestamps from the platform and the client applications. The partner should not be the only source of this clock. Check that leader election, partition reassignment or failover completed without manual steps the runbook did not describe. The output is a recorded restoration time that can be compared against the target agreed in step one.

  5. Check message loss against the guarantee

    Compare the messages produced during and after the fault with the baseline set. Look for missing messages, duplicates and out-of-order delivery, and check each against the guarantee the topic was designed for. A platform that promises at-least-once delivery may show duplicates, which is expected, but missing messages are a failure. Record the counts per topic. The step closes with a reconciliation table that your team has verified independently.

  6. Restore the failed component and confirm rejoin

    The partner brings the stopped broker or site back under the documented procedure and confirms it rejoins the cluster and catches up on data. Your engineers verify replica counts, under-replicated partition counts and that retention and access controls still apply on the returned node. Ask whether any manual data repair was needed, since that is a finding in its own right. The step closes when the cluster reports full health with the same settings as before the test.

  7. Document the findings and agree remediation

    The partner writes a report covering the test plan, the timestamps, the message accounting, every deviation from the runbook and any open issues. Your team reviews the report against the pass criteria and records a pass, fail or conditional result per topic. Failures become tracked remediation items with owners and dates agreed with the partner. The output is a dated rehearsal record that can support later audit or continuity evidence.

  8. Repeat the rehearsal on a schedule

    A single test shows the platform recovered once, under one set of conditions. Ask the partner to include the rehearsal in the handover and in any ongoing retainer, with the scenarios and frequency set by your team. Repeat the test after upgrades, topology changes or new topics with stricter guarantees. The step closes when the schedule and scenario list are written into the operating procedures and owned by your team.

Monitoring and handover questions for the operating team

Which metrics and alerts should a streaming partner deliver on day one?

Ask for a named set covering consumer lag, under-replicated partitions, broker disk usage and controller health on Kafka, backlog and BookKeeper bookie health on Pulsar, and stream replica health and Raft leader status on NATS JetStream. Each alert should state its threshold, its severity and the action expected. Ask the partner to show the alert list in your own monitoring tool, not only a dashboard screenshot. Confirm which metrics come from the broker itself and which need a separate exporter, because that changes what you must run and maintain.

Which exporters does the partner use, and who maintains them?

The answer should name each exporter, its version and where it runs. For NATS, the NATS tooling includes a Prometheus exporter, so ask whether it is deployed and scraped in your environment. For Kafka and Pulsar, ask which exporter or agent exposes broker and client metrics to your monitoring stack, and who updates it when the broker is upgraded. An exporter nobody owns becomes a silent gap in alerting after the first upgrade. Ask for the scrape configuration and the dashboards as files your team keeps in version control.

What should a runbook for a streaming incident contain?

Each runbook should cover one alert or failure mode, state the symptom, the first checks, the commands or console steps, the decision points, the escalation contact and the rollback. Typical topics include a broker that fails to rejoin, a consumer group that stops advancing, a full disk, a lost controller or quorum, and a failed certificate rotation. Ask the partner to show two or three runbooks in their current form. A good runbook names the exact configuration keys or commands for your version, such as the relevant Kafka or NATS settings, rather than generic advice.

Who is on call for the streaming platform, and how is ownership assigned?

The on-call model should name a primary and secondary team for each alert, the hours covered, and the boundary between your staff, the partner and the application teams that produce or consume events. Ask who responds when a consumer lag alert fires because a downstream application is slow, and who responds when a broker is unhealthy. Ownership written as a RACI table with named roles is more useful than a sentence saying the partner supports you. Support hours and response expectations belong in the written scope, and retainers are the usual vehicle for ongoing cover. Confirm the terms with the partner before signing.

What does a good handover acceptance test look like for a streaming platform?

A handover is accepted when your staff perform the tasks themselves and the results are checked against written criteria. Useful tests include restarting one broker or node while producers and consumers keep running, rotating a client certificate, adding a partition or stream replica, triggering a consumer lag alert and following its runbook, and restoring a topic or stream from backup into a test environment. Agree the pass criteria in writing before the test. A handover defined as a list of documents that nobody has executed is not an acceptance test.

How should a partner plan skills transfer to our operating staff?

Ask for a skills plan that names the people who will operate the platform, the sessions they attend, the labs they complete and the tasks they lead under observation before the partner steps back. Shadowing for one or two incident drills is more reliable than a classroom course alone. Ask how the partner records what each engineer can do, and how the plan covers staff turnover after handover. The effort depends on your team's existing Java, Linux, Kubernetes and networking experience, so confirm your starting point in the scoping discussion.

What monitoring and handover questions should worry us about a partner?

Be cautious if the partner delivers dashboards but no runbooks, if handover means a document dump with no tests, or if the partner has no plan for skills transfer. Also be wary of alerts without owners, of metrics that only the partner can read, and of any promise that the platform will not need on-call work. Ask whether monitoring data stays in your storage and whether you can export it if you change partners. An answer that depends on the partner staying indefinitely is a dependency you should price and document.

What does ongoing monitoring and operation cost, and what drives it?

Monitoring and operations cost splits into one-time work (building dashboards, alerts, runbooks and handover tests) and recurring work (on-call cover, upgrades, certificate rotation, capacity reviews and runbook updates). The recurring share grows with the number of clusters, tenants, topics and integrations, and with how many environments you run. Ask the partner to separate these in the quote, to name who is paid for each line, and to state whether support is a retainer or a separate engagement. Your own staff cost for on-call should be included in your internal comparison, since it is the cost most often left out.

Commercial terms that change who carries the risk

Ask every partner for the same written scope before comparing numbers. DeployOpen does not publish a price list, and most of its engagements are fixed-scope, with scope, deliverables and timelines agreed in writing before work starts. Other partners may structure their offers differently, so ask each one to state in writing which brokers, clusters, environments, connectors, integrations, monitoring stack and handover documents are included, and which are excluded. A proposal that only gives a total without naming the components cannot be compared with another one, and gaps in scope are where streaming projects usually overrun.

The question that decides long-term risk is who owns upgrades after go-live. Kafka's time-based release plan supports rolling upgrades from each release in the past year to the latest version, and Kafka 4.0 removed ZooKeeper mode, so an upgrade can also carry a metadata migration. Ask whether upgrades, security patches and Java updates are inside the fixed scope or sold as a retainer, how many upgrade cycles are covered, who runs the rollback plan, and what happens when a supported release leaves support. Ask whether the retainer covers on-call response and who holds administrator credentials at the end of the engagement.

Ask for a clear split between one-time and recurring costs. One-time costs usually include design, deployment, hardening, integration and handover. Recurring costs include the retainer, the infrastructure you pay your cloud or data center provider for, and internal staff time. Ask who licenses each component. Apache Kafka, Apache Pulsar and NATS are Apache-2.0 projects, but some tools around them, such as certain connectors or management consoles, carry different terms, so require a written list of every component with its license and a statement of which ones need a commercial license from a vendor. Confirm in writing whether any commercial license fees are passed through to you.

Which answers should stop the evaluation?

A proposal that answers any of these questions with a slogan instead of a design should stop the evaluation. The red flags below share one pattern: the partner claims a property of the platform without showing the replication, support, security or ownership that makes the claim true.

Zero downtime promises without a design

A partner who promises zero downtime or guaranteed durability but cannot describe the replication factor, the minimum in-sync replicas, the number of brokers or bookies and the failure domains behind the claim is describing a wish. Durability is a property of configuration and placement across racks or zones. Ask for the replication settings per topic class, how the cluster behaves when one zone fails, and which failures the design does not survive. An answer that names the failures it cannot handle is a better sign than one that names none.

Sizing answers with no inputs

A sizing figure given without the inputs behind it cannot be checked or reused. Throughput, message size, retention period, replication factor, consumer fan-out and peak-to-average ratio all change broker and storage needs. Ask the partner to list the inputs they assumed, show the arithmetic, and state which inputs they would need from your team before committing to a number. A quote that cannot be traced back to these inputs will drift once real traffic arrives.

No plan for support windows

Streaming platforms have release cadences and end-of-support dates that decide when you must upgrade. Kafka's downloads page lists 4.3.1, 4.2.2 and 4.1.2 as supported releases, and the project releases three times a year. Pulsar 4.0 LTS active support ends October 21, 2026. Ask how the partner will track these dates, which upgrade path they will follow, and how a KRaft or ZooKeeper migration or a Pulsar LTS move will be scheduled and tested. A partner with no written upgrade plan is leaving your team the next outage.

Security treated as optional

Kafka security is optional by default, so clusters can run with unsecured listeners unless someone configures TLS, SASL and authorization deliberately. A proposal that leaves these as a later phase, or that enables plaintext for convenience, is shipping an open cluster. Ask which authentication mechanism they will use, whether TLS is enforced on every client and inter-broker listener, how ACLs are defined and reviewed, and whether the default for unknown resources denies access. The answer should be a hardened baseline delivered on day one, not a roadmap item.

Recovery claimed but never tested

A recovery time or a backup plan that has never been exercised is an assumption. Ask the partner to show a restore of a topic or stream to a clean environment, the measured elapsed time, the data lost or duplicated, and the offset or sequence handling after failover. For geo-replication, ask how consumer offsets are translated and how a switchover is rehearsed. Request the test record and the date it was last run, and ask who signs off on the results.

Handover as documentation only

A handover that consists of a folder of diagrams and runbooks leaves your team unable to change anything safely. Ask for working handover: named runbooks executed by your operators during the engagement, alerting on broker health, consumer lag and disk growth, documented restore drills, and a supported upgrade path. Ask what your team must be able to do unaided on the last day, and how that is verified.

Refusing to name the engineers

Streaming operations depend on a few people who understand partitioning, replication and client behavior. A partner who will not name the engineers who will build and operate the platform is hiding staffing risk. Ask for the roles, seniority and streaming experience of the named people, whether they stay for the whole engagement, who covers on-call and how replacements are vetted. Ask also how knowledge moves from those engineers to your team.

How to score partner responses

This table lists the seven criteria to score streaming partner answers against, with a weight you set and a rule for full, partial and zero credit. Give the most weight to recovery evidence and security defaults, because a plan that cannot show a tested restore or a secure baseline should not score well regardless of price. Score each answer against the rule before comparing totals.

CriterionWeight (you set)Full credit, partial credit and zero
Recovery evidenceHighestFull: dated restore and failover test results for topics and offsets, with measured recovery times and the scenario tested. Partial: a documented DR plan never run against this cluster. Zero: no test, or the partner says backups are sufficient.
Security baselineHighestFull: TLS on client and broker listeners, SASL or mTLS authentication, ACLs with allow.everyone.if.no.acl.found unset, and secrets handling described. Partial: a hardening checklist without evidence of applied settings. Zero: plaintext listeners or a shared admin account.
Sizing methodHighFull: throughput, retention, partition count and broker and storage calculations tied to your stated peak load, with the assumptions written down. Partial: a rule of thumb without your numbers. Zero: a fixed cluster size quoted before requirements are known.
Upgrade planMediumFull: named source and target versions, a rolling upgrade order and a rollback step, with the vendor's supported upgrade paths cited. Partial: 'we will upgrade when needed' with no version path. Zero: proposing an upgrade path that skips a required migration, such as ZooKeeper to KRaft before a 4.x upgrade.
Monitoring and handoverMediumFull: named metrics and alerts, dashboards, runbooks for common incidents and a handover of credentials, documentation and on-call training with a date. Partial: monitoring offered as a later phase. Zero: the partner keeps admin access after handover or no runbooks exist.
Commercial clarityMediumFull: a fixed-scope written proposal listing deliverables, exclusions, support terms and what recurs after go-live. Partial: hourly estimates with a broad scope. Zero: refusal to state what is included or to separate one-time and recurring costs.
Team and referencesLowerFull: named engineers with streaming operations experience, and references you can call that match your platform and scale. Partial: a team described by role only. Zero: references that cannot be contacted or that are not on self-hosted streaming.

How DeployOpen scopes and supports a streaming evaluation

DeployOpen helps organizations turn streaming RFP questions into a written scope before any platform is chosen or built. We plan, implement, test, document and hand over self-hosted open-source streaming platforms inside your own cloud accounts or data centers, so the answers you collect from partners can be checked against a concrete design.

How we scope

  • Written scope covers throughput, retention, ordering and delivery expectations for each stream in your evaluation.
  • Scope names the Kafka, Pulsar or NATS options under review and the reasons each one is in or out.
  • Engagements are fixed-scope, with deliverables and timelines agreed in writing before work starts.

How we build

  • Design covers TLS, SASL or ACL choices, topic ownership and the cluster placement you require.
  • Replication and recovery tests are planned and run against your stated recovery objectives.
  • Monitoring, alerting and version upgrade steps are configured in your environment, not left as a proposal.

How we hand over

  • Runbooks cover broker operations, upgrades, certificate rotation, backup and restoration of topics.
  • Evidence packs record configuration, access controls and test results for your internal and external reviewers.
  • Handover sessions walk your operations team through failure scenarios and the on-call procedures they will own.

How we support

  • Ongoing support, upgrades and continuous testing are available as a retainer after handover.
  • Retainers can cover patching of Java and broker versions and periodic failover exercises.
  • Support scope is agreed in writing so your team knows which changes DeployOpen handles and which stay internal.

Talk to our team.

Tell us what you're working on, whether it's a deployment, an audit, a security test or a cyber range. You'll speak with an engineer who can help you scope it.

  • 30-minute call: free, with no obligation.
  • NDA on request: we can sign before you share details.
  • Clear next steps: a scope and plan after the call.