perf(cluster): reduce idle replica traffic caused by Commit heartbeats
Los mantenedores suelen responder en 1 día
@mmmmxa ya está trabajando en esto.
Desde el 2/11/2026.
Evaluación
Este issue todavía no se ha evaluado.
Descripción
Description
Every partition is a VSR consensus group. Commit signals are sent with a certain frequency in order to communicate the latest commit id and signal the liveness of the primary. When the group is idle, the Commit is sent roughly every 500-700 ms in order to communicate that the primary is still working. It takes up a lot of network bandwidth while the system is doing nothing. This scales with partition size and causes substantial CPU and network bandwidth waste.
Affected area / component
Clustering / replication, Wire protocol / API, Performance
Proposed solution
- Batch the messages. Each shard sends heartbeats on a schedule to which every group snaps. This allows putting many commit messages into a single new
CommitMessageBatchmessage, which reduces the traffic significantly. - Heartbeat backoff / adaptive heartbeat. If a heartbeat repeats (has the same view and commit point as the previous one), the group waits longer before the next one, increasing until it hits a time limit set from a config.
Wire change. This adds a #[repr(C)] command and one field to CommitHeader, and bumps REPLICA_WIRE_REVISION from 1 to 2. Please confirm this is acceptable.
Results so far
Alternatives considered
- Introduce a separate shard-level liveness signal and a separate message to inform backups of
Commitinformation. This requires a protocol change that is harder to reason about and is likely a future improvement. - Only batch, with no back-off. Current results show that the batch is responsible for ~83% of traffic reduction and the heartbeat backoff is ~10%. This may seem insignificant, but at scale this reduction is substantial.
Contribution
- I'm willing to submit a pull request to implement this feature
The issue description is to be updated as the specification for this solidifies.
- Lenguaje dominante
- Rust
- Estrellas
- 5.2k
- Forks
- 502
- Merge medio
- 3 d 4 h
- PR fusionados (30 d)
- 157
Preparar el entorno
Inicia el contenedor de desarrollo del proyecto en tu navegador, con tu propia cuenta de GitHub.
- Incluye un Dockerfile o un archivo de Docker Compose
- Tiene una plantilla de pull request
- Leer la guía de contribución
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de apache/iggy
-
Go examples: add a message envelope producer and consumerPosiblemente ocupada @ThunderGod77 la tomó hace 2 días. Abiertogo good first issue
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
apache/iggy#4694 · 3 comentarios · 1 asignado ·
Los mantenedores suelen responder en 1 día
-
HTTP client treats a consumer group as a plain consumerPosiblemente ocupada @mohitduhan19 la tomó hace 20 días. Abiertobug rust server
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
apache/iggy#4408 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
Add the fail-fast connection option to the Rust and Python quick-startsPosiblemente ocupada @QIW9 la tomó hace 8 días. Abiertodocs good first issue
Dificultad 1/5 1-3 horas Aptitud para principiantes 92/100
apache/iggy#4261 · 3 comentarios ·
Los mantenedores suelen responder en 1 día
-
bug python sdk
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
apache/iggy#3748 · 1 comentario ·
Los mantenedores suelen responder en 1 día
-
bug(partitions): a_removal_cut_short_leaves_the_marker_in_place panics when tests run as rootPosiblemente ocupada @coding-by-sea la tomó hoy. Abiertobug CI/CD
apache/iggy#4753 · 1 asignado ·
Los mantenedores suelen responder en 1 día
Todos los issues de apache/iggy
Issues similares
-
state:needs triage
Dificultad 2/5 1-3 horas Aptitud para principiantes 75/100
zed-industries/zed#66543 ·
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 72/100
ruffle-rs/rust-flash-lso#142 ·
-
area: docs type: docs
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
Los mantenedores suelen responder en 1 día
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 68/100
light-curve/light-curve-python#870 ·
Los mantenedores suelen responder en 1 día
-
bug file-compat priority: high
Dificultad 2/5 1-3 horas Aptitud para principiantes 76/100
storytold/photocraft#11330 · 1 comentario ·
Los mantenedores suelen responder en 1 día