Skip to main content

Bacalhau compared with Kubernetes, KubeEdge, Nomad, Ray, and Trino

Bacalhau is an independent, Apache-2.0-licensed distributed compute project. It coordinates container and WASM jobs across compute nodes, with placement informed by available resources, job requirements, and data access. It is not a renamed Kubernetes distribution, a data warehouse, or a managed cloud service.

Start with the workload boundary

ToolPrimary strengthPrefer it whenTradeoff to plan for
BacalhauRunning arbitrary jobs close to distributed dataBatch, ops, daemon, or service workloads need data-aware placementYou operate the nodes, storage credentials, and job policy
KubernetesGeneral-purpose container platformYou need a large ecosystem for long-lived applicationsData locality is normally modeled through your storage and scheduling design
KubeEdgeKubernetes extension for edge nodesExisting Kubernetes control-plane patterns must extend to devicesIt retains Kubernetes operational complexity
NomadSimple workload schedulingA homogeneous fleet and broad workload types are the main concernData-source-aware job design remains your responsibility
RayDistributed Python and AI workloadsActors, tasks, and Python-native ML are centralIt is not a general data-locality control plane
TrinoFederated SQL queriesThe problem can be expressed in SQL over supported sourcesIt does not run arbitrary containerized transformations

The comparison is not a feature checklist. A common design is to retain Kubernetes or Nomad for application services, use a SQL engine for interactive analysis, and use Bacalhau for a bounded job that must execute where data can be accessed.

A small, auditable starting point

Label nodes only with facts your operators maintain, then constrain a job to the required boundary:

bacalhau serve --compute -c Labels="region=eu-west,data-boundary=eu"

bacalhau docker run \
--constraints "region=eu-west" \
--constraints "data-boundary=eu" \
--input https://example.org/manifest.json:/inputs/manifest.json \
--output results:/outputs \
--publisher local \
alpine:3.21 sh -c 'wc -c /inputs/manifest.json > /outputs/count.txt'

This does not prove legal compliance by itself. Confirm network routes, identity, storage policy, encryption, and the actual location of every input and output with the systems that own those controls.

Decision checks

  1. Read the architecture overview and decide which process owns orchestration and compute.
  2. Model inputs explicitly using the job input-source specification, rather than assuming a URL is local.
  3. Use labels and constraints for placement rules, and test no-match behavior before production.
  4. Define result handling with result paths and publishing results.

Limitations

Data proximity can reduce unnecessary transfers, but it cannot make an unavailable dataset accessible or turn labels into an enforcement system. Measure transfer volume and execution time in your environment; do not infer either from this comparison.