{"id":25293607,"url":"https://github.com/nicktindall/java-raft","last_synced_at":"2025-10-28T01:31:54.825Z","repository":{"id":59266301,"uuid":"168089899","full_name":"nicktindall/java-raft","owner":"nicktindall","description":"A Java implementation of the Raft consensus algorithm","archived":false,"fork":false,"pushed_at":"2024-05-12T01:55:42.000Z","size":824,"stargazers_count":16,"open_issues_count":1,"forks_count":5,"subscribers_count":1,"default_branch":"master","last_synced_at":"2024-05-12T11:57:03.418Z","etag":null,"topics":["java","mit-license","raft-consensus-algorithm"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/nicktindall.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2019-01-29T04:38:05.000Z","updated_at":"2024-05-12T01:55:35.000Z","dependencies_parsed_at":"2024-05-01T12:37:45.929Z","dependency_job_id":"b8aee18d-2e50-4d53-8fd3-5de59cfe3c72","html_url":"https://github.com/nicktindall/java-raft","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicktindall%2Fjava-raft","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicktindall%2Fjava-raft/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicktindall%2Fjava-raft/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nicktindall%2Fjava-raft/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nicktindall","download_url":"https://codeload.github.com/nicktindall/java-raft/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":238579794,"owners_count":19495551,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["java","mit-license","raft-consensus-algorithm"],"created_at":"2025-02-13T01:55:01.118Z","updated_at":"2025-10-28T01:31:54.821Z","avatar_url":"https://github.com/nicktindall.png","language":"Java","funding_links":[],"categories":["分布式开发"],"sub_categories":["微服务框架"],"readme":"# java-raft\n[![CircleCI](https://circleci.com/gh/nicktindall/java-raft.svg?style=svg)](https://circleci.com/gh/nicktindall/java-raft)\n[![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=nicktindall_java-raft\u0026metric=alert_status)](https://sonarcloud.io/dashboard?id=nicktindall_java-raft)\n\nA Java implementation of the [Raft consensus algorithm](https://raft.github.io/)\n\n## motivation\nI'm implementing the protocol in order to get a more in-depth understanding of it. Also as a challenge to make a readable implementation of the \"understandable\" consensus algorithm.\n\n## Status\nThe parts of the algorithm I have implemented (according to the thesis chapters) are:\n\n|Chapter   |Name   | Status   |\n|----------|-------|----------|\n| 3.4 | Leader election | :heavy_check_mark: |\n| 3.5 | Log replication | :heavy_check_mark: |\n| 3.6.1 | Election restriction | :heavy_check_mark: |\n| 3.6.2 | Committing entries from previous terms | :heavy_check_mark: |\n| 3.7 | Follower and candidate crashes | :heavy_check_mark: |\n| 3.8 | Persisted state and server restarts | :heavy_check_mark: |\n| 3.10 | Leadership transfer extension | :heavy_check_mark: |\n| 4 | Cluster membership changes | :heavy_check_mark: |\n| 4.2.1 | Catching up new servers | :heavy_check_mark: |\n| 4.2.2 | Removing the current leader | :x: |\n| 4.2.3 | Disruptive servers | :heavy_check_mark: |\n| 4.3 | Arbitrary configuration changes using joint consensus | :x: |\n| 5 | Log compaction | :heavy_check_mark: |\n| 6.1 | Finding the cluster | :x: |\n| 6.2 | Routing requests to the leader | :heavy_check_mark: |\n| 6.3 | Implementing linearizable semantics | :heavy_check_mark: |\n| 6.4 | Processing read-only queries more efficiently | :x: |\n\n## Dependencies\nThe only runtime dependency is log4j 2, the aim is to implement with minimal dependencies\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicktindall%2Fjava-raft","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnicktindall%2Fjava-raft","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnicktindall%2Fjava-raft/lists"}