This is an automated email from the ASF dual-hosted git repository.
lianetm pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/kafka-site.git
The following commit(s) were added to refs/heads/asf-site by this push:
new 11fd18dfd MINOR: updates for 4.1.1 (#741)
11fd18dfd is described below
commit 11fd18dfdc4559e443091d5bfa9fe7f6ee5e4afc
Author: Lianet Magrans <[email protected]>
AuthorDate: Thu Nov 13 14:52:00 2025 -0500
MINOR: updates for 4.1.1 (#741)
* updates for 4.1.1
* address comment
---
40/upgrade.html | 2 +-
41/generated/connect_rest.yaml | 2 +-
41/generated/mirror_connector_config.html | 8 ++--
41/generated/sink_connector_config.html | 8 ++--
41/generated/source_connector_config.html | 8 ++--
41/js/templateData.js | 2 +-
41/ops.html | 60 ++++++++++----------------
41/streams/developer-guide/config-streams.html | 1 -
41/streams/upgrade-guide.html | 20 ++++++---
41/upgrade.html | 22 ++++++++--
10 files changed, 69 insertions(+), 64 deletions(-)
diff --git a/40/upgrade.html b/40/upgrade.html
index 86507f66e..96a6b55fd 100644
--- a/40/upgrade.html
+++ b/40/upgrade.html
@@ -63,7 +63,7 @@
See <a
href="https://issues.apache.org/jira/browse/KAFKA-19576">KAFKA-19576</a> for
details.
</li>
<li>
- Kafka Streams include a critical fix to upgrade from
<code>KStreams#transformValues()</code> (remove with 4.0.0 release)
+ Kafka Streams include a critical fix to upgrade from
<code>KStreams#transformValues()</code> (removed with 4.0.0 release)
to <code>KStreams#processValues()</code>.
For more details, see the <a
href="/{{version}}/documentation/streams/developer-guide/dsl-api.html#transformers-removal-and-migration-to-processors">migration
guide</a>.
</li>
diff --git a/41/generated/connect_rest.yaml b/41/generated/connect_rest.yaml
index 79f59295c..46e944885 100644
--- a/41/generated/connect_rest.yaml
+++ b/41/generated/connect_rest.yaml
@@ -8,7 +8,7 @@ info:
name: Apache 2.0
url: https://www.apache.org/licenses/LICENSE-2.0.html
title: Kafka Connect REST API
- version: 4.1.0
+ version: 4.1.1
paths:
/:
get:
diff --git a/41/generated/mirror_connector_config.html
b/41/generated/mirror_connector_config.html
index 25c8d171b..54c1ce1da 100644
--- a/41/generated/mirror_connector_config.html
+++ b/41/generated/mirror_connector_config.html
@@ -765,7 +765,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@442d9b6e</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@12bb4df8</td></tr>
<tr><th>Importance:</th><td>medium</td></tr>
</tbody></table>
</li>
@@ -805,7 +805,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@ee7d9f1</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@4cc77c2e</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -825,7 +825,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@15615099</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@7a7b0070</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -845,7 +845,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@1edf1c96</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@39a054a5</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
diff --git a/41/generated/sink_connector_config.html
b/41/generated/sink_connector_config.html
index c8a00db60..f03bf6d61 100644
--- a/41/generated/sink_connector_config.html
+++ b/41/generated/sink_connector_config.html
@@ -25,7 +25,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@799f7e29</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@573fd745</td></tr>
<tr><th>Importance:</th><td>medium</td></tr>
</tbody></table>
</li>
@@ -85,7 +85,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@531d72ca</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@20fa23c1</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -105,7 +105,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@22d8cfe0</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@3581c5f3</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -125,7 +125,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@579bb367</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@6aa8ceb6</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
diff --git a/41/generated/source_connector_config.html
b/41/generated/source_connector_config.html
index ecbc0bc5c..bea98361a 100644
--- a/41/generated/source_connector_config.html
+++ b/41/generated/source_connector_config.html
@@ -25,7 +25,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@2d38eb89</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@73a8dfcc</td></tr>
<tr><th>Importance:</th><td>medium</td></tr>
</tbody></table>
</li>
@@ -65,7 +65,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@5fa7e7ff</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@ea30797</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -85,7 +85,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@4629104a</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@7e774085</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
@@ -105,7 +105,7 @@
<table><tbody>
<tr><th>Type:</th><td>string</td></tr>
<tr><th>Default:</th><td>null</td></tr>
-<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@27f8302d</td></tr>
+<tr><th>Valid
Values:</th><td>org.apache.kafka.connect.runtime.ConnectorConfig$PluginVersionValidator@3f8f9dd6</td></tr>
<tr><th>Importance:</th><td>low</td></tr>
</tbody></table>
</li>
diff --git a/41/js/templateData.js b/41/js/templateData.js
index cb834035f..d63a81b50 100644
--- a/41/js/templateData.js
+++ b/41/js/templateData.js
@@ -19,6 +19,6 @@ limitations under the License.
var context={
"version": "41",
"dotVersion": "4.1",
- "fullDotVersion": "4.1.0",
+ "fullDotVersion": "4.1.1",
"scalaVersion": "2.13"
};
diff --git a/41/ops.html b/41/ops.html
index dbb914e60..2b87e07f5 100644
--- a/41/ops.html
+++ b/41/ops.html
@@ -4072,42 +4072,26 @@ In the replica description
0@controller-0:1234:3Db5QLSqSZieL3rJBUUegA, 0 is the
If you are not sure whether you are using static or dynamic quorums, you can
determine this by
running something like the following:<p>
-<pre><code class="language-bash">
- $ bin/kafka-features.sh --bootstrap-controller localhost:9093 describe
-</code></pre><p>
-
- If the <code>kraft.version</code> field is level 0 or absent, you are using
a static quorum. If
- it is 1 or above, you are using a dynamic quorum. For example, here is an
example of a static
- quorum:<p/>
-<pre><code class="language-bash">
-Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1
FinalizedVersionLevel: 0 Epoch: 5
-Feature: metadata.version SupportedMinVersion: 3.3-IV3
SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5
-</code></pre><p/>
-
- Here is another example of a static quorum:<p/>
-<pre><code class="language-bash">
-Feature: metadata.version SupportedMinVersion: 3.3-IV3
SupportedMaxVersion: 3.8-IV0 FinalizedVersionLevel: 3.8-IV0 Epoch: 5
-</code></pre><p/>
-
- Here is an example of a dynamic quorum:<p/>
-<pre><code class="language-bash">
-Feature: kraft.version SupportedMinVersion: 0 SupportedMaxVersion: 1
FinalizedVersionLevel: 1 Epoch: 5
-Feature: metadata.version SupportedMinVersion: 3.3-IV3
SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch: 5
-</code></pre><p/>
-
- The static versus dynamic nature of the quorum is determined at the time of
formatting.
- Specifically, the quorum will be formatted as dynamic if
<code>controller.quorum.voters</code> is
- <b>not</b> present, and if the software version is Apache Kafka 3.9 or
newer. If you have
- followed the instructions earlier in this document, you will get a dynamic
quorum.<p>
-
- If you would like the formatting process to fail if a dynamic quorum cannot
be achieved, format your
- controllers using the <code>--feature kraft.version=1</code>. (Note that you
should not supply
- this flag when formatting brokers -- only when formatting controllers.)<p>
-
-<pre><code class="language-bash">
- $ bin/kafka-storage.sh format -t KAFKA_CLUSTER_ID --feature kraft.version=1
-c controller.properties
-</code></pre><p>
-
+ <pre><code class="language-bash">$ bin/kafka-features.sh
--bootstrap-controller localhost:9093 describe</code></pre>
+ <p>
+ If the <code>kraft.version</code> field is level 0 or absent, you are
using a static quorum. If
+ it is 1 or above, you are using a dynamic quorum. For example, here is an
example of a static
+ quorum:<p>
+ <pre><code class="language-bash">Feature: kraft.version
SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 0 Epoch:
5
+Feature: metadata.version SupportedMinVersion: 3.3-IV3
SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch:
5</code></pre>
+ <p>
+ Here is another example of a static quorum:<p>
+ <pre><code class="language-bash">Feature: metadata.version
SupportedMinVersion: 3.3-IV3 SupportedMaxVersion: 3.8-IV0
FinalizedVersionLevel: 3.8-IV0 Epoch: 5</code></pre>
+ <p>
+ Here is an example of a dynamic quorum:<p>
+ <pre><code class="language-bash">Feature: kraft.version
SupportedMinVersion: 0 SupportedMaxVersion: 1 FinalizedVersionLevel: 1 Epoch:
5
+Feature: metadata.version SupportedMinVersion: 3.3-IV3
SupportedMaxVersion: 3.9-IV0 FinalizedVersionLevel: 3.9-IV0 Epoch:
5</code></pre>
+ <p>
+ The static versus dynamic nature of the quorum is determined at the time
of formatting.
+ Specifically, the quorum will be formatted as dynamic if
<code>controller.quorum.voters</code> is
+ <b>not</b> present, and one of --standalone, --initial-controllers, or
--no-initial-controllers is set.
+ If you have followed the instructions earlier in this document, you will
get a dynamic quorum.
+ <p>
Note: To migrate from static voter set to dynamic voter set, please refer to
the <a href="#kraft_upgrade">Upgrade</a> section.
<h5 class="anchor-heading"><a id="kraft_reconfig_add"
class="anchor-link"></a><a href="#kraft_reconfig_add">Add New
Controller</a></h5>
@@ -4156,7 +4140,7 @@ CurrentObservers: [{"id": 0, "directoryId":
"3Db5QLSqSZieL3rJBUUegA"},
<pre><code class="language-bash">$ bin/kafka-dump-log.sh
--cluster-metadata-decoder --files
metadata_log_dir/__cluster_metadata-0/00000000000000000000.log</code></pre>
- <p>This command decodes and prints the records in the a cluster metadata
snapshot:</p>
+ <p>This command decodes and prints the records in a cluster metadata
snapshot:</p>
<pre><code class="language-bash">$ bin/kafka-dump-log.sh
--cluster-metadata-decoder --files
metadata_log_dir/__cluster_metadata-0/00000000000000000100-0000000001.checkpoint</code></pre>
@@ -4186,7 +4170,7 @@ foo
<h4 class="anchor-heading"><a id="kraft_deployment"
class="anchor-link"></a><a href="#kraft_deployment">Deploying
Considerations</a></h4>
<ul>
- <li>Kafka server's <code>process.role</code> should be set to either
<code>broker</code> or <code>controller</code> but not both. Combined mode can
be used in development environments, but it should be avoided in critical
deployment environments.</li>
+ <li>Kafka server's <code>process.roles</code> should be set to either
<code>broker</code> or <code>controller</code> but not both. Combined mode can
be used in development environments, but it should be avoided in critical
deployment environments.</li>
<li>For redundancy, a Kafka cluster should use 3 or more controllers,
depending on factors like cost and the number of concurrent failures your
system should withstand without availability impact. For the KRaft controller
cluster to withstand <code>N</code> concurrent failures the controller cluster
must include <code>2N + 1</code> controllers.</li>
<li>The Kafka controllers store all the metadata for the cluster in memory
and on disk. We believe that for a typical Kafka cluster 5GB of main memory and
5GB of disk space on the metadata log director is sufficient.</li>
</ul>
diff --git a/41/streams/developer-guide/config-streams.html
b/41/streams/developer-guide/config-streams.html
index 439c33098..8c45d0c79 100644
--- a/41/streams/developer-guide/config-streams.html
+++ b/41/streams/developer-guide/config-streams.html
@@ -1509,4 +1509,3 @@
streamsSettings.put(StreamsConfig.topicPrefix("PARAMETER_NAME"), "topic-value");
$('.b-nav__docs').parent().toggleClass('nav__item__with__subs--expanded');
});
</script>
-
\ No newline at end of file
diff --git a/41/streams/upgrade-guide.html b/41/streams/upgrade-guide.html
index 3831c2f1e..ac529e3eb 100644
--- a/41/streams/upgrade-guide.html
+++ b/41/streams/upgrade-guide.html
@@ -141,8 +141,6 @@
<h3><a id="streams_api_changes_410"
href="#streams_api_changes_410">Streams API changes in 4.1.0</a></h3>
- <p><b>Note:</b> Kafka Streams 4.1.0 contains a critical memory leak bug
(<a href="https://issues.apache.org/jira/browse/KAFKA-19748">KAFKA-19748</a>)
that affects users of range scans and certain DSL operators (session windows,
sliding windows, stream-stream joins, foreign-key joins). Users running Kafka
Streams should consider upgrading directly to 4.1.1 when available.</p>
-
<h4>Early Access of the Streams Rebalance Protocol</h4>
<p>
@@ -215,9 +213,19 @@
Set <code>unstable.feature.versions.enable=true</code> for controllers
and brokers, and
set <code>unstable.api.versions.enable=true</code> on the brokers as
well. In your Kafka Streams application
configuration, set <code>group.protocol=streams</code>.
- After the new feature is configured, check
- <code>kafka-features.sh --bootstrap-server localhost:9092
describe</code>
- and `streams.version` should now have FinalizedVersionLevel 1.
+ </p>
+
+ <p>
+ When <code>unstable.api.versions.enable=true</code> is set when the
kafka storage is first created,
+ and no explicit metadata version is set, the feature will be enabled
by default. In other configurations
+ (e.g. if the cluster already existed, or a metadata version was
hardcoded), you may have to enable it explicitly.
+ First, check the current feature level by running
+ <code>kafka-features.sh --bootstrap-server localhost:9092
describe</code>.
+ If <code>streams.version</code> shows
<code>FinalizedVersionLevel</code> is 1, no action is needed.
+ Otherwise, upgrade by running
+ <code>kafka-features.sh --bootstrap-server localhost:9092 upgrade
--feature streams.version=1</code>.
+ After the upgrade, verify the change by running
+ <code>kafka-features.sh --bootstrap-server localhost:9092
describe</code>.
</p>
<p>
@@ -263,6 +271,7 @@
A few important ones are listed below. The full list can be found in
<a href="https://issues.apache.org/jira/browse/KAFKA-12822">KAFKA-12822</a>.
<ul>
<li><a
href="https://issues.apache.org/jira/browse/KAFKA-12829">Old processor
APIs</a></li>
+ <li><a
href="https://issues.apache.org/jira/browse/KAFKA-12823">KStream#through() in
both Java and Scala</a></li>
<li>
<a
href="https://issues.apache.org/jira/browse/KAFKA-16339">"transformer" methods
and classes in both Java and Scala</a>
<ul>
@@ -272,7 +281,6 @@
</li>
</ul>
</li>
- <li><a
href="https://issues.apache.org/jira/browse/KAFKA-16339">"transformer" methods
and classes in both Java and Scala</a></li>
<li><a
href="https://issues.apache.org/jira/browse/KAFKA-12824">kstream.KStream#branch
in both Java and Scala</a></li>
<li><a
href="https://issues.apache.org/jira/browse/KAFKA-16332">builder methods for
Time/Session/Join/SlidingWindows</a></li>
<li><a
href="https://issues.apache.org/jira/browse/KAFKA-12827">KafkaStreams#setUncaughtExceptionHandler()</a></li>
diff --git a/41/upgrade.html b/41/upgrade.html
index 0ef6e6376..abfe7336e 100644
--- a/41/upgrade.html
+++ b/41/upgrade.html
@@ -19,9 +19,18 @@
<script id="upgrade-template" type="text/x-handlebars-template">
-<h4><a id="upgrade_4_1_0" href="#upgrade_4_1_0">Upgrading to 4.1.0</a></h4>
+<h4><a id="upgrade_4_1_1" href="#upgrade_4_1_0">Upgrading to 4.1.1</a></h4>
+<h5><a id="upgrade_4_1_1_notable" href="#upgrade_4_1_1_notable">Notable
changes in 4.1.1</a></h5>
+ <ul>
+ <li>
+ Includes a fix for the critical Kafka Streams bug (<a
href="https://issues.apache.org/jira/browse/KAFKA-19748">KAFKA-19748</a>),
solving the memory leak issues that affected users of range scans and certain
DSL operators (session windows, sliding windows, stream-stream joins,
foreign-key joins).
+ </li>
+ <li>
+ Includes a fix for the critical Kafka Streams bug (<a
href="https://issues.apache.org/jira/browse/KAFKA-19479">KAFKA-19479</a>),
related to potential data loss.
+ </li>
+ </ul>
-<p><b>Note:</b> Kafka Streams 4.1.0 contains a critical memory leak bug (<a
href="https://issues.apache.org/jira/browse/KAFKA-19748">KAFKA-19748</a>) that
affects users of range scans and certain DSL operators (session windows,
sliding windows, stream-stream joins, foreign-key joins). Users running Kafka
Streams should consider upgrading directly to 4.1.1 when available.</p>
+<h4><a id="upgrade_4_1_0" href="#upgrade_4_1_0">Upgrading to 4.1.0</a></h4>
<h5><a id="upgrade_4_1_0_from" href="#upgrade_4_1_0_from">Upgrading Servers to
4.1.0 from any version 3.3.x through 4.0.x</a></h5>
<h5><a id="upgrade_410_notable" href="#upgrade_410_notable">Notable
changes in 4.1.0</a></h5>
@@ -132,6 +141,11 @@
The filename for rotated <code>state-change.log</code> files has
been updated from <code>stage-change.log.[date]</code> to
<code>state-change.log.[date]</code> in the log4j2.yaml configuration file.
See <a
href="https://issues.apache.org/jira/browse/KAFKA-19576">KAFKA-19576</a> for
details.
</li>
+ <li>
+ Kafka Streams include a critical fix to upgrade from
<code>KStreams#transformValues()</code> (removed with 4.0.0 release)
+ to <code>KStreams#processValues()</code>.
+ For more details, see the <a
href="/{{version}}/documentation/streams/developer-guide/dsl-api.html#transformers-removal-and-migration-to-processors">migration
guide</a>.
+ </li>
</ul>
<h5><a id="upgrade_servers_400_notable"
href="#upgrade_servers_400_notable">Notable changes in 4.0.0</a></h5>
<ul>
@@ -411,8 +425,8 @@
<li><a id="upgrade_400_notable_kafka_streams"
href="#upgrade_400_notable_kafka_streams"><b>Kafka Streams</b></a>
<ul>
<li>
- All public APIs, deprecated in Apache Kafka 3.6 or
an earlier release, have been removed, with the exception of
<code>JoinWindows.of()</code> and <code>JoinWindows#grace()</code>.
- See <a
href="https://issues.apache.org/jira/browse/KAFKA-17531">KAFKA-17531</a> for
details.
+ All public APIs, deprecated in Apache Kafka 3.6 or
an earlier release, have been removed, with the exception of
<code>JoinWindows.of()</code> and <code>JoinWindows#grace()</code>.
+ See <a
href="https://issues.apache.org/jira/browse/KAFKA-17531">KAFKA-17531</a> for
details.
</li>
<li>
The most important changes are highlighted in the
<a
href="/{{version}}/documentation/streams/upgrade-guide.html#streams_api_changes_400">Kafka
Streams upgrade guide</a>.