You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by mj...@apache.org on 2026/08/13 18:54:06 UTC
(kafka) branch trunk updated: KAFKA-20169: Add missing docs. (#23072)
This is an automated email from the ASF dual-hosted git repository.
mjsax pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git
The following commit(s) were added to refs/heads/trunk by this push:
new 883f69028dd KAFKA-20169: Add missing docs. (#23072)
883f69028dd is described below
commit 883f69028dda303dfdd022704422b38cee5ae538
Author: ChickenchickenLove <oj...@naver.com>
AuthorDate: Fri Aug 14 03:53:59 2026 +0900
KAFKA-20169: Add missing docs. (#23072)
Clarify Kafka Streams static membership documentation for 4.4:
- Document thread-scoped instance IDs and stateless topology restart
behavior.
- Add a dedicated `group.instance.id` configuration entry.
- Move the static membership upgrade note from 4.3 to 4.4.
- Document `CloseOptions` behavior across protocols and membership
types.
Reviewers: Matthias J. Sax <ma...@confluent.io>
---
docs/streams/developer-guide/config-streams.md | 5 +++++
docs/streams/developer-guide/streams-rebalance-protocol.md | 2 +-
docs/streams/upgrade-guide.md | 7 +++++--
3 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/docs/streams/developer-guide/config-streams.md b/docs/streams/developer-guide/config-streams.md
index ec31bb4222c..bd94137238f 100644
--- a/docs/streams/developer-guide/config-streams.md
+++ b/docs/streams/developer-guide/config-streams.md
@@ -91,6 +91,7 @@ This section contains the most common Streams configuration parameters. For a fu
* topology.optimization
* Kafka consumers and producer configuration parameters
* Naming
+ * group.instance.id
* Default Values
* Parameters controlled by Kafka Streams
* enable.auto.commit
@@ -1806,6 +1807,10 @@ If you call `streamsBuilder.build()` without passing the `Properties` object, op
// alternatively, you can use
streamsSettings.put(StreamsConfig.topicPrefix("PARAMETER_NAME"), "topic-value");
+ #### group.instance.id {#group-instance-id}
+
+ `group.instance.id` is a consumer configuration that enables static membership. For Kafka Streams, it is configured at the Kafka Streams client level, and the configured value must be unique to each `KafkaStreams` instance. Internally, Kafka Streams appends the 1-based stream thread index to the configured `group.instance.id` to ensure that each stream thread's main consumer uses a unique value. For example, a configured value of `ks-client-A` results in `ks-client-A-1`, `ks-client-A-2` [...]
+
#### Default Values
Kafka Streams uses different default values for some of the underlying client configs, which are summarized below. For detailed descriptions of these configs, see [Producer Configs](/43/documentation.html#producerconfigs) and [Consumer Configs](/43/documentation.html#consumerconfigs).
diff --git a/docs/streams/developer-guide/streams-rebalance-protocol.md b/docs/streams/developer-guide/streams-rebalance-protocol.md
index fb1b07d2fb1..2209e3bbd13 100644
--- a/docs/streams/developer-guide/streams-rebalance-protocol.md
+++ b/docs/streams/developer-guide/streams-rebalance-protocol.md
@@ -53,7 +53,7 @@ The following features are available in the current release:
* **Offline Migration**: After shutting down all members and waiting for their `session.timeout.ms` to expire (or forcing an explicit group leave), a classic group can be converted to a streams group and a streams group can be converted to a classic group. The only broker-side group data that will be preserved are the committed offsets. Internal topics (changelog and repartition topics) will continue to exist as regular Kafka topics.
-* **Static Membership**: Streams applications can configure `group.instance.id` when using `group.protocol=streams`. Kafka Streams derives unique group instance IDs for its stream threads internally.
+* **Static Membership**: Streams applications can configure [`group.instance.id`](../config-streams#group-instance-id) when using `group.protocol=streams`. However, for topologies without persistent state stores, Kafka Streams generates a new process ID on each restart, causing the broker to recompute the group assignment and effectively negating the benefits of static membership across restarts.
# What's Not Supported in This Version
diff --git a/docs/streams/upgrade-guide.md b/docs/streams/upgrade-guide.md
index b4bd4c90482..fcd028384b2 100644
--- a/docs/streams/upgrade-guide.md
+++ b/docs/streams/upgrade-guide.md
@@ -79,6 +79,10 @@ For applications using the Streams Rebalance Protocol (`group.protocol=streams`)
The buffer used by `suppress()` is now headers-aware, closing one of the gaps listed under the [KIP-1285 current limitations](#current-limitations) in 4.3.0. With [`dsl.store.format=HEADERS`](/{version}/streams/developer-guide/config-streams.html#dsl-store-format), each buffered value is stored together with the headers of the record it came from, so record headers are preserved across the suppression boundary: the record emitted when a buffered row is evicted carries the headers of the [...]
+Kafka Streams now supports static membership with the Streams Rebalance Protocol. Applications using `group.protocol=streams` may configure `group.instance.id`. However, for topologies without persistent state stores, Kafka Streams generates a new process ID on each restart, causing the broker to recompute the group assignment and effectively negating the benefits of static membership across restarts.
+
+As part of [KIP-1284](https://cwiki.apache.org/confluence/spaces/KAFKA/pages/406621398/KIP-1284+Introduce+CloseOptions.DEFAULT+for+Kafka+Streams), the [`CloseOptions`](/{version}/javadoc/org/apache/kafka/streams/CloseOptions.html) limitation noted in 3.3.0 no longer applies. `LEAVE_GROUP` always leaves the group, while `REMAIN_IN_GROUP` suppresses an explicit leave. With `DEFAULT`, members using `group.protocol=classic` remain in the group, dynamic members using `group.protocol=streams` [...]
+
## Streams API changes in 4.3.0
**Note:** Kafka Streams 4.3.0 contains a critical native memory leak in the RocksDB state store layer ([KAFKA-20616](https://issues.apache.org/jira/browse/KAFKA-20616)). The `ColumnFamilyOptions` for the offsets column family is not closed, and column family handles can leak on close-path exceptions, which under cascading task closes (e.g., rebalances or error-triggered recoveries) leads to unbounded off-heap memory growth and eventual OOM. Users running Kafka Streams should consider upg [...]
@@ -93,7 +97,6 @@ Kafka Streams now persists state store changelog offsets inside each state store
As part of KIP-1035, the per-store changelog offset is written into RocksDB on each commit and is made durable on disk only when RocksDB flushes its memtable to an SST file — either organically once the memtable fills `write_buffer_size` (16 MB by default), or on a clean store close. Earlier releases force-flushed RocksDB on every commit. A consequence is that for a **low-traffic store** whose memtable rarely fills, the on-disk offset can lag the store's actual position until the next cl [...]
-Kafka Streams now supports static membership with the Streams Rebalance Protocol. Applications using `group.protocol=streams` may configure `group.instance.id`; Kafka Streams derives unique group instance IDs for its stream threads internally.
### Header-aware state stores for the Processor API (KIP-1271) {#kip-1271-headers-aware-stores}
@@ -195,7 +198,7 @@ This Early Access release covers a subset of the functionality detailed in [KIP-
**What's Not Included in Early Access**
- * **Static Membership:** Setting `group.instance.id` was rejected in the 4.1 Early Access release. Static membership is supported with the Streams Rebalance Protocol starting in 4.3.0.
+ * **Static Membership:** Setting `group.instance.id` was rejected in the 4.1 Early Access release. Static membership is supported with the Streams Rebalance Protocol starting in 4.4.0.
* **Topology Updates:** If a topology is changed significantly (e.g., by adding new source topics or changing the number of sub-topologies), a new streams group must be created.
* **High Availability Assignor:** Only the sticky assignor is supported.
* **Regular Expressions:** Pattern-based topic subscription is not supported.