I’ve been digging into the codebase and thinking about what a longer-term path might look like. Specifically, whether the segment metadata and assignment data (IdealState) could move to an embedded Raft+RocksDB store on the controllers, keeping ZooKeeper for what it’s good at: leader election, liveness, small coordination signals. Systems like Doris/StarRocks and Kafka (via KRaft) have taken this approach for similar reasons.
I was able to PoC the Raft+RocksDB approach on one of our clusters with success, so this has given me more motivation to look into this path.