Skip to content

Latest commit

 

History

History
610 lines (474 loc) · 30.6 KB

File metadata and controls

610 lines (474 loc) · 30.6 KB

Upstream PR & Issue Analysis for parallel-consumer

Table of Contents
Note

This document holds editorial judgement, not the current facts. The rankings, group verdicts and recommended merge order below are the durable value here.

The machine-readable source of truth for the volatile facts — which fork branch/PR maps to which upstream issue/PR, and each item’s current open/closed/merged status — lives in upstream-map.yaml (kept fresh by a read-only gh sweep). When this prose and the manifest disagree, the manifest wins for facts. Entries there link back to the section anchors in this document.

Counts and version pins below are a snapshot from early-to-mid 2026 and drift; treat them as illustrative, not current.

1. Part 1: Open Upstream PRs (confluentinc/parallel-consumer)

The upstream repository had accumulated ~19 open PRs (repo effectively archived; some PRs from early 2025 remain unreviewed). The local fork (astubbs/parallel-consumer) tracks Kafka 3.9.1, with a Java baseline + Kafka 4 effort in progress on feat/java-17-baseline (see upstream-map.yaml entry java-17-baseline-kafka4).

1.1. Summary Table (19 PRs, most to least important)

Rank PR Title Group Why it matters

1

#893

Fix offset reset on partition reassignment

Correctness bug

Data-loss / reset risk during rebalance

2

#909

Replace stale container when adding work container

Correctness bug

Record drops during rebalance

3

#915

Feature: select batch construction strategy

