← Confluent Interview Insights

Confluent·Software Engineer·Onsite - System Design / Architecture·Senior

SeniorPrefer not to say
May 2026

Summary

System design round at Confluent for a software engineer role, focused entirely on building an RSS feed aggregator. The interviewer kept steering things toward API design and client heterogeneity, which I wasn't fully prepared for.

Questions Asked (5)

Q1

Design an RSS feed aggregation system where users can subscribe to feeds, the service periodically crawls them, and serves each user a personalized merged timeline.

System DesignTechnical Trade-offsData Modeling
Author's notes

I started with the usual stuff: subscription storage, a crawler pool, a feed item table.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements and scale, then design a system that separates feed ingestion (crawling and parsing) from timeline generation (fan-out and merging). Focus on data modeling for feeds, items, and subscriptions, and discuss trade-offs between push vs. pull models for timeline delivery.

Pro tip: Emphasize idempotency and deduplication in crawling, and consider using a log-based architecture (like Kafka) for scalability and replayability—this aligns well with Confluent's expertise.

1. Clarify Requirements and Scale

Ask about number of users, feeds, update frequency, latency expectations, and consistency needs. Define functional and non-functional requirements.

2. High-Level Architecture

Outline components: feed crawler, parser, storage, timeline service, and user-facing API. Decide on push vs. pull for timeline updates.

3. Data Modeling

Design schemas for feeds, items, subscriptions, and user timelines. Consider normalization vs. denormalization and indexing for efficient queries.

4. Crawling and Processing

Detail how to schedule crawls, handle failures, deduplicate items, and scale horizontally. Discuss rate limiting and politeness.

5. Timeline Generation and Serving

Explain how to merge items from multiple feeds per user, handle ranking, and serve with low latency. Discuss caching and precomputation.

Key Points to Mention

  • Push vs. pull models for timeline updates and their trade-offs
  • Use of a message queue (e.g., Kafka) for decoupling and scalability
  • Deduplication and idempotency in crawling to avoid duplicate items
  • Data partitioning and indexing strategies for efficient timeline queries
  • Caching and precomputation for low-latency timeline serving
  • Handling failures and retries in distributed crawling

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q2

How would you design the API layer for this system, and when would you choose REST over something like gRPC?

API & IntegrationsTechnical Trade-offs
Author's notes

This one I actually felt okay about.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the system's requirements—such as latency, throughput, clients, and data contracts—then propose a layered API design (e.g., external REST for public clients, internal gRPC for service-to-service). Explain the trade-offs between REST and gRPC based on concrete factors like performance, streaming, and tooling, and tie your choices back to Confluent's event-driven ecosystem.

Pro tip: Mention that Confluent's own products often use REST for control-plane APIs and gRPC for high-performance data-plane communication, showing you understand real-world hybrid architectures. Also, emphasize that API design should be driven by consumer needs and operational constraints, not technology hype.

1. Clarify requirements and constraints

Ask about expected traffic patterns, latency budgets, client types (web, mobile, internal services), and whether streaming or real-time communication is needed. This ensures your design is grounded in actual needs.

2. Propose a layered API architecture

Suggest separating external-facing APIs (often REST/HTTP for broad compatibility) from internal service-to-service APIs (potentially gRPC for performance). Mention API gateways, versioning, and contract management.

3. Compare REST and gRPC on key dimensions

Discuss trade-offs: REST is simple, human-readable, cacheable, and widely supported; gRPC offers lower latency, smaller payloads (Protobuf), bidirectional streaming, and strong typing. Highlight when each shines.

4. Decide based on use case and ecosystem

Choose REST for public APIs, CRUD operations, and when browser compatibility or caching is critical. Choose gRPC for internal microservices, high-throughput, low-latency, or streaming scenarios. Consider hybrid approaches.

5. Address operational concerns

Mention monitoring, debugging, load balancing, and schema evolution. For gRPC, note the need for proxies (e.g., Envoy) for external access; for REST, discuss OpenAPI and rate limiting.

Key Points to Mention

  • REST: stateless, HTTP verbs, JSON/XML, cacheable, broad tooling, easier for public APIs.
  • gRPC: HTTP/2, Protobuf, bidirectional streaming, code generation, lower latency, ideal for internal microservices.
  • Hybrid architecture: use REST externally and gRPC internally, with an API gateway to translate.
  • Confluent context: Kafka ecosystem often uses REST for management and gRPC for high-performance data paths.
  • Trade-offs: development speed vs. performance, schema evolution, browser support, and debugging complexity.
  • Operational considerations: monitoring, load balancing, versioning, and backward compatibility.

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q3

How do you expose the same backend to different client types like a web app, mobile app, and third-party developers?

API & IntegrationsSystem DesignTechnical Trade-offs
Author's notes

Blanked for a second here.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying the different client needs and constraints, then propose an API layer that abstracts the backend. Discuss API gateway, versioning, and authentication/authorization strategies to securely expose the same backend to web, mobile, and third-party developers. Emphasize trade-offs between a single unified API and tailored APIs (e.g., BFF pattern).

Pro tip: Highlight the importance of API versioning and backward compatibility for third-party developers, and mention how Confluent's own products (like Kafka and Schema Registry) handle multi-client access with security and scalability.

1. Identify Client Requirements

Analyze the specific needs, constraints, and usage patterns of web, mobile, and third-party clients (e.g., latency, payload size, authentication methods).

2. Design API Abstraction Layer

Propose an API gateway or facade that routes requests, handles cross-cutting concerns (auth, rate limiting, caching), and can tailor responses per client if needed.

3. Choose API Style and Contracts

Decide between REST, GraphQL, gRPC, or event-driven APIs based on client needs; define clear contracts and versioning strategy to support evolution.

4. Implement Security and Access Control

Use OAuth 2.0, API keys, or JWT for authentication; enforce fine-grained authorization (e.g., scopes, roles) to differentiate access for internal vs. third-party clients.

5. Address Scalability and Monitoring

Ensure the API layer scales horizontally, includes observability (logging, metrics, tracing), and provides developer portals/documentation for third parties.

Key Points to Mention

  • API Gateway (e.g., Kong, Apigee) for routing, throttling, and analytics
  • Backend-for-Frontend (BFF) pattern to tailor responses per client type
  • API versioning strategies (URI, header, media type) and deprecation policies
  • Authentication/authorization mechanisms (OAuth 2.0, API keys, JWT) and scopes
  • Rate limiting and quotas to protect backend from abuse by third parties
  • Developer experience: documentation (OpenAPI/Swagger), SDKs, sandbox environments

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q4

How would you schedule and manage the crawler to periodically fetch subscribed RSS feeds without redundant or duplicate work?

System DesignTechnical Trade-offs
Author's notes

Talked about a job queue with per-feed scheduling, using something like a last-fetched timestamp to throttle crawls.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements such as feed update frequency, scale, and tolerance for duplicates. Then propose a scheduling architecture (e.g., distributed cron or message queue) with deduplication mechanisms like content hashing or conditional GETs, and discuss trade-offs between polling frequency, resource usage, and freshness.

Pro tip: Mention using HTTP conditional GETs (ETag/Last-Modified) to avoid fetching unchanged feeds, and emphasize idempotency in processing to handle retries safely.

1. Clarify Requirements

Ask about scale (number of feeds, update frequency), freshness requirements, and acceptable latency. This shapes the scheduling and deduplication strategy.

2. Design Scheduling Mechanism

Propose a distributed scheduler (e.g., cron, Quartz, or cloud scheduler) or a queue-based system where feeds are enqueued at their next poll time. Ensure scalability and fault tolerance.

3. Implement Deduplication

Use conditional GETs with ETag/Last-Modified headers to skip unchanged feeds. For items, compute a hash of the content or use GUIDs to detect duplicates before processing.

4. Handle Failures and Retries

Design for idempotent processing and exponential backoff on failures. Use a dead-letter queue for persistent errors and monitor feed health.

5. Discuss Trade-offs

Compare polling frequency vs. resource usage, centralized vs. distributed scheduling, and push (WebSub) vs. pull. Highlight how your choices align with requirements.

Key Points to Mention

  • Conditional GET (ETag/Last-Modified) to avoid redundant fetches
  • Content hashing or GUIDs for item-level deduplication
  • Distributed scheduling with idempotent processing
  • Exponential backoff and dead-letter queues for error handling
  • Trade-offs between polling frequency and freshness
  • Alternative: WebSub (PubSubHubbub) for push-based updates

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.

Q5

How would you store and manage per-user read/unread/starred state at scale?

System DesignData Modeling
Author's notes

Went with a sparse table approach: only store explicit state changes rather than a row per user per item.

Create a free account to read the full note

AI HintsAI Generated

Suggested Approach

Start by clarifying requirements: scale (users, items, QPS), consistency needs, and query patterns. Then propose a data model that separates immutable content from mutable per-user state, using a scalable store like Cassandra or DynamoDB with composite keys (user_id, item_id) and efficient indexing for queries like 'unread items'. Finally, discuss trade-offs between storage cost, read/write latency, and consistency, and how to handle hot keys and large fan-out.

Pro tip: Emphasize that read/unread/starred state is often eventually consistent and can be modeled as a sparse set of overrides rather than a dense matrix, drastically reducing storage and write amplification. Also mention using Kafka for change data capture to propagate state changes to downstream systems, aligning with Confluent's core product.

1. Clarify Requirements and Scale

Ask about the number of users, items per user, read/write QPS, latency requirements, and consistency needs (e.g., can a user see stale unread counts?).

2. Design the Data Model

Propose a schema that stores per-user state efficiently, such as a wide-column store with partition key user_id and clustering key item_id, or a document store with a map of item states.

3. Choose Storage and Indexing Strategy

Select a distributed database (e.g., Cassandra, DynamoDB) and design secondary indexes or materialized views to support queries like 'get all unread items for user' and 'get all users who starred item'.

4. Address Scalability and Performance

Discuss partitioning, replication, caching, and handling hot keys (e.g., a celebrity's item starred by millions). Consider write amplification and use of bloom filters.

5. Handle Consistency and Updates

Explain how to manage concurrent updates, idempotency, and eventual consistency. Mention using Kafka for event sourcing or CDC to propagate state changes.

Key Points to Mention

  • Composite key design: (user_id, item_id) for efficient point lookups and range scans
  • Sparse storage: only store non-default states (e.g., unread, starred) to reduce data volume
  • Secondary indexes or materialized views for reverse lookups (e.g., users who starred an item)
  • Caching frequently accessed data (e.g., unread counts) with Redis or similar
  • Event-driven architecture with Kafka for state change propagation and auditability
  • Trade-offs between consistency models (strong vs. eventual) and their impact on user experience

AI-generated suggestions, not part of the candidate's original notes. May be inaccurate — verify before relying on them.