Skip to content
beam-agents
GitHub

Compared with Apache Flink Agents

A sourced comparison with the closest comparable project — including the several rows where nothing is established.

StableImplemented, specified, and covered by tests in the repository.

Apache Flink Agents is the closest comparable project, and beam-agents' own project context names it as the direct competitor. This page compares the two as carefully as the available evidence allows — which means several rows below read Not established.

The honest headline

Both projects put an AI agent inside a streaming pipeline as a keyed operator, and both require the input to be keyed. The difference a reader is most likely to care about is the substrate: Flink Agents is a sub-project of Apache Flink and targets Flink; beam-agents targets Apache Beam and therefore aims at runner portability, including Dataflow as a managed service.

The other difference is maturity, and it does not favor this project. Flink Agents has published releases; beam-agents declares version 1.0.0 but has pushed no release tag, so it has published none.

What each project runs onTwo stacks, compared on substrate only. On the left, an agent runs under beam-agents, which targets Apache Beam; Beam in turn fans out to DirectRunner, Flink and Dataflow. Spark hangs below the end of that fan with no connector at all, because no test in this repository runs against it. On the right, an agent runs under Apache Flink Agents, which targets Apache Flink; that stack ends there. No other row of the comparison table is drawn.your agentbeam-agentsApache BeamDirectRunnerFlinkDataflowSparkNOT EXERCISEDyour agentApache Flink AgentsApache Flink
Only the substrate row is drawn, because it is the row a citation establishes on both sides. Side effects, memory and human-in-the-loop stay in the table — including the rows that read Not established.

Comparison

Rows marked Not established were not verified from a citable source at the retrieval date shown below.
Aspectbeam-agentsApache Flink Agents
GovernanceIndependent project, Apache-2.0 licensed, built on Apache Beam. Not an ASF project.pyproject.tomlA sub-project developed under the Apache Flink umbrella, Apache-2.0 licensed.[src]
SubstrateApache Beam. Exercised on DirectRunner and Flink per PR, Dataflow nightly; a weekly Spark leg currently skips every conformance cell.tests/conformance/test_direct.pyApache Flink.[src]
LanguagesPython only for v0.x. Wire schemas are protobuf, so cross-language stays possible.pyproject.tomlJava and Python 3.10-3.12.[src]
Attaching an agentevents | RunAgent(agent, config=AgentConfig(...)) over a pre-keyed PCollection[KV[bytes, AgentEnvelope]]; unkeyed input raises at construction time.tests/core/test_transform.pyfrom_datastream(input, key_selector).apply(agent).to_datastream(); the input must be a KeyedStream or carry a KeySelector.[src]
Released versionsNone. Declared version 1.0.0, but no release tag pushed and nothing on any registry.pyproject.toml0.1.0 announced October 2025; v0.2 and v0.3 documented, with v0.3-SNAPSHOT current in development.[src]
Side-effect modelEffects never run in the pipeline. The agent stages a ToolIntent with a deterministic id (uuid5 over key|seq|step_index); an external effector deduplicates on it and executes.tests/semantics/test_effectively_once_e2e.pyNot established
Duplicate-effect guaranteeDuplicates bounded to the crash window between a tool effect and its durable completion record; true exactly-once requires tools idempotent on intent_id. Gated end to end with SIGKILLed workers.tests/semantics/test_effectively_once_e2e.pyNot established
Human-in-the-loopApproval intents plus a fail-closed timeout at two layers: an in-pipeline timer routing Deny/Drop/Escalate, and effector-side refusal of expired intents.tests/semantics/test_hitl_fail_closed.pyNot established
MemoryWorking memory in Beam keyed state: scalars and bounded rings, 100 KiB blobs, 1 MiB soft cap per key, event-time TTL GC. A long-term MemoryStore tier ships behind it: Bigtable, Redis, Firestore, and SQL backends with seq-guarded upserts.openspec/specs/memory-facade/spec.mdDocumentation organizes memory into Sensory & Short-Term Memory and Long-Term Memory.[src]
Tool and MCP supportA @tool registry with a side_effect flag; read-only tools run inline, side-effecting ones only via intents. Read-only MCP is described in the module map but is not implemented.openspec/specs/tool-registry/spec.mdDocuments Tool Use and MCP sections.[src]
Bring-your-own agent frameworkAdapter-based, targeting a structural protocol. LangGraph, Google ADK, and Pydantic AI adapters are implemented, each on the conformance matrix.tests/adapters/test_e2e_pipeline.pyNot established
Model-call replay behaviorEvery model call is cached in keyed state, keyed on the request plus (key, seq). A bundle retry incurs zero additional provider calls on the cached path.openspec/specs/llm-replay-cache/spec.mdNot established
Published performance figuresA design budget for runtime overhead, measured by an offline pyperf suite and gated against a committed baseline in the repository; this site publishes no figures of its own.openspec/project.mdNot established
Rows marked Not established were not verified from a citable source at the retrieval date shown below.

About the empty cells

Six rows have no Flink Agents entry. That is a limitation of this page, and worth being precise about: the documentation pages consulted at the date below covered integration, memory organization, and tool/MCP support, but the pages this author reached did not state a side-effect execution model, a duplicate suppression guarantee, or human-in-the-loop semantics in terms that could be quoted.

This project's own internal notes assert that Flink Agents uses inline durable execution where beam-agents uses an outbox. That assertion is not repeated as fact here, because it could not be substantiated from a citable source at the retrieval date. If you are choosing between the two on that axis, read their documentation directly rather than trusting either project's characterization of the other.

What is genuinely different

Setting aside what is unverified, two differences are solid:

  1. Runner portability versus a single engine. Targeting Beam means the same pipeline can run on the DirectRunner, Flink, or Dataflow. Whether that is worth anything depends entirely on whether you want to leave Flink.
  2. Maturity, in Flink Agents' favor. Released versions, an ASF community, and Java support are real advantages over an unreleased single-language project. If you need something in production this quarter, that difference matters more than any architectural preference.

What backs this page

Symbol
beam_agents.RunAgent
Source
src/beam_agents/core/dofn.py
Specification
openspec/specs/wire-schemas/spec.md
Test
tests/semantics/test_effectively_once_e2e.py
Test
tests/core/test_transform.py

Cited sources

  1. Apache Flink Agents is an Agentic AI framework based on Apache Flink, licensed Apache-2.0, supporting Java and Python 3.10-3.12.

    https://github.com/apache/flink-agents — retrieved

  2. Flink Agents attaches an agent to a stream via AgentsExecutionEnvironment.from_datastream(input, key_selector).apply(agent).to_datastream(), and the input DataStream must be a KeyedStream or a KeySelector must be provided.

    https://nightlies.apache.org/flink/flink-agents-docs-main/docs/development/integrate_with_flink/ — retrieved

  3. The Flink Agents documentation organizes memory into Sensory & Short-Term Memory and Long-Term Memory sections, and documents Tool Use and MCP. The current development version is v0.3-SNAPSHOT, with v0.2 and v0.3 released.

    https://nightlies.apache.org/flink/flink-agents-docs-main/ — retrieved

  4. Apache Flink Agents announced its 0.1.0 release on 15 October 2025.

    https://flink.apache.org/2025/10/15/apache-flink-agents-0.1.0-release-announcement/ — retrieved