Lesson 18 · Senior NATS practice
Senior NATS interview questions
High-signal NATS and JetStream questions about subjects, queue groups, replay, delivery, tenancy, and design judgment — with answer shapes that sound like real backend maturity.
Your win: answer senior NATS and JetStream questions with model + trade-off + repo-grounded consequence, not just textbook vocabulary.
Why these questions feel different
Foundational NATS questions ask whether you know subjects, consumers, and acks. Senior NATS questions ask whether you can reason with those tools under pressure.
That means the answer shape matters. A strong answer usually names the model, the main trade-off or risk, and the repo-grounded consequence. Without that last part, answers often sound memorized instead of owned.
The question behind every answer
Most weak interview answers fail in one of two ways. Either they stay too abstract and sound like official-doc paraphrases, or they jump straight to repo trivia without first stating the model clearly. Strong answers do both in order.
That is the real point of this page: not just to give you prompts, but to train your answer rhythm so it sounds like engineering judgment instead of glossary recall.
Question bank
| Question | Best answer shape |
|---|---|
| Why is subject taxonomy an architectural choice? | Because subject families influence wildcard capture, stream ownership, replay scope, and ACL boundaries. |
| Why doesn’t a queue group solve every throughput problem? | Because handler cost, push-vs-pull shape, and backpressure still limit sustainable throughput. |
| Why is the zeus consumer pull-based while most others are push queue groups? | Because batch-controlled fetch and pacing fit the activity-log workload better than server-driven push delivery. |
| Why isn’t Nats-Msg-Id dedup enough by itself? | Because dedup covers only some repeated publishes; redelivery and stale-event safety still need application-level idempotency. |
| What is the real gap in the repo’s failure model? | Ack-only handling plus no DLQ means poison messages are either retried by timeout or acknowledged away without richer failure recovery. |
| How does tenant isolation survive an async JetStream hop? | The DataInMessage envelope carries resource_path and user context, and handleMsg re-injects them into context before the handler runs. |
| Why is InterestPolicy meaningful here? | Because the repo wants streams to keep data only while interested consumers still need it, not as a long replay log like Kafka. |
| What should a senior review ask about a NATS design? | What exact guarantees it really provides about delivery, replay, tenancy, and failure handling, and where trade-offs remain. |
| When should a flow move from NATS to Kafka? | When it needs a more durable replayable pipeline shape, higher-throughput log semantics, or better fit with CDC/data-stream workflows. |
| What is the strongest one-line description of JetStream here? | Durable internal eventing with at-least-once delivery, consumer-state tracking, and repo-specific tenancy/tracing restoration on consume. |
DataInMessage, handleMsg, interest retention, queue-group defaults, zeus pull batching, the missing DLQ, and the NATS→Kafka migration.
Use the playbook and map together
The senior playbook compresses the judgment layer; the repo map gives you the ground truth that makes answers sound real.
Check yourself (from memory)
Q1. A strong senior NATS answer usually includes…
Sources. Repo NATS map; curated NATS resources.