Skip to content

Commit ecbac9a

Browse files
committed
docs(perf): paced 1h at 100 eps produce (apply 99.5, zero dups)
Mac compose fresh volumes: 360k events --pace-eps 100. Produce 100, flink/apply 99.5, lag ends 0. Multi-hour still open. Note compose down -v.
1 parent b5d9ce0 commit ecbac9a

4 files changed

Lines changed: 90 additions & 10 deletions

File tree

‎CHANGELOG.md‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,15 @@ All notable changes to AgentFlow are documented in this file.
44

55
## [Unreleased]
66

7+
### Perf — paced 1 h @ 100 eps produce (apply 99.5)
8+
9+
- Mac compose (1 Flink TM), fresh volumes: 360 000 events at `--pace-eps 100`
10+
→ produce 100.0, flink 99.5, bridge apply 99.5, **0 failures / 0 duplicates**,
11+
lag end 0 (peak 1679). Evidence:
12+
`docs/perf/throughput-realpath-paced100-1h-2026-07-17.md`. Multi-hour still
13+
open. Ops note: must `compose down -v` this project first or journal-guard
14+
duplicates dominate the window.
15+
716
### Docs — P2-6 Phase 0 inventory (no package move)
817

918
- Baseline wheel still ships top-level `src/` (~540 in-repo `from src` lines).

‎docs/STATUS.md‎

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -38,13 +38,14 @@ measured steps on the same Mac compose stand (Kafka → Flink → bridge → CH)
3838
| Q1.4 — batched session/user read-modify-writes (constant round-trips per batch) | **87.4 eps** | measured — [perf/throughput-realpath-q14-2026-07-10.md](perf/throughput-realpath-q14-2026-07-10.md) |
3939
| Stretch try — 2000-event drain on same Mac class | **107.3 eps** | measured — [perf/throughput-realpath-100eps-try-2026-07-17.md](perf/throughput-realpath-100eps-try-2026-07-17.md) |
4040
| Paced 10 min @ 100 eps produce | **96.5 apply / 97.1 flink / 100 produce** | measured — [perf/throughput-realpath-paced100-2026-07-17.md](perf/throughput-realpath-paced100-2026-07-17.md) |
41+
| Paced **1 h** @ 100 eps produce | **99.5 apply / 99.5 flink / 100 produce** | measured — [perf/throughput-realpath-paced100-1h-2026-07-17.md](perf/throughput-realpath-paced100-1h-2026-07-17.md) |
4142

4243
The series target of **≥ 80 eps** is met on the 400-burst profile. A
43-
**2000-event** drain cleared at **107.3 eps**. A **~10 minute paced** produce
44-
at 100 eps held hop/apply near 96–97 with lag → 0 after a bounded peak
45-
(peak lag 1037). Multi-hour sustained ≥ 100 is still open. The 4 h soak held
46-
~47 eps avg delivered with bounded lag. Semantics of the batched path are in
47-
[serving-bridge.md](serving-bridge.md).
44+
**2000-event** drain cleared at **107.3 eps**. Paced ingress at 100 eps held
45+
for **10 min** (~96.5 apply) and for **1 h** (**99.5 apply/hop**, 0 failures,
46+
0 duplicates, lag → 0). Multi-hour (4 h+) sustained ≥ 100 is still open. The
47+
4 h soak held ~47 eps avg *delivered* with bounded lag. Semantics of the
48+
batched path are in [serving-bridge.md](serving-bridge.md).
4849

4950
## Known issues
5051

@@ -72,9 +73,9 @@ at 100 eps held hop/apply near 96–97 with lag → 0 after a bounded peak
7273

7374
## Next
7475