Feature (closes #266)

Unlocks throughput & ordering flexibility

4

#908

Feature: Support Virtual Threads (JDK 21+)

Feature (closes #896)

Major platform modernisation

5

#905

Metric: max queued records per shard

Observability

Diagnose hot-key bottlenecks

6

#866

Update Kafka to v4 (BREAKING)

Major dep bump

Keeps library on supported Kafka

7

#867

Update vertx to v5 (BREAKING)

Major dep bump

Keeps vertx module alive

8

#901

Fix failing licence check + gitignore

Build/tooling

Unblocks CI

9

#877

chore: update repo by service bot

Build/tooling

Bot-maintained config

10

#851

postgres 42.7.2 (security)

Security CVE

Fork should not ship vulnerable deps

11

#913

assertj 3.27.7 (security)

Security CVE

Test-only, low severity

12

#914

logback 1.5.25 (security, DRAFT)

Security CVE

Logging stack CVE

13

#855

wiremock-jre8 to v3 (BREAKING)

Test dep

Test-only, unblocks other updates

14

#899

JUnit platform 1.10.2 to 6.0.0

Test dep

Huge jump, needs care

15

#900

testcontainers 1.19.8 to 1.21.3

Test dep

Routine bump

16

#897

vertx 4.5.7 to 5.0.5

Dep (overlaps #867)

Duplicate of #867

17

#869

threeten-extra 1.7.2 to 1.8.0

Dep

Trivial

18

#898

maven-gpg-plugin 3.1.0 to 3.2.8

Build plugin

Trivial

19

#854

renovate minor+patch batch

Dep batch

Routine

1.2. Group A — Correctness fixes (merge first)

These address real bugs observed in production and should be the highest priority to cherry-pick.

1.2.1. #893 — Accurate committed offset on partition assignment

  • Author: Martyn Ye (sangreal), opened Oct 2025

  • Problem: Race condition in PartitionState.getOffsetToCommit(). Between offset calculation and commit, incompletes may drain, so a higher offset gets committed than intended. After rebalance, the consumer tries to fetch a non-existent offset and triggers auto.offset.reset (data loss or replay).

  • Fix: Call getOffsetToCommit() once per commit cycle, track lastProcessedOffset, add synchronisation.

  • Status: Has unit tests, approved by Roman Kolesnev, run privately for >1 week with zero recurrence. Awaiting codeowner merge.

  • Verdict: Should merge immediately. High-impact, low-risk.

1.2.2. #909 — Replace stale work container on rebalance

  • Author: cserspring, opened Jan 2026

  • Problem: Broker-poll thread and control thread race during rebalance. Control thread adds a container at an outdated epoch after removeStaleContainers() runs. The stale entry then blocks subsequent valid additions, dropping records.

  • Fix: addWorkContainer replaces stale entries rather than rejecting new ones.

  • Status: No visible tests yet, no review comments. Needs more scrutiny than #893 but the root-cause analysis is compelling.

  • Verdict: High priority, but request tests before merging.

1.3. Group B — Features (real user value)

1.3.1. #915 — Batch construction strategy (closes #266)

  • Author: Devingryu, opened Mar 2026 (most recent PR)

  • Adds batchStrategy enum with three modes:

    • SEQUENTIAL (default, current behaviour) — one record per shard per cycle

    • BATCH_MULTIPLEX — multiple records from a shard, batches span shards

    • BATCH_BY_SHARD — multi-record batches, each batch from a single shard

  • Closes a long-standing feature request (#266). Touches ProcessingShard work-selection and batch construction.

  • Author explicitly flags open design questions (UNORDERED semantics, stage separation) and notes the repo looks unmaintained.

  • Verdict: Most valuable user-facing feature in the queue. Needs an architectural review before merge.

1.3.2. #908 — Virtual Threads support (closes #896)

  • Author: Devingryu, opened Jan 2026

  • Adds useVirtualThreads option for JDK 21+, migrates synchronized to ReentrantLock to avoid carrier-thread pinning, generalises setupWorkerPool return to ExecutorService.

  • Tests skip on JDK 17 via Assumptions.

  • Caveats: Backwards-compat risk for subclasses overriding executor type; queue-size querying uses WorkerManager.numberRecordsOutForProcessing as a proxy.

  • Verdict: Strategically important modernisation. Sequence behind Java 17 branch.

1.3.3. #905 — Max-queued-records-per-shard metric

  • Author: flashmouse, opened Jan 2026

  • Adds monitoring metric; useful with orderType.KEY to detect hot-key shards.

  • Small, self-contained (2 commits). No review comments.

  • Verdict: Easy merge, good observability win.

1.4. Group C — Major (breaking) dependency bumps

PR Bump Note

#866

Kafka to v4

Apache Kafka major bump (title reads v4; ties into the Java baseline + Kafka 4 effort). Will cascade test/API changes.

#867

vertx to v5

Breaking for the parallel-consumer-vertx module.

#897

vertx 4.5.7 to 5.0.5

Duplicate of #867; close one.

#855

wiremock-jre8 to v3

Test-only, blocks other test-dep updates.

#899

junit platform 1.10.2 to 6.0.0

Dependabot misread — 6.0.0 likely incorrect. Close or pin.

Verdict: Tackle #866 (Kafka v4) first. Consolidate #867/#897. Close #899.

1.5. Group D — Security CVEs

PR Dep Scope Priority

#851

postgresql 42.7.2

Runtime (JDBC sample)

Medium

#913

assertj 3.27.7

Test only

Low

#914

logback 1.5.25 (DRAFT)

Runtime logging

Medium

Verdict: All renovate-generated and low-effort. Merge in a single batch once CI is green.

1.6. Group E — Routine / housekeeping

  • #854 — renovate minor+patch dependency batch (trivial)

  • #869 — threeten-extra 1.7.2 to 1.8.0 (trivial)

  • #898 — maven-gpg-plugin 3.1.0 to 3.2.8 (trivial)

  • #900 — testcontainers 1.19.8 to 1.21.3 (routine test dep)

  • #877 — service-bot repo config update

  • #901 — fix failing license check + gitignore (unblocks CI — promote to Group A priority)

  1. #901 — unbreak the licence-check build (prerequisite)

  2. #893 — offset reset fix (correctness, approved upstream)

  3. #909 — stale container fix (correctness, request tests first)

  4. #905 — hot-key observability metric (cheap win)

  5. Security batch: #851, #913, #914

  6. Routine deps batch: #854, #869, #898, #900, #877

  7. #915 — batch strategy feature (needs architectural review)

  8. #866 — Kafka v4 (scheduled breaking upgrade)

  9. #908 — Virtual Threads (after Java 17 branch lands; requires JDK 21+ CI)

  10. #867 (and close duplicate #897) — vertx v5

  11. #855 — wiremock v3 (after other test deps stabilise)

  12. #899 — close as incorrect; re-open with a sensible target version

2. Part 2: astubbs Closed-Unmerged PRs (Revival Candidates)

A GitHub search of confluentinc/parallel-consumer for author:astubbs is:closed is:unmerged returns 53 PRs. A striking pattern: ~40 of them were closed on the same day, 2023-06-15, which the 2026-08 audit confirmed was an administrative sweep (eddyv, comment "Closing - Stale.", coinciding with astubbs leaving Confluent) rather than a substantive rejection of the ideas — see the THE 2023 ADMINISTRATIVE SWEEPS section of upstream-map.yaml. The PRs represent a trove of unfinished but intentional design work.

2.1. Group A — Major features (top revival candidates)

Rank PR Title Closes Notes

A1

#464

Feature: Health check and metrics

#71

Observability gap; still needed today. Consolidate with upstream #905.

A2

#366

Dead Letter Queue (DLQ) as option for retry expiration

 — 

Most-requested missing feature; no clean upstream alternative.

A3

#441

Queue priority

#50

Closes long-standing issue; enables priority-aware shards.

A4

#316

Combine queues from different partitions/topics with KEY ordering

#314

Powerful composition primitive.

A5

#300

Loom POC (Virtual Threads)

#299

Predates upstream #908. Compare approaches before redoing.

A6

#473

Producer sends to least-loaded broker

 — 

Throughput optimisation.

A7

#390

Streams integration

 — 

Expands reach to Kafka Streams users.

A8

#346

Thread-safe user API exposure of ALL Consumer APIs

#520

Safety-critical API surface expansion.

A9

#353

Broker status informer

#185

Surface broker health to user code.

A10

#291

Explicit terminal and retry exceptions + poison pills

#242

Pairs with #268; cleaner error semantics.

A11

#197

Retry count available in header

 — 

Small, widely useful.

A12

#22

Dynamic concurrency control (WIP)

#21

Adaptive parallelism.

2.2. Group B — Performance / correctness work

Rank PR Title Notes

B1

#530

Caching of shard management counts (shard scanning O(n) to cached)

Concrete hot-path perf fix. High ROI.

B2

#237

Shard starvation fix

#236 — real user-visible bug.

B3

#356

Faster record producing: remove Future blocks, async result processing

#29 — throughput-critical.

B4

#408

Runlength v3 encoding using Longs instead of Integers

Extends offset encoder capacity.

B5

#46

Continuous encoding with per-partition realtime offset-space backpressure (WIP!)

Aspirational; pairs with #408.

B6

#66

Retry system improvements

Iterative correctness work.

B7

#140

Don’t allow use of core methods from vert.x or reactor module

#99 — prevents footguns.

2.3. Group C — Architectural refactors (keep ideas, not code)

Use as design references. Branches are far too stale to apply directly.

Rank PR Title Notes

C1

#488

Refactor God class to components

Long-standing maintainability pain.

C2

#270

Shared-nothing architecture — Partition Events

#200 — scalability rearchitecture.

C3

#524

Use Actor for commit commands

Pairs with C4; cleaner concurrency.

C4

#325

New IPC system using lightweight Lambda actor queue

Underpins many other improvements.

C5

#271

Major package restructure

Blast radius too large on its own; fold into C1/C2.

C6

#303

Extend Consumer and Function for more cohesive API

Public-API evolution.

C7

#45

Direct work loading, direct result processing (WIP!)

POC; informs C2/C4.

C8

#405

Remove static state

Ties into B-group testability work.

2.4. Group D — Testing & chaos infrastructure

Reviving these pays dividends on every other revival in Groups A-C.

Rank PR Title Notes

D1

#345

Broker disconnect testing + ChaosBroker

#203 — essential for validating correctness fixes.

D2

#126

Remove static state manipulation that tests use

Unlocks parallel test execution.

D3

#143

Parallel tests in CI

Dependent on D2.

D4

#106

Client factory config: prevent client reuse, safer config validation

Test hygiene.

D5

#492

Fix incorrect assumption in main PC unit test

Small, easy.

D6

#494

Re-enable disabled legacy tests in ParallelEoSStreamProcessorTest

Coverage recovery.

D7

#496

Implement the empty tests

Fill test placeholders.

D8

#73

Enable integration tests on GH Workflow CI

Verify if merged-equivalent elsewhere.

D9

#75, #74

Run CI on Java 8 / Java 9

Obsolete; close permanently — covered by Java 17 effort.

2.5. Group E — UX, logging, docs

Rank PR Title Notes

E1

#268

Explicit retriable exception for cleaner ERROR logging

#242 — superseded by #291 (A10); pick one.

E2

#139

Warning when no SLF4J logger detected

Small UX polish.

E3

#508

'Back Pressure' notes and Javadoc

Valuable docs addition.

E4

#81

Parallel join technique documentation

Design docs.

E5

#506

Fix chart links (docs)

Trivial.

2.6. Group F — Vertx / Reactor module work

Rank PR Title Notes

F1

#204

Run user functions on a Vert.x vertical instead of Java ThreadPool

Re-evaluate in light of upstream #867 / Virtual Threads.

F2

#181

Convenience methods for Vertx calls

Small API addition.

F3

#179

Scatter-gather parallel webservice requests (POC)

Useful pattern for docs/examples.

2.7. Group G — Build, tooling, plumbing (mostly obsolete)

PR Title Status

#442

Setup mvnw

Consider re-doing — mvnw is still useful.

#91

Upgrade Apache Kafka version

Obsolete (see upstream #866).

#220

Docker naming, fixes and improvements

Niche.

#10

Extract Interface from implementation

Likely already done.

#23

Playing around with interface naming (WIP!)

Skip.

#6

Fix plugin versions / surefire bug

Obsolete.

#2

Fix groupid in poms

Obsolete.

#7

Store offset map of incomplete messages (Draft)

Likely superseded by current offset encoder.

2.8. Top 10 revival candidates (flat ranking)

  1. #530 — shard-count caching perf fix (small, high-impact, hot path)

  2. #464 — health check and metrics (still-missing observability)

  3. #366 — dead letter queue option

  4. #237 — shard starvation bug fix

  5. #345 — ChaosBroker testing infrastructure (amplifies every other fix)

  6. #441 — queue priority

  7. #316 — combine queues across partitions with KEY ordering

  8. #291 — terminal/retry exception types + poison pill handling

  9. #300 — Loom / Virtual Threads POC (compare directly to upstream #908)

  10. #197 — retry count header

2.9. Cross-references to Part 1

  • #300 (Loom POC) <→ upstream #908 (Virtual Threads) — astubbs POC may offer earlier-design insight.

  • #464 (Health check + metrics) <→ upstream #905 (max-queued-per-shard metric) — merge philosophies.

  • #91 (Kafka upgrade) <→ upstream #866 (Kafka v4) — close #91 as obsolete.

  • #204 (Vertx vertical) <→ upstream #867 (vertx v5) — re-scope against v5 APIs.

  • #237 / #345 <→ upstream #893 / #909 (rebalance correctness) — astubbs chaos testing would help validate upstream fixes.

3. Part 3: Upstream Issues Analysis

confluentinc/parallel-consumer has ~61 open issues (dating back to Nov 2020) and 8 issues formally closed as "Not Planned". An earlier revision of this paragraph claimed the issues were never bulk-closed — that was wrong: a second administrative sweep on 2023-07-07 (johnbyrnejb, comment "Closing Issue") closed 28 issues, every one marked COMPLETED rather than "not planned", which is why they read as resolved for three years. That cohort is mapped as the sweep-2023-* entries in upstream-map.yaml and mirrored as #227-254 under label upstream-admin-closed. Most remaining feature requests and bug reports are still sitting open with no maintainer triage since mid-2023.

Issue #907 ("Is the project still actively maintained?") filed Jan 2026 summarises the community frustration.

3.1. Category 1: Stability & timeout bugs (work on FIRST)

Production-blocking issues reported by multiple users. Highest urgency.

Issue Title Author Date Labels Cross-ref PRs

#803

Transactional Producer timeout getting commit lock

PatrickChauveau

2024-06

verified bug

 — 

#809

Sporadic timeouts from ConsumerOffsetCommitter.CommitRequest

tedcaozoom

2024-06

 — 

PR #893 may help

#833

PC runs then exits due to InternalRuntimeException(Timeout)

dumontxiong

2024-09

 — 

PR #893 may help

#597

PC doesn’t close Kafka consumer if commit fails during close

BartoszSta

2023

 — 

 — 

#402

Max loading factor steps reached: 100/100

bartman64

2022-08

 — 

 — 

#857

Paused consumption across multiple consumers

rbokade-rbk

2025-03

 — 

 — 

#825

checkAutoCommitIsDisabled fails with kafka-clients < 3.7.0

ddqof

2024-08

 — 

 — 

Verdict: #803 is the only "verified bug" in the entire tracker. Start here.

#809 and #833 are related, but not the same defect - the 2026-08-20 triage separated them. confluentinc#833 exits; confluentinc#809’s headline stack is the close path and it fails to exit, leaving the instance RUNNING with dead control threads and nothing for a liveness probe to read. That half was fixed upstream by confluentinc#818 and is already carried here. #204 (merged) covers the reporting and the retry budget for both; the remaining strand is the AB-BA wedge, #29. Detail: docs/inflight/upstream-175-sporadic-commit-timeouts.md.

confluentinc#402 now has a fix in #201 (log noise only; the stall half was a separate defect, already fixed).

3.2. Category 2: Rebalance / offset correctness (data loss risk)

Issue Title Author Date Cross-ref PRs

#777

Partition revocation leads to duplicate event processing

ajax-levashov-m

2024-05

NOT confluentinc#893/#909 - see verdict

#843

Record picked up by multiple threads simultaneously

singhsaurabh2409

2024-12

NOT confluentinc#909 - see verdict

#326

Error in onPartitionsAssigned

milansanjeev

2022-07

labeled not-a-bug, but related to rebalance

Verdict: REFUTED 2026-08-20. This previously read "merging PR #893 and PR #909 likely resolves #777 and #843". Neither holds, and the correction matters because it would otherwise cause a wrong close.

  • confluentinc#777 is not fixed by either. confluentinc#909 is already merged here as #31 and the behaviour is unchanged: WorkManager.handleFutureResult still drops a result whose partition moved, which is the reporter’s step 3 verbatim. confluentinc#893 fixes a commit running ahead of completion; this is the opposite shape. Upstream’s own maintainer answered in 2024-05, before either PR existed, that in-flight reprocessing at revocation is expected at-least-once behaviour. Do not close confluentinc#777 when the confluentinc#893 cherry-pick merges (#337, split out of #57 on 2026-08-24).

  • confluentinc#843 is not caused by confluentinc#909. That defect drops the fresh container and wedges the offset - loss and stall, not duplication - and #322’s reproduction counts lost records and no duplicates. It also requires a rebalance the reporter explicitly denies. One rebalance-gated route to the reported symptom does exist and is live at HEAD; see docs/inflight/core-178-key-order-across-a-rebalance.md.

Detail: docs/inflight/upstream-173-revocation-duplicate-processing.md.

3.3. Category 3: Observability & health (most requested feature gap)

Issue Title Author Date Labels Cross-ref PRs

#27

Micrometer metrics

astubbs

2020-11

enhancement, medium

 — 

#71

Health-checks

JorgenRingen

2021-01

medium

PR #464 (astubbs, closed)

#859

Memory leak in PCMetrics class

CMExile

2025-04

 — 

PR #905 (metric addition)

#484

Question: PC state to read from?

Ehud-Lev

2022-11

question

 — 

Verdict: #27 and #71 have been open for 5+ years. PR #464 was the intended fix; redo it. PR #905 adds one metric but doesn’t close these.

3.4. Category 4: Error handling / DLQ / retry (most demanded feature)

Issue Title Author Date Cross-ref PRs

#310

DLQ implementation

astubbs

2022-05

PR #366 (astubbs, closed)

#196

Max retries with DLQ callback

astubbs

2022-02

PR #366, PR #291

#304

Handle deserialization exceptions

astubbs

2022-05

 — 

#391

Serialization error handling / flexibility

astubbs

2022-08

PR #291 (terminal/retry exceptions)

Verdict: DLQ (#310) is the single most impactful missing feature. Revive PR #366 and PR #291 as a pair.

3.5. Category 5: Thread safety & modern JDK support

Issue Title Author Date Labels Cross-ref PRs

#186

Ensure all PC APIs are thread safe

fowlerp-qlik

2022-02

blocker, ver:1.0

PR #346 (closed)

#78

Allow customization of ThreadPoolExecutor

mauricioszabo

2021-02

 — 

PR #908 generalises this

#192

Unique thread names for PC instances

nioertel

2022-02

 — 

 — 

#299

Loom integration POC

astubbs

2022-05

 — 

PR #300 (closed), PR #908 (open)

#520

Safe user API exposure of ALL Consumer APIs

astubbs

2022-12

 — 

PR #346 (closed)

#862

PC cannot run on Java 24

jvissers

2025-04

 — 

NOT confluentinc#908 (refuted); fixed by kafka-clients 3.9.1

Verdict: #186 is labeled blocker for 1.0, and it stays one - but as written it names no method, no thread and no check, so nothing can clear it. The audit and definition of done are in docs/inflight/core-139-public-api-thread-safety-contract.md.

REFUTED 2026-08-20: this previously said "PR #908 ReentrantLock migration may resolve #862". It cannot. confluentinc#908 removes virtual-thread pinning on synchronized, and JDK 24 removed pinning anyway. confluentinc#862 was a kafka-clients defect - its SASL callback handlers called Subject.getSubject, which the JDK withdrew - fixed in kafka-clients 3.9.1 by KAFKA-19024. This tree is on 3.9.2, so the issue is settled here, though no CI lane runs above Java 17 to prove it. Detail: docs/inflight/deps-181-java-24-compatibility.md.

3.6. Category 6: Batch processing

Issue Title Author Date Labels Cross-ref PRs

#266

Batch option: same key only

astubbs

2022-04

good first issue

PR #915 (implements this!)

#551

Batching not working as expected

dixitsingla

2023

 — 

PR #915 may clarify

#560

Min batch size + batch max wait time

Ehud-Lev-Forter

2023

 — 

Complementary to #266

Verdict: PR #915 directly closes #266. #560 could be a follow-up enhancement.

3.7. Category 7: Advanced features

Issue Title Author Date Cross-ref PRs

#314

Combine queues across partitions/topics with KEY ordering

astubbs

2022-05

PR #316 (closed)

#321

Transparent large message chunking

astubbs

2022-06

 — 

#322

Disk-backed produce queue

astubbs

2022-06

 — 

#394

Producer sends to least loaded broker

astubbs

2022-08

PR #473 (closed)

#718

Missing feature to terminate processing

Zordid

2024

 — 

#782

Seeking to a specific offset for a partition

ebrockman1

2024-05

 — 

Verdict: #718 (terminate processing) and #782 (seek to offset) are practical, self-contained features worth implementing.

3.8. Category 8: Logging / UX polish

Issue Title Author Date Cross-ref PRs

#629

Missing topic/offset info in ConsumerOffsetCommitter error log

bmaggi

2023

 — 

#631

Warning log too verbose in RemovedPartitionState

bmaggi

2023

 — 

#640

Error log too verbose in AbstractParallelEoSStreamProcessor

bmaggi

2023

PR #291

#622

Wrong multiplier value in retry delay function example

zerda

2023

 — 

Verdict: All four are low-effort, high-ROI. Batch them in a single "logging cleanup" PR.

3.9. Category 9: Documentation gaps

Issue Title Author Date Cross-ref PRs

#115

Clarify tombstone message handling (javadoc)

astubbs

2021-05

 — 

#171

Spring boot example

astubbs

2021-10

 — 

#178

Distribute single message to HTTP endpoints

astubbs

2021-11

 — 

#642

Add explanation of close modes

rkolesnev

2023

 — 

Verdict: #171 (Spring Boot example) is highest-impact doc. #642 (close modes) addresses real operational confusion.

3.10. Category 10: Vertx / Reactor module

Issue Title Author Date Cross-ref PRs

#170

CompletableFuture API support + docs

astubbs

2021-10

 — 

#180

vertxHttpReqInfo only supports GET

OpenSourceTycoon

2021-11

 — 

#480

Question: Produce events using reactor?

Ehud-Lev

2022-11

 — 

#860

Accept instance params for managedExecutorService

dougcavalheiro

2025-04

 — 

#912

Memory Leak from JStreamVertxParallelStreamProcessor

sharifahmad2061

2026-01

 — 

Verdict: #912 (memory leak) is a production bug and highest priority in this group.

3.11. Category 11: Build / CI / tooling

Issue Title Author Date Cross-ref PRs

#103

Matrix test against multiple AK/JDK versions

astubbs

2021-03

 — 

#130

Remove static state in tests

astubbs

2021-07

PR #126, PR #405 (both closed)

#162

mvn compile fails without test-jar

rkolesnev

2021-09

 — 

#259

Adopt error-prone and checker

astubbs

2022-04

 — 

#290

Refactor test base

astubbs

2022-05

 — 

#526

Move LongPollingMockConsumer to main artefact

astubbs

2022-12

 — 

#861

Error running tests: ManagedTruth.assertThat not found

gihong-park

2025-04

PR #901

#906

pom.xml version mismatch

lutzh

2026-01

 — 

Verdict: #162 and #861 are contributor-friction issues. Fix these early to unblock external contributors.

3.12. Category 12: Architecture / refactoring (internal)

Issue Title Author Date Cross-ref PRs

#200

Shared-nothing architecture

astubbs

2022-02

PR #270 (closed)

#233

Refactor OffsetMapCodecManager

astubbs

2022-03

 — 

#241

Refactor WC type from String to Enum

astubbs

2022-03

 — 

#109

Review serialisation versioning strategy

astubbs

2021-04

 — 

Verdict: Internal maintainability improvements. Tackle when touching adjacent code.

3.13. Category 13: Meta / project governance

Issue Title Author Date Labels

#172

Release train for 1.0

astubbs

2021-10

high

#177

Investigate Release Drafter

astubbs

2021-11

 — 

#907

Is the project still actively maintained?

amrynsky

2026-01

 — 

Verdict: #907 is the community distress signal. Answering it with a new release would address the maintenance concern directly.

3.14. Closed as "Not Planned" (8 issues)

Issue Title Reason

#847

Python support?

Out of scope (Java only)

#462

How to set starting offset?

Question, answered

#446

Poller behavior question

Question, answered

#433

Different results with different concurrency configs

Cannot reproduce

#395

API to send records through wrapped producer

Closed by astubbs

#379

consumeAndProduce with read-one write-many

Not a bug / by design

#377

Multiple instances/nodes support

Not a bug / by design

#373

batchSize(100) but only getting 1-3 messages

Not a bug / by design

Verdict: Only #395 might be worth reconsidering. The rest are correctly closed.

3.15. Issue priority ranking (top 15 across all categories)

Rank Issue Title Category Why first

1

#803

Transactional Producer timeout (verified bug)

Stability

Only verified bug; production-blocking

2

#71

Health-checks

Observability

5+ years open; most basic operational need

3

#27

Micrometer metrics

Observability

5+ years open; pairs with #71

4

#310

DLQ implementation

Error handling

Most demanded feature; PR #366 exists as design ref

5

#186

Thread-safe PC APIs (blocker)

Safety

Labeled blocker for 1.0

6

#777

Partition revocation leads to duplicates

Correctness

NOT fixed by confluentinc#893 + #909 (refuted); at-least-once by design

7

#862

PC cannot run on Java 24

Compat

Time-critical; JDK moves fast

8

#266

Batch same-key-only option

Batch

PR #915 already implements this

9

#809

Sporadic commit timeouts

Stability

Multiple users report; likely related to #803

10

#859

Memory leak in PCMetrics

Stability

Production leak

11

#912

Memory leak in Vertx module

Stability

Production leak

12

#162

mvn compile fails without test-jar

Build

Blocks contributors

13

#718

Terminate processing feature

Feature

Practical operational gap

14

#196

Max retries + DLQ callback

Error handling

Companion to #310

15

#629+#631+#640

Logging verbosity fixes

UX

Low-effort batch fix

3.16. Issue to PR cross-reference matrix

Issue Open upstream PR Closed astubbs PR Action

#71 (health checks)

#905 (partial — one metric only)

#464 (full health check impl)

Revive #464, merge #905

#266 (batch same-key)

#915 (full implementation)

 — 

Merge #915

#299 (Loom POC)

#908 (Virtual Threads)

#300 (Loom POC)

Compare #908 vs #300, merge #908

#310 (DLQ)

 — 

#366 (DLQ impl)

Revive #366

#314 (combine queues)

 — 

#316 (impl)

Revive #316

#520 (safe user API)

 — 

#346 (thread-safe API)

Revive #346

#200 (shared-nothing)

 — 

#270 (impl)

Keep as design ref

#130 (static state tests)

 — 

#126, #405

Revive #126

#394 (least-loaded broker)

 — 

#473 (impl)

Revive #473

#196 (max retries)

 — 

#291 (terminal exceptions)

Revive #291

#777 (rebalance dupes)

 — 

 — 

Refuted 2026-08-20: confluentinc#893 does not address it

#843 (multi-thread pickup)

 — 

 — 

Refuted 2026-08-20: confluentinc#909 causes loss, not dupes

#862 (Java 24 compat)

 — 

 — 

Refuted 2026-08-20: settled by kafka-clients 3.9.1, not confluentinc#908

4. Part 4: How to use this document

  1. Part 1 (open PRs) = short-term backlog — fixes and features already written, just needing review / merge / cherry-pick.

  2. Part 2 (astubbs closed PRs) = medium-term idea bank — intentional design work that was never rejected on technical grounds. Use each entry as a spec, not a branch to resurrect (branches will have bitrot beyond usefulness).

  3. Part 3 (issues) = the requirements backlog — user-reported needs and bugs. Use the issue priority ranking and the cross-reference matrix to decide what to tackle next. Issues with linked PRs (open or closed) can be resolved by merging/reviving those PRs.

  4. Before picking up a Part 2 item, check Part 1 for overlap (see cross-references) to avoid duplicating effort.