KIP index
All KIPs the codebase references, split honestly: implemented, partial, or deliberate non-goal.
The split below is source-verified, not aspirational: "implemented" means the behaviour ships and is exercised by tests or the shell-tool suite; "partial" pages lead with what's missing; non-goals get a rationale in Non-goals, not silence.
Three corrections relative to earlier planning documents, all found by source-verifying during the book build: KIP-516, KIP-32, KIP-58, and KIP-354 are partial, not implemented. Topic IDs are minted but not propagated to the wire; LogAppendTime and timestamp lookup don't exist; and the two compaction knobs are config plumbing without an enforcing compactor (no background cleaner runs at all — gh #158).
Implemented (12)
| KIP | What it is | kaas page |
|---|---|---|
| KIP-13 | Per-broker client quotas (byte-rate throttling) | KIP-13 |
| KIP-98 | Exactly-once: idempotent producer + transactions | KIP-98 |
| KIP-107 | DeleteRecords admin API (key 21) | KIP-107 |
| KIP-195 | CreatePartitions admin API (key 37) | KIP-195 |
| KIP-290 | Prefixed ACL resource patterns | KIP-290 |
| KIP-339 | IncrementalAlterConfigs (key 44) | KIP-339 |
| KIP-360 | Producer epoch bump on re-initialization | KIP-360 |
| KIP-371 | mTLS principal mapping (ssl.principal.mapping.rules) | KIP-371 |
| KIP-447 | EOS v2: producer-scalable transactional offsets | KIP-447 |
| KIP-482 | Flexible versions + tagged fields | KIP-482 |
| KIP-546 | Client-quota admin APIs (keys 48/49) | KIP-546 |
| KIP-800 | Join/leave reason strings | KIP-800 |
Partial (9)
Each page leads with the "what's missing" block — these are the book's credibility test.
| KIP | Landed | Missing | kaas page |
|---|---|---|---|
| KIP-32 | CreateTime timestamps round-trip byte-identically; batch MaxTimestamp tracked per segment | LogAppendTime entirely; timestamp→offset ListOffsets lookup ((-1,-1) sentinel) | KIP-32 |
| KIP-58 | min.compaction.lag.ms config plumbing (CR → .config.json → DescribeConfigs) | the compactor that would enforce it — no background cleaner runs (gh #158) | KIP-58 |
| KIP-101 | segment filenames carry the leader epoch | leader-epoch cache + lookup (offset_for_leader_epoch returns the (-1,-1) sentinel); wire key 23 unregistered | KIP-101 |
| KIP-219 | throttle_time_ms computed (debt-carry) and returned | the broker never mutes the channel after responding — throttling relies on client cooperation | KIP-219 |
| KIP-345 | group.instance.id plumbed through join/sync; static members survive the eviction sweep | FENCED_INSTANCE_ID fencing of duplicate static members | KIP-345 |
| KIP-354 | delete.retention.ms config plumbing | tombstone-expiry enforcement (same missing compactor); upstream's max.compaction.lag.ms doesn't exist anywhere | KIP-354 |
| KIP-394 | MEMBER_ID_REQUIRED error code defined | the v4+ two-step join handshake — join() still takes the legacy assign-inline path | KIP-394 |
| KIP-516 | operator mints Status.TopicID (v4 UUID, never rotated) | broker-side wire propagation — the production topic watch inserts the all-zero sentinel, so Metadata serves nil topic IDs | KIP-516 |
| KIP-554 | operator-side SCRAM credential rotation path | wire keys 50/51 entirely — no codec modules, no dispatch | KIP-554 |
Deliberate non-goals (8)
Rationale for each in Non-goals.
| KIP | What it is | Why not |
|---|---|---|
| KIP-48 | Delegation tokens | no token-based auth surface; SCRAM/mTLS cover the deployment model |
| KIP-227 | Incremental fetch sessions | stateless by contract: SessionID=0 on every response |
| KIP-405 | Tiered storage | deferred, not refused — the NFS substrate is already a near-tier |
| KIP-664 | Describe/ListTransactions tooling | follow-up; slot files are directly inspectable meanwhile |
| KIP-714 | Client metrics push | out of scope for the preview line |
| KIP-848 | Next-gen consumer rebalance protocol | post-3.7 |
| KIP-932 | Share groups (queues) | Kafka 4.0+ |
| KIP-1071 | Streams rebalance protocol | post-3.7 |