75-
1. **≥ 100 eps multi-hour sustained** — 10 min paced @ 100 produce is measured
76-
(~96–97 apply/hop); multi-hour still open. Evidence:
77-
[perf/throughput-realpath-paced100-2026-07-17.md](perf/throughput-realpath-paced100-2026-07-17.md).
76+
1. **≥ 100 eps multi-hour sustained** — 1 h paced @ 100 is measured
77+
(99.5 apply/hop); **4 h+** still open. Evidence:
78+
[perf/throughput-realpath-paced100-1h-2026-07-17.md](perf/throughput-realpath-paced100-1h-2026-07-17.md).
7879
2. **P2-6 packaging** (breaking) — Phase 0 inventory + defaults done; Phase 1
7980
(tree/`agentflow_runtime` + shim) waits for a release branch:
8081
[plans/p2-6-runtime-namespace-migration.md](plans/p2-6-runtime-namespace-migration.md).
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
# S10 paced produce @ 100 eps — 1-hour arm
2+
3+
> Measured: `2026-07-16T23:30Z` → `2026-07-17T00:30Z` on `deproject-mac`
4+
> (Colima vz 6 GiB / 4 CPU). Code: `main` @ `b5d9ce0`.
5+
> Path: Kafka → Flink stream_processor (**1 TM**) → `events.validated` →
6+
> host `bridge_consumer` → ClickHouse.
7+
> JSON: `/tmp/s10_paced100_1h.json` on the stand.
8+
9+
## Result
10+
11+
| Metric | Value |
12+
|--------|------:|
13+
| Produce | **100.0 eps** (360 000 events in 3600.0 s, paced) |
14+
| Flink hop | **99.5 eps** (360 000 validated) |
15+
| Bridge apply | **99.5 eps** (+360 000 applied over 3617 s wall incl. catch-up) |
16+
| Failures / duplicates | **0 / 0** |
17+
| Lag start → end | 0 → **0** |
18+
| Lag peak | **1679** (recovered) |
19+
20+
**Gate (this arm):** produce ≥ 95, apply ≥ 90, flink ≥ 90, failures = 0,
21+
duplicates < 5 000, lag_end ≤ 100 → **PASS**.
22+
23+
## Honest claim
24+
25+
| Claim | Status |
26+
|-------|--------|
27+
| Drain-window ≥100 | Met (107.3 @ 2000) — separate doc |
28+
| Paced ~10 min @ 100 produce | Met (~96.5 apply) — 10 min doc |
29+
| **Paced 1 hour @ 100 produce with apply/hop ≈100, lag → 0** | **Met (this doc)** |
30+
| Multi-hour (e.g. 4 h+) sustained ≥100 | **Still open** |
31+
32+
Do **not** call this “multi-hour soak.” It is a **single continuous hour** of
33+
paced ingress at the product target rate on the Mac compose stand.
34+
35+
## Stand hygiene (required)
36+
37+
Earlier 1h attempts failed for ops reasons, not apply-path capacity:
38+
39+
1. **Stale ClickHouse journal + Flink earliest replay** → tens of thousands of
40+
journal-guard **duplicates**, `applied≈0` for the benchmark window.
41+
**Fix:** `docker compose … down -v` for *this* project only before the arm.
42+
2. **`docker compose up` stuck** waiting on a one-shot `kafka-init` that stayed
43+
Running after topics were created — unstick by removing the init container
44+
and bringing CH/redis separately.
45+
46+
## Reproduce
47+
48+
```bash
49+
export PATH=$HOME/bin:/usr/local/bin:$PATH
50+
# colima start --cpu 4 --memory 6 --vm-type vz
51+
cd ~/agentflow-docker-check
52+
docker compose -f docker-compose.yml -f docker-compose.flink.yml down -v
53+
docker compose -f docker-compose.yml -f docker-compose.flink.yml \
54+
up -d --build --scale flink-taskmanager=1 flink-job-runner
55+
docker compose -f docker-compose.yml -f docker-compose.flink.yml up -d clickhouse redis
56+
# wait job RUNNING + CH ping; start bridge_consumer on :9108
57+
.venv/bin/python scripts/benchmark_throughput_realpath.py \
58+
--bootstrap 127.0.0.1:19092 \
59+
--count 360000 --pace-eps 100 \
60+
--bridge-metrics http://127.0.0.1:9108/metrics \
61+
--latency-samples 0 --catchup-timeout-seconds 1200 --no-md
62+
```
63+
64+
## Status
65+
66+
**1 h paced @ 100 eps: PASS** (produce 100.0 / flink 99.5 / apply 99.5,
67+
zero failures/duplicates, lag ends at 0). Multi-hour remains open.

‎docs/serving-bridge.md‎

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,8 +145,11 @@ A healthy bridge has partitions assigned, bounded or falling lag, flat
145145
→ 87.4 ([`perf/throughput-realpath-q14-2026-07-10.md`](perf/throughput-realpath-q14-2026-07-10.md))
146146
→ 107.3 drain ([`perf/throughput-realpath-100eps-try-2026-07-17.md`](perf/throughput-realpath-100eps-try-2026-07-17.md))
147147
→ paced 10 min @ 100 produce ≈ **96.5 apply / 97.1 flink**
148-
([`perf/throughput-realpath-paced100-2026-07-17.md`](perf/throughput-realpath-paced100-2026-07-17.md)).
149-
Endurance: a 4 h soak at ~47 eps *delivered* held bounded lag with flat
148+
([`perf/throughput-realpath-paced100-2026-07-17.md`](perf/throughput-realpath-paced100-2026-07-17.md))
149+
→ paced **1 h** @ 100 produce ≈ **99.5 apply / 99.5 flink** (0 dups)
150+
([`perf/throughput-realpath-paced100-1h-2026-07-17.md`](perf/throughput-realpath-paced100-1h-2026-07-17.md)).
151+
Multi-hour (4 h+) at ≥100 still open. Endurance: a 4 h soak at ~47 eps
152+
*delivered* held bounded lag with flat
150153
RSS/FDs, survived a live broker/Redis fault with an exactly-once batch
151154
replay, and ended with zero cache drift —
152155
[`perf/soak-s11-2026-07-10.md`](perf/soak-s11-2026-07-10.md).

0 commit comments

Comments
 (0)