{"id":15653022,"url":"https://github.com/izeigerman/akkeeper","last_synced_at":"2025-08-25T18:39:19.693Z","repository":{"id":55534657,"uuid":"82426806","full_name":"izeigerman/akkeeper","owner":"izeigerman","description":"An easy way to deploy your Akka services to a distributed environment.","archived":false,"fork":false,"pushed_at":"2022-12-23T14:42:14.000Z","size":389,"stargazers_count":30,"open_issues_count":1,"forks_count":6,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-30T17:43:17.952Z","etag":null,"topics":["akka","deployment","distributed-actors","distributed-systems","hadoop","monitoring","yarn"],"latest_commit_sha":null,"homepage":null,"language":"Scala","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/izeigerman.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}},"created_at":"2017-02-19T01:15:16.000Z","updated_at":"2023-11-08T23:50:32.000Z","dependencies_parsed_at":"2023-01-30T18:45:43.998Z","dependency_job_id":null,"html_url":"https://github.com/izeigerman/akkeeper","commit_stats":null,"previous_names":[],"tags_count":20,"template":false,"template_full_name":null,"purl":"pkg:github/izeigerman/akkeeper","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izeigerman%2Fakkeeper","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izeigerman%2Fakkeeper/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izeigerman%2Fakkeeper/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izeigerman%2Fakkeeper/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/izeigerman","download_url":"https://codeload.github.com/izeigerman/akkeeper/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/izeigerman%2Fakkeeper/sbom","scorecard":{"id":499265,"data":{"date":"2025-08-11","repo":{"name":"github.com/izeigerman/akkeeper","commit":"4b150283e380748dd8a4dcf420b9a35a8e67078b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3,"checks":[{"name":"Code-Review","score":0,"reason":"Found 2/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.4.11 not signed: https://api.github.com/repos/izeigerman/akkeeper/releases/22485841","Warn: release artifact v0.4.10 not signed: https://api.github.com/repos/izeigerman/akkeeper/releases/19389393","Warn: release artifact v0.4.9 not signed: https://api.github.com/repos/izeigerman/akkeeper/releases/16004562","Warn: release artifact v0.4.8 not signed: https://api.github.com/repos/izeigerman/akkeeper/releases/15705286","Warn: release artifact v0.4.7 not signed: https://api.github.com/repos/izeigerman/akkeeper/releases/15387237","Warn: release artifact v0.4.11 does not have provenance: https://api.github.com/repos/izeigerman/akkeeper/releases/22485841","Warn: release artifact v0.4.10 does not have provenance: https://api.github.com/repos/izeigerman/akkeeper/releases/19389393","Warn: release artifact v0.4.9 does not have provenance: https://api.github.com/repos/izeigerman/akkeeper/releases/16004562","Warn: release artifact v0.4.8 does not have provenance: https://api.github.com/repos/izeigerman/akkeeper/releases/15705286","Warn: release artifact v0.4.7 does not have provenance: https://api.github.com/repos/izeigerman/akkeeper/releases/15387237"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 12 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-19T21:22:45.955Z","repository_id":55534657,"created_at":"2025-08-19T21:22:45.955Z","updated_at":"2025-08-19T21:22:45.955Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272116108,"owners_count":24876264,"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","status":"online","status_checked_at":"2025-08-25T02:00:12.092Z","response_time":1107,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["akka","deployment","distributed-actors","distributed-systems","hadoop","monitoring","yarn"],"created_at":"2024-10-03T12:44:30.035Z","updated_at":"2025-08-25T18:39:19.662Z","avatar_url":"https://github.com/izeigerman.png","language":"Scala","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Akkeeper\n\n[![Build Status](https://travis-ci.org/izeigerman/akkeeper.svg?branch=master)](https://travis-ci.org/izeigerman/akkeeper)\n[![Coverage Status](https://coveralls.io/repos/github/izeigerman/akkeeper/badge.svg?branch=master)](https://coveralls.io/github/izeigerman/akkeeper?branch=master)\n[![License](http://img.shields.io/:license-Apache%202-red.svg)](http://www.apache.org/licenses/LICENSE-2.0.txt)\n\nAkkeeper (Akka Keeper or Actor Kernel Keeper) - is an easy way to deploy your Akka application to a distributed environment. [Akka](http://akka.io/) is a widely used Actor framework, but there are still no good practices and approaches of deploying applications that are based on this framework. Akkeeper provides a powerful set of capabilities to maintain your cluster. You can easily deploy, terminate and monitor your services at runtime. Akkeeper was built keeping Hadoop as a primary use case, that's why it currently supports only [YARN](https://hadoop.apache.org/docs/r2.7.1/hadoop-yarn/hadoop-yarn-site/YARN.html) as a resource manager. But this doesn't mean that other environments won't appear in future. Apache Spark and Apache Flink are good examples of Akka applications on Hadoop. Although both of them are data processing frameworks, I realised that YARN is not only MapReduce and can be used to distribute any kind of application. As a result your application acquires elasticity and resilience out of the box.\n\nSome of the features provided by Akkeeper:\n* Builds the Akka Cluster and automatically discovers all cluster participants.\n* Allows to launch and terminate instances at runtime.\n* Application Master fault tolerance. Rejoins the existing cluster after restart.\n\nHere are several ways of how Akkeeper can be useful for your project:\n* Distribute your microservices using Akkeeper.\n* Keep your master service(s) separately and use Akkeeper to launch new workers/executors on demand.\n\nThe project documentation is under construction.\n\n## How to build\nRequirements:\n```\nJava 8\nSBT version \u003e= 1.0.0\n```\nTo build a bundle for Scala 2.11: \n```\n// ZIP\nsbt ++2.11.11 universal:packageBin\n// TGZ\nsbt ++2.11.11 universal:packageZipTarball\n```\nScala 2.12:\n```\n// ZIP\nsbt ++2.12.6 universal:packageBin\n// TGZ\nsbt ++2.12.6 universal:packageZipTarball\n```\nTo build examples:\n```\nsbt package\n```\n\n## Basic concepts\nTo understand how Akkeeper works you have to be aware of only two concepts: containers and instances.\n\n### Container\nContainer defines an environment where the instance is running. Container determines how many resources should be allocated for the instance and what actors should be launched as part of this instance. Containers can be added, removed and modified dynamically at runtime.\n\n### Instance\nInstance is an execution unit in Akkeeper. Instance is just a running process with capabilities and properties of its container. \"Deploy container\" or \"launch instance of container `container_name`\" means the same - launching a process on some node in a cluster using the specified container's definition. Instances can be launched, monitored and terminated dynamically at runtime.\n\n## How to use\nDownload and unpack the latest Akkeeper package:\n- Scala 2.11: [ZIP](https://bintray.com/izeigerman/akkeeper/download_file?file_path=akkeeper_2.11-0.4.11.zip) / [TGZ](https://bintray.com/izeigerman/akkeeper/download_file?file_path=akkeeper_2.11-0.4.11.tgz)\n- Scala 2.12: [ZIP](https://bintray.com/izeigerman/akkeeper/download_file?file_path=akkeeper_2.12-0.4.11.zip) / [TGZ](https://bintray.com/izeigerman/akkeeper/download_file?file_path=akkeeper_2.12-0.4.11.tgz)\n\nIn order to use the Scala API the following dependency must be added to `build.sbt`:\n```\nlibraryDependencies += \"com.github.izeigerman\" %% \"akkeeper-api\" % \"0.4.11\"\n```\nIn case if you need to launch Akkeeper from your code the following dependency must be introduced:\n```\nlibraryDependencies += \"com.github.izeigerman\" %% \"akkeeper-launcher\" % \"0.4.11\"\n```\nThe easiest way to start using Akkeeper is through the configuration file. Here is a quick start configuration file example:\n```\nakkeeper {\n  # The list of container definitions.\n  containers = [\n    {\n      # The unique name of the container.\n      name = \"myContainer\"\n      # The list of actors that will be launched in scope of this container.\n      actors = [\n        {\n          # The actor's name.\n          name = \"myActor\"\n          # The fully qualified name of the Actor implementation.\n          fqn = \"com.test.MyActor\"\n        }\n      ]\n      # The number of CPUs that has to be allocated.\n      cpus = 1\n      # The amount of RAM in MB that has to be allocated.\n      memory = 1024\n      # Additional JVM arguments that will be passed to instances of this container.\n      jvm-args = [ \"-Xmx2G\" ]\n      # Custom Java properties. Can be used to override the configuration values.\n      properties {\n        myapp.myservice.property = \"value\"\n        akka.cluster.roles.0 = \"myRole1\"\n        akka.cluster.roles.1 = \"myRole2\"\n      }\n    }\n  ]\n}\n```\nMake sure your `HADOOP_CONF_DIR` and `YARN_CONF_DIR` environment variables point to the directory where the Hadoop configuration files are stored. Also `ZK_QUORUM` variable should contain a comma-separated list of ZooKeeper servers.\nNow just pass this file together with your JAR archive which contains actor `com.test.MyActor` to Akkeeper:\n```\n./bin/akkeeper-submit --config ./config.conf /path/to/my.jar\n```\n\n## How to deploy and monitor instances at runtime\n\n### REST API\n[REST API documentation](https://github.com/akkeeper-project/akkeeper/blob/master/docs/rest.md)\n\n### Akkeeper Actor services\nThis approach is applicable only when you're managing an Akkeeper cluster from the application or service which is part of the same Akka cluster.\n\n#### Deploy API\nUse this API to launch new instances on a cluster.\n```scala\nimport akkeeper.api._\nimport akkeeper.master.service.DeployService\n...\nval actorSystem = ActorSystem(\"AkkeeperSystem\")\n// Create a remote Deploy Service actor reference.\nval deployService = DeployService.createRemote(actorSystem)\n// Launch 1 instance of container \"myContainer\".\n(deployService ? DeployContainer(\"myContainer\", 1)).onSuccess {\n  case SubmittedInstances(requestId, containerName, instanceIds) =\u003e // submitted successfully.\n  case OperationFailed(requestId, reason) =\u003e // deploy failed.\n}\n```\n\n#### Monitoring API\nUse this API to track instance status or terminate a running instance.\n```scala\nimport akkeeper.api._\nimport akkeeper.master.service.MonitoringService\n...\nval actorSystem = ActorSystem(\"AkkeeperSystem\")\n// Create a remote Monitoring Service actor reference.\nval monitoringService = MonitoringService.createRemote(actorSystem)\n// Fetch the list of running instances.\n(monitoringService ? GetInstances()).onSuccess {\n  case InstancesList(requestId, instanceIds) =\u003e // a list of running instances.\n  case OperationFailed(requestId, reason) =\u003e // fetching process failed.\n}\n```\n[Here](https://github.com/akkeeper-project/akkeeper/blob/master/akkeeper-api/src/main/scala/akkeeper/api/MonitoringApi.scala) is the list of all messages supported by the Monitoring Service.\n\n#### Container API\nUse this API to fetch, create, update or delete container definitions.\n```scala\nimport akkeeper.api._\nimport akkeeper.master.service.ContainerService\n...\nval actorSystem = ActorSystem(\"AkkeeperSystem\")\n// Create a remote Container Service actor reference.\nval containerService = ContainerService.createRemote(actorSystem)\n// Fetch the list of existing containers.\n(containerService ? GetContainers()).onSuccess {\n  case ContainersList(requestId, containerNames) =\u003e // a list of available containers.\n  case OperationFailed(requestId, reason) =\u003e // fetching process failed.\n}\n```\n[Here](https://github.com/akkeeper-project/akkeeper/blob/master/akkeeper-api/src/main/scala/akkeeper/api/ContainerApi.scala) is the list of all messages supported by the Container Service.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizeigerman%2Fakkeeper","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fizeigerman%2Fakkeeper","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fizeigerman%2Fakkeeper/lists"}