apache / apache/fluss

[server] Improve rebalance stability and scalability

Open
#3,867 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Java
Stars
2.1k
Forks
625
Avg merge
3d 14h
Merged PRs (30d)
97

Description

### Search before asking

- [x] I searched in the [issues](https://github.com/apache/fluss/issues) and found nothing similar.

### Description

The goal of this umbrella issue is to improve the overall stability, scalability, and optimization quality of Fluss rebalance.

A production-ready rebalance workflow should generate plans from meaningful cluster load signals, execute large plans efficiently, preserve the intended replica and leader placement, and remain recoverable across timeouts, partial failures, cancellation, and coordinator failover. The current implementation has several independent gaps across those areas, so this issue groups them under one roadmap while keeping each change separately designable and reviewable.

The tracked work covers:

- Execution scalability through configurable bucket-task concurrency.
- Plan durability for plans that exceed ZooKeeper's node-size limit.
- Execution correctness for the leader selected by a reassignment plan.
- Recoverable timeout, retry, restart, and cancellation semantics.
- Disk-load reporting and a corresponding optimization goal for better placement decisions.

### Goals

- Improve rebalance throughput without bypassing coordinator event-thread safety.
- Keep ZooKeeper metadata small and make large plans recoverable.
- Make the final leader and replica assignment match the generated plan.
- Make timeout, retry, restart, and cancellation behavior idempotent and recoverable.
- Incorporate disk utilization into the cluster model and provide an optimization goal that can balance disk load.
- Preserve a clear persisted source of truth across coordinator failover.

### Sub-tasks

- [ ] #3536
- [ ] #3868
- [ ] #3869
- [ ] #3859
- [ ] #1479

These issues are also attached through GitHub's native sub-issue relationship.

### Dependency and sequencing

The timeout recovery and event-fencing state machine in #3859 should remain independent from configurable concurrency. The concurrency work in #3536 can build on that state machine afterward. Remote-plan storage, planned-leader execution, and disk-load optimization can be designed and delivered independently.

### Non-goals

This umbrella does not require all sub-tasks to be implemented in one pull request. Each sub-task should have its own focused design, tests, and pull request.

### Willingness to contribute

- [x] I'm willing to submit PRs for these tasks.

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by reading the linked sub-tasks #3536, #3868, #3869, #3859, and #1479, paying attention to the stated sequencing between timeout recovery and concurrency. This umbrella is complete when each independently scoped change has its own design, tests, and pull request; it is not intended to be implemented as one contribution.

Written by the indexing model from the issue text.

Assessment

Tech stack
java
Domain
backend, distributed-systems
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
25/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.