Redis Stream Coordinator
Design docs

Redis Stream Coordinator Design

Redis Stream Coordinator는 Kafka KIP-848의 coordinator-managed rebalance 개념을 Redis Stream sharding에 맞게 재설계한 프로젝트이다. 이 프로젝트는 coordinator 전용 서버, Spring Boot consumer 통합 모듈, Spring Boot producer routing/publishing 모듈, 운영용 monitoring/API 문서를 함께 제공한다.

이 모듈을 만든 이유는 명확하다. Redis Stream은 가벼운 append-only log로 쓰기 좋지만, 하나의 stream key는 BigKey가 될 수 있고 Redis Cluster에서도 하나의 hash slot과 하나의 primary node에 트래픽이 몰릴 수 있다. Redis 자체에는 logical stream을 여러 physical shard stream key로 나눈 뒤 producer routing metadata, consumer membership, shard ownership, revoke-before-assign handoff, resharding protocol을 중앙에서 관리하는 broker-side coordinator가 없다. Redis Stream BigKey 문제와 Redis Cluster 균등 분산, consumer ownership coordination을 함께 다루는 공개 레퍼런스도 거의 없다. 이 프로젝트는 그 공백을 재사용 가능한 오픈소스 control plane과 Spring Boot integration으로 제공하기 위해 만들어졌다.

Design Index

  1. Context, Goals, Non-Goals
  2. Coordinator Architecture
  3. Group Metadata and Assignment Model
  4. Resharding, Routing, and Admin API
  5. Member Data-Plane Boundary
  6. Coordinator Data, Configuration, and Observability
  7. MVP Scope, Tradeoffs, Risks, and Open Questions
  8. KIP-848 Implementation Coverage
  9. Coordinator API Endpoints
  10. RedisStream Spring Boot Starter and Integration Contract
  11. Versioning and Compatibility Policy
  12. Failure Modes and Edge Cases
  13. Terraform and GitOps Governance
  14. Edge Case Q&A
  15. Scalar API Reference

왜 이 프로젝트가 필요한가

Redis Stream 애플리케이션은 보통 topic 하나를 stream key 하나로 시작한다. 구조는 단순하지만 stream entry, pending-entry metadata, consumer-group metadata, read/write traffic이 하나의 Redis key에 집중된다. Redis Cluster에서도 하나의 key는 하나의 hash slot에 매핑되므로 cluster node를 늘려도 hot stream이 자동으로 분산되지 않는다.

이를 완화하려면 하나의 logical stream을 여러 physical shard stream key로 나누어야 한다. 그 순간 producer는 현재 shard layout을 알아야 하고, consumer는 어떤 shard를 읽어야 하는지 ownership assignment가 필요하며, operator는 같은 shard를 두 consumer가 동시에 처리하지 않도록 scale-out/in을 관리해야 한다.

이 프로젝트는 Redis Stream을 data plane으로 유지하면서, coordinator-owned metadata, heartbeat 기반 assignment, revoke-before-assign handoff, producer routing metadata, operator monitoring API를 제공한다.

Product Summary

Redis Stream Coordinator는 Redis Stream shard ownership을 중앙에서 관리하는 control-plane 서버이다. 각 consumer runtime member는 coordinator API로 heartbeat를 보내 현재 상태를 보고하고, coordinator는 group metadata 변화에 따라 target assignment를 계산한다. member는 target assignment에 독립적으로 수렴하며, coordinator는 revoke가 완료되기 전 같은 shard를 다른 member에게 assign하지 않는다.

Consumer 모듈은 heartbeat, assignment, revoke, fencing, optional Redis Stream polling을 애플리케이션에 연결한다. Producer 모듈은 coordinator의 shard count과 shard routing metadata를 사용해 Redis Stream shard로 publish한다.

Core Decisions

Success Criteria

Guarantee Boundaries