You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@kafka.apache.org by gi...@apache.org on 2026/10/02 17:23:24 UTC
(kafka-site) branch asf-staging updated: Updated asf-staging from GHA workflow run 37039991095
This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch asf-staging
in repository https://gitbox.apache.org/repos/asf/kafka-site.git
The following commit(s) were added to refs/heads/asf-staging by this push:
new fe80b34808 Updated asf-staging from GHA workflow run 37039991095
fe80b34808 is described below
commit fe80b34808b42332880a25909d4da45cfa1bc58d
Author: github-actions[bot] <41...@users.noreply.github.com>
AuthorDate: Fri Oct 2 17:23:16 2026 +0000
Updated asf-staging from GHA workflow run 37039991095
Commit: https://github.com/apache/kafka-site/commit/d0cc96bde945ce6c40ce183b0a140d14fe90fbdc
GitHub Run: https://github.com/apache/kafka-site/actions/runs/37039991095
---
0102/_print/index.html | 3 ++-
0102/getting-started/_print/index.html | 3 ++-
0102/getting-started/quickstart/index.html | 3 ++-
0110/_print/index.html | 11 +++++++++--
0110/streams/_print/index.html | 11 +++++++++--
0110/streams/introduction/index.html | 8 +++++++-
0110/streams/quickstart/index.html | 3 ++-
10/_print/index.html | 21 +++++++++++----------
10/streams/_print/index.html | 21 +++++++++++----------
10/streams/developer-guide/_print/index.html | 18 +++++++++---------
10/streams/developer-guide/dsl-api/index.html | 8 ++++----
.../developer-guide/interactive-queries/index.html | 6 +++---
10/streams/developer-guide/memory-mgmt/index.html | 2 +-
10/streams/developer-guide/running-app/index.html | 2 +-
10/streams/quickstart/index.html | 3 ++-
11/_print/index.html | 3 ++-
11/streams/_print/index.html | 3 ++-
11/streams/quickstart/index.html | 3 ++-
20/_print/index.html | 3 ++-
20/streams/_print/index.html | 3 ++-
20/streams/quickstart/index.html | 3 ++-
21/_print/index.html | 3 ++-
21/streams/_print/index.html | 3 ++-
21/streams/quickstart/index.html | 3 ++-
22/_print/index.html | 3 ++-
22/streams/_print/index.html | 3 ++-
22/streams/quickstart/index.html | 3 ++-
23/_print/index.html | 3 ++-
23/streams/_print/index.html | 3 ++-
23/streams/quickstart/index.html | 3 ++-
24/_print/index.html | 3 ++-
24/streams/_print/index.html | 3 ++-
24/streams/quickstart/index.html | 3 ++-
25/_print/index.html | 6 ++++--
25/getting-started/_print/index.html | 3 ++-
25/getting-started/introduction/index.html | 3 ++-
25/streams/_print/index.html | 3 ++-
25/streams/quickstart/index.html | 3 ++-
26/_print/index.html | 6 ++++--
26/getting-started/_print/index.html | 3 ++-
26/getting-started/introduction/index.html | 3 ++-
26/streams/_print/index.html | 3 ++-
26/streams/quickstart/index.html | 3 ++-
27/_print/index.html | 9 ++++++---
27/getting-started/_print/index.html | 3 ++-
27/getting-started/introduction/index.html | 3 ++-
27/streams/_print/index.html | 6 ++++--
27/streams/core-concepts/index.html | 3 ++-
27/streams/quickstart/index.html | 3 ++-
28/_print/index.html | 9 ++++++---
28/getting-started/_print/index.html | 3 ++-
28/getting-started/introduction/index.html | 3 ++-
28/streams/_print/index.html | 6 ++++--
28/streams/core-concepts/index.html | 3 ++-
28/streams/quickstart/index.html | 3 ++-
30/_print/index.html | 9 ++++++---
30/getting-started/_print/index.html | 3 ++-
30/getting-started/introduction/index.html | 3 ++-
30/streams/_print/index.html | 6 ++++--
30/streams/core-concepts/index.html | 3 ++-
30/streams/quickstart/index.html | 3 ++-
31/_print/index.html | 9 ++++++---
31/getting-started/_print/index.html | 3 ++-
31/getting-started/introduction/index.html | 3 ++-
31/streams/_print/index.html | 6 ++++--
31/streams/core-concepts/index.html | 3 ++-
31/streams/quickstart/index.html | 3 ++-
32/_print/index.html | 9 ++++++---
32/getting-started/_print/index.html | 3 ++-
32/getting-started/introduction/index.html | 3 ++-
32/streams/_print/index.html | 6 ++++--
32/streams/core-concepts/index.html | 3 ++-
32/streams/quickstart/index.html | 3 ++-
33/_print/index.html | 9 ++++++---
33/getting-started/_print/index.html | 3 ++-
33/getting-started/introduction/index.html | 3 ++-
33/streams/_print/index.html | 6 ++++--
33/streams/core-concepts/index.html | 3 ++-
33/streams/quickstart/index.html | 3 ++-
34/_print/index.html | 9 ++++++---
34/getting-started/_print/index.html | 3 ++-
34/getting-started/introduction/index.html | 3 ++-
34/streams/_print/index.html | 6 ++++--
34/streams/core-concepts/index.html | 3 ++-
34/streams/quickstart/index.html | 3 ++-
35/_print/index.html | 9 ++++++---
35/getting-started/_print/index.html | 3 ++-
35/getting-started/introduction/index.html | 3 ++-
35/streams/_print/index.html | 6 ++++--
35/streams/core-concepts/index.html | 3 ++-
35/streams/quickstart/index.html | 3 ++-
36/_print/index.html | 9 ++++++---
36/getting-started/_print/index.html | 3 ++-
36/getting-started/introduction/index.html | 3 ++-
36/streams/_print/index.html | 6 ++++--
36/streams/core-concepts/index.html | 3 ++-
36/streams/quickstart/index.html | 3 ++-
37/_print/index.html | 9 ++++++---
37/getting-started/_print/index.html | 3 ++-
37/getting-started/introduction/index.html | 3 ++-
37/streams/_print/index.html | 6 ++++--
37/streams/core-concepts/index.html | 3 ++-
37/streams/quickstart/index.html | 3 ++-
38/_print/index.html | 9 ++++++---
38/getting-started/_print/index.html | 3 ++-
38/getting-started/introduction/index.html | 3 ++-
38/streams/_print/index.html | 6 ++++--
38/streams/core-concepts/index.html | 3 ++-
38/streams/quickstart/index.html | 3 ++-
39/_print/index.html | 9 ++++++---
39/getting-started/_print/index.html | 3 ++-
39/getting-started/introduction/index.html | 3 ++-
39/streams/_print/index.html | 6 ++++--
39/streams/core-concepts/index.html | 3 ++-
39/streams/quickstart/index.html | 3 ++-
40/_print/index.html | 9 ++++++---
40/getting-started/_print/index.html | 3 ++-
40/getting-started/introduction/index.html | 3 ++-
40/streams/_print/index.html | 6 ++++--
40/streams/core-concepts/index.html | 3 ++-
40/streams/quickstart/index.html | 3 ++-
41/_print/index.html | 9 ++++++---
41/getting-started/_print/index.html | 3 ++-
41/getting-started/introduction/index.html | 3 ++-
41/streams/_print/index.html | 6 ++++--
41/streams/core-concepts/index.html | 3 ++-
41/streams/quickstart/index.html | 3 ++-
42/_print/index.html | 9 ++++++---
42/getting-started/_print/index.html | 3 ++-
42/getting-started/introduction/index.html | 3 ++-
42/streams/_print/index.html | 6 ++++--
42/streams/core-concepts/index.html | 3 ++-
42/streams/quickstart/index.html | 3 ++-
43/_print/index.html | 9 ++++++---
43/getting-started/_print/index.html | 3 ++-
43/getting-started/introduction/index.html | 3 ++-
43/streams/_print/index.html | 6 ++++--
43/streams/core-concepts/index.html | 3 ++-
43/streams/quickstart/index.html | 3 ++-
community/_print/index.html | 15 ++++++++++++++-
community/books_and_papers/index.html | 15 ++++++++++++++-
intro/index.html | 3 ++-
142 files changed, 453 insertions(+), 225 deletions(-)
diff --git a/0102/_print/index.html b/0102/_print/index.html
index 20031aeaf6..6768ddcbb7 100644
--- a/0102/_print/index.html
+++ b/0102/_print/index.html
@@ -133,7 +133,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+<img src=/0102/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code>KTable</code> are bein [...]
Kafka exposes all its functionality over a language independent protocol which has clients available in many programming languages. However only the Java clients are maintained as part of the main Kafka project, the others are available as independent open source projects. A list of non-Java clients is available <a href=https://cwiki.apache.org/confluence/display/KAFKA/Clients target=_blank rel=noopener>here</a>.</li></ol><h1 id=producer-api>Producer API<a class=td-heading-self-link href [...]
<groupId>org.apache.kafka</groupId>
<artifactId>kafka-clients</artifactId>
diff --git a/0102/getting-started/_print/index.html b/0102/getting-started/_print/index.html
index 3613f1c412..2777f3d3b4 100644
--- a/0102/getting-started/_print/index.html
+++ b/0102/getting-started/_print/index.html
@@ -133,7 +133,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+<img src=/0102/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code>KTable</code> are bein [...]
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
</a><a href=https://stackoverflow.com/questions/tagged/apache-kafka target=_blank rel=noopener aria-label="Stack Overflow" class=td-footer__social-link><i class="fab fa-stack-overflow"></i>
</a><a href=https://github.com/apache/kafka target=_blank rel=noopener aria-label=GitHub class=td-footer__social-link><i class="fab fa-github"></i>
diff --git a/0102/getting-started/quickstart/index.html b/0102/getting-started/quickstart/index.html
index 8c12f8901b..bbce1ac65a 100644
--- a/0102/getting-started/quickstart/index.html
+++ b/0102/getting-started/quickstart/index.html
@@ -193,7 +193,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+</code></pre><p>Here, the first column is the Kafka message key in <code>java.lang.String</code> format, and the second column is the message value in <code>java.lang.Long</code> format. Note that the output is actually a continuous stream of updates, where each data record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous on [...]
+<img src=/0102/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code>KTable</code> are bein [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Use Cases</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/0102/getting-started/ecosystem/ rel=next aria-label="Next: Ecosystem"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Ecosystem
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/0110/_print/index.html b/0110/_print/index.html
index 821838afbc..659cb11c57 100644
--- a/0110/_print/index.html
+++ b/0110/_print/index.html
@@ -1848,7 +1848,13 @@ If you want to enable SSL for inter-broker communication, add the following to t
}
]
}
-</code></pre><p>Connectors and their tasks publish status updates to a shared topic (configured with <code>status.storage.topic</code>) which all workers in the cluster monitor. Because the workers consume this topic asynchronously, there is typically a (short) delay before a state change is visible through the status API. The following states are possible for a connector or one of its tasks:</p><ul><li><strong>UNASSIGNED:</strong> The connector/task has not yet been assigned to a worker [...]
+</code></pre><p>Connectors and their tasks publish status updates to a shared topic (configured with <code>status.storage.topic</code>) which all workers in the cluster monitor. Because the workers consume this topic asynchronously, there is typically a (short) delay before a state change is visible through the status API. The following states are possible for a connector or one of its tasks:</p><ul><li><strong>UNASSIGNED:</strong> The connector/task has not yet been assigned to a worker [...]
+<img src=/0110/images/icons/documentation--white.png>
+Developer manual </a><a href=/0110/documentation/streams/tutorial><img src=/0110/images/icons/tutorials.png>
+<img src=/0110/images/icons/tutorials--white.png>
+Tutorials </a><a href=/0110/documentation/streams/core-concepts><img src=/0110/images/icons/architecture.png>
+<img src=/0110/images/icons/architecture--white.png>
+Concepts</a></p><h2 id=hello-kafka-streams>Hello Kafka Streams<a class=td-heading-self-link href=#hello-kafka-streams aria-label="Heading self-link"></a></h2><p>The code example below implements a WordCount application that is elastic, highly scalable, fault-tolerant, stateful, and ready to run in production at large scale</p><ul class="nav nav-tabs" id=tabs-0 role=tablist><li class=nav-item><button class="nav-link active" id=tabs-0-00-tab data-bs-toggle=tab data-bs-target=#tabs-0-00 rol [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.KafkaStreams</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.StreamsConfig</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.kstream.KStream</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
@@ -2088,7 +2094,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/0110/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <cod [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=0.11.0.2 \
diff --git a/0110/streams/_print/index.html b/0110/streams/_print/index.html
index da7cb6d0de..63bea5e51a 100644
--- a/0110/streams/_print/index.html
+++ b/0110/streams/_print/index.html
@@ -4,7 +4,13 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/0110/streams/>Return to the regular view of this page</a>.</p></div><h1 class=title>Kafka Streams</h1><ul><li>1: <a href=#pg-542e63d10060f97632b83501d96b983d>Introduction</a></li><li>2: <a href=#pg-89196d4483c0d610d2618b0433ce7901>Quick Start</a></li><li>3: <a href=#pg-249854baba8b3d63d0ee2ec703e4d33d>Write a streams app</a></li><li>4: <a href=#pg-c9ebb9c8c858566cf46639f8c49a6eee>Core Concepts</a></li><li>5: <a [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/0110/streams/>Return to the regular view of this page</a>.</p></div><h1 class=title>Kafka Streams</h1><ul><li>1: <a href=#pg-542e63d10060f97632b83501d96b983d>Introduction</a></li><li>2: <a href=#pg-89196d4483c0d610d2618b0433ce7901>Quick Start</a></li><li>3: <a href=#pg-249854baba8b3d63d0ee2ec703e4d33d>Write a streams app</a></li><li>4: <a href=#pg-c9ebb9c8c858566cf46639f8c49a6eee>Core Concepts</a></li><li>5: <a [...]
+<img src=/0110/images/icons/documentation--white.png>
+Developer manual </a><a href=/0110/documentation/streams/tutorial><img src=/0110/images/icons/tutorials.png>
+<img src=/0110/images/icons/tutorials--white.png>
+Tutorials </a><a href=/0110/documentation/streams/core-concepts><img src=/0110/images/icons/architecture.png>
+<img src=/0110/images/icons/architecture--white.png>
+Concepts</a></p><h2 id=hello-kafka-streams>Hello Kafka Streams<a class=td-heading-self-link href=#hello-kafka-streams aria-label="Heading self-link"></a></h2><p>The code example below implements a WordCount application that is elastic, highly scalable, fault-tolerant, stateful, and ready to run in production at large scale</p><ul class="nav nav-tabs" id=tabs-0 role=tablist><li class=nav-item><button class="nav-link active" id=tabs-0-00-tab data-bs-toggle=tab data-bs-target=#tabs-0-00 rol [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.KafkaStreams</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.StreamsConfig</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.kstream.KStream</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
@@ -244,7 +250,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/0110/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <cod [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=0.11.0.2 \
diff --git a/0110/streams/introduction/index.html b/0110/streams/introduction/index.html
index 683e1f555c..5e39e69cee 100644
--- a/0110/streams/introduction/index.html
+++ b/0110/streams/introduction/index.html
@@ -60,7 +60,13 @@
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/0110/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><a href=#kafka-streams-api>Kafka Streams API</a><ul><li><a href=#the-easiest-way-to-write-mission-critical-real-time-applications-and-microservices-with-all-the-benefits-of-kafkas-server-side-cluster-technology>The easiest way to write mission-critical real-time applicati [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/0110/>AK 0.11.0.X</a></li><li class=breadcrumb-item><a href=/0110/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/0110/>AK 0.11.0.X</a></li><li class=breadcrumb-item><a href=/0110/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags [...]
+<img src=/0110/images/icons/documentation--white.png>
+Developer manual </a><a href=/0110/documentation/streams/tutorial><img src=/0110/images/icons/tutorials.png>
+<img src=/0110/images/icons/tutorials--white.png>
+Tutorials </a><a href=/0110/documentation/streams/core-concepts><img src=/0110/images/icons/architecture.png>
+<img src=/0110/images/icons/architecture--white.png>
+Concepts</a></p><h2 id=hello-kafka-streams>Hello Kafka Streams<a class=td-heading-self-link href=#hello-kafka-streams aria-label="Heading self-link"></a></h2><p>The code example below implements a WordCount application that is elastic, highly scalable, fault-tolerant, stateful, and ready to run in production at large scale</p><ul class="nav nav-tabs" id=tabs-0 role=tablist><li class=nav-item><button class="nav-link active" id=tabs-0-00-tab data-bs-toggle=tab data-bs-target=#tabs-0-00 rol [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.KafkaStreams</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.StreamsConfig</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>import</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>org.apache.kafka.streams.kstream.KStream</span><span style=color:#000;font-weight:700>;</span><span style=color:#f8f8f8;text-decoration:underline>
diff --git a/0110/streams/quickstart/index.html b/0110/streams/quickstart/index.html
index 5ae59e0abf..9d2c794ca0 100644
--- a/0110/streams/quickstart/index.html
+++ b/0110/streams/quickstart/index.html
@@ -183,7 +183,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/0110/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <cod [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/0110/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/10/_print/index.html b/10/_print/index.html
index 68bfea054e..bcd0e037fc 100644
--- a/10/_print/index.html
+++ b/10/_print/index.html
@@ -2311,7 +2311,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/10/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=1.0.2 \
@@ -2996,7 +2997,7 @@ KStream<String, String> rekeyed = stream.selectKey(
// Also, a variant of `toStream` exists that allows you
// to select a new key for the resulting stream.
KStream<byte[], String> stream = table.toStream();
-</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
+</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
// whatever may be stored in the record keys.
KStream<String, String> textLines = ...;
@@ -3567,7 +3568,7 @@ KStream<String, String> joined = left.leftJoin(right,
</code></pre><p>Detailed behavior:</p><ul><li><p>The join is indirectly <em>key-based</em> , i.e. with the join predicate <code>KeyValueMapper#apply(leftRecord.key, leftRecord.value) == rightRecord.key</code>.</p></li><li><p>The join will be triggered under the conditions listed below whenever new input is received. When it is triggered, the user-supplied <code>ValueJoiner</code> will be called to produce join output records.</p></li></ul><blockquote><pre><code>* Only input records for t [...]
* Input records for the stream with a `null` key or a `null` value are ignored and do not trigger the join.
* Input records for the table with a `null` value are interpreted as _tombstones_ , which indicate the deletion of a record key from the table. Tombstones do not trigger the join.
-</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
+</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
import org.apache.kafka.streams.kstream.TimeWindows;
// A tumbling time window with a size of 5 minutes (and, by definition, an implicit
@@ -3585,12 +3586,12 @@ import org.apache.kafka.streams.kstream.TimeWindows;
long windowSizeMs = TimeUnit.MINUTES.toMillis(5); // 5 * 60 * 1000L
long advanceMs = TimeUnit.MINUTES.toMillis(1); // 1 * 60 * 1000L
TimeWindows.of(windowSizeMs).advanceBy(advanceMs);
-</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img alt=../../../images/streams-time-windows-hopping.png src=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
+</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img src=../../../images/streams-time-windows-hopping.png alt=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
import org.apache.kafka.streams.kstream.SessionWindows;
// A session window with an inactivity gap of 5 minutes.
SessionWindows.with(TimeUnit.MINUTES.toMillis(5));
-</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
+</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
public class PopularPageEmailAlert implements Processor<PageId, Long> {
private final String emailAddress;
@@ -3801,9 +3802,9 @@ userCountByRegion.to("RegionCountsTopic", Produced.valueSerde(Serdes.L
* [Documentation](/documentation)
* [Kafka Streams](/documentation/streams)
* [Developer Guide](/documentation/streams/developer-guide/)
-</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>9.7.6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, [...]
+</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>9.7.6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, [...]
An application instance can query the locally managed portion of the state and directly query its own local state stores. You can use the corresponding local data in other parts of your application code, as long as it doesn’t require calling the Kafka Streams API. Querying state stores is always read-only to guarantee that the underlying state stores will never be mutated out-of-band (e.g., you cannot add new entries). State stores should only be mutated by the corresponding proces [...]
-Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
+Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
StreamsBuilder builder = ...;
KStream<String, String> textLines = ...;
@@ -3952,7 +3953,7 @@ streams.start();
MyReadableCustomStore<String,String> store = streams.store("the-custom-store", new MyCustomStoreType<String,String>());
// Query the store
String value = store.read("key");
-</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
+</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
// Set the unique RPC endpoint of this application instance through which it
// can be interactively queried. In a real application, the value would most
// probably not be hardcoded but derived dynamically.
@@ -4032,7 +4033,7 @@ streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 10 * 10
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></blockquote><p>The effect of these two configurations is described in the figure below. The records are shown using 4 keys: blue, red, yellow, and green. Assume the cache has space for only 3 keys.</p><ul><li><p>When the cache is disabled (a), all of the input records will be output.</p></li><li><p>When the cache is enabled (b):</p></li></ul><blockquote><pre><code>* Most records are output at the end of commit i [...]
* Some records are output because of cache pressure (i.e. before the end of a commit interval). For example, see the red record before `t2`. With smaller cache sizes we expect cache pressure to be the primary factor that dictates when records are output. With large cache sizes, the commit interval will be the primary factor.
* The total number of records output has been reduced from 15 to 8.
-</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img alt=../../../images/streams-cache-and-commit-interval.png src=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
+</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img src=../../../images/streams-cache-and-commit-interval.png alt=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
@@ -4041,7 +4042,7 @@ streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></bl
</code></pre><h1 id=other-memory-usage>Other memory usage<a class=td-heading-self-link href=#other-memory-usage aria-label="Heading self-link"></a></h1><p>There are other modules inside Apache Kafka that allocate memory during runtime. They include the following:</p><ul><li>Producer buffering, managed by the producer config <code>buffer.memory</code>.</li><li>Consumer buffering, currently not strictly managed, but can be indirectly controlled by fetch size, i.e., <code>fetch.max.bytes</c [...]
# from the fat JAR named `path-to-app-fatjar.jar`.
$ java -cp path-to-app-fatjar.jar com.example.MyStreamsApp
-</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
+</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
Topics that are specified via source processors in the application’s topology; e.g. via <code>StreamsBuilder#stream()</code>, <code>StreamsBuilder#table()</code> and <code>Topology#addSource()</code>.
Output topics
Topics that are specified via sink processors in the application’s topology; e.g. via <code>KStream#to()</code>, <code>KTable.to()</code> and <code>Topology#addSink()</code>.
diff --git a/10/streams/_print/index.html b/10/streams/_print/index.html
index 66f82e02a5..aee54ce1d0 100644
--- a/10/streams/_print/index.html
+++ b/10/streams/_print/index.html
@@ -257,7 +257,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/10/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=1.0.2 \
@@ -942,7 +943,7 @@ KStream<String, String> rekeyed = stream.selectKey(
// Also, a variant of `toStream` exists that allows you
// to select a new key for the resulting stream.
KStream<byte[], String> stream = table.toStream();
-</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
+</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
// whatever may be stored in the record keys.
KStream<String, String> textLines = ...;
@@ -1513,7 +1514,7 @@ KStream<String, String> joined = left.leftJoin(right,
</code></pre><p>Detailed behavior:</p><ul><li><p>The join is indirectly <em>key-based</em> , i.e. with the join predicate <code>KeyValueMapper#apply(leftRecord.key, leftRecord.value) == rightRecord.key</code>.</p></li><li><p>The join will be triggered under the conditions listed below whenever new input is received. When it is triggered, the user-supplied <code>ValueJoiner</code> will be called to produce join output records.</p></li></ul><blockquote><pre><code>* Only input records for t [...]
* Input records for the stream with a `null` key or a `null` value are ignored and do not trigger the join.
* Input records for the table with a `null` value are interpreted as _tombstones_ , which indicate the deletion of a record key from the table. Tombstones do not trigger the join.
-</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
+</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
import org.apache.kafka.streams.kstream.TimeWindows;
// A tumbling time window with a size of 5 minutes (and, by definition, an implicit
@@ -1531,12 +1532,12 @@ import org.apache.kafka.streams.kstream.TimeWindows;
long windowSizeMs = TimeUnit.MINUTES.toMillis(5); // 5 * 60 * 1000L
long advanceMs = TimeUnit.MINUTES.toMillis(1); // 1 * 60 * 1000L
TimeWindows.of(windowSizeMs).advanceBy(advanceMs);
-</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img alt=../../../images/streams-time-windows-hopping.png src=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
+</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img src=../../../images/streams-time-windows-hopping.png alt=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
import org.apache.kafka.streams.kstream.SessionWindows;
// A session window with an inactivity gap of 5 minutes.
SessionWindows.with(TimeUnit.MINUTES.toMillis(5));
-</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
+</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
public class PopularPageEmailAlert implements Processor<PageId, Long> {
private final String emailAddress;
@@ -1747,9 +1748,9 @@ userCountByRegion.to("RegionCountsTopic", Produced.valueSerde(Serdes.L
* [Documentation](/documentation)
* [Kafka Streams](/documentation/streams)
* [Developer Guide](/documentation/streams/developer-guide/)
-</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>7.6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, a [...]
+</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>7.6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, a [...]
An application instance can query the locally managed portion of the state and directly query its own local state stores. You can use the corresponding local data in other parts of your application code, as long as it doesn’t require calling the Kafka Streams API. Querying state stores is always read-only to guarantee that the underlying state stores will never be mutated out-of-band (e.g., you cannot add new entries). State stores should only be mutated by the corresponding proces [...]
-Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
+Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
StreamsBuilder builder = ...;
KStream<String, String> textLines = ...;
@@ -1898,7 +1899,7 @@ streams.start();
MyReadableCustomStore<String,String> store = streams.store("the-custom-store", new MyCustomStoreType<String,String>());
// Query the store
String value = store.read("key");
-</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
+</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
// Set the unique RPC endpoint of this application instance through which it
// can be interactively queried. In a real application, the value would most
// probably not be hardcoded but derived dynamically.
@@ -1978,7 +1979,7 @@ streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 10 * 10
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></blockquote><p>The effect of these two configurations is described in the figure below. The records are shown using 4 keys: blue, red, yellow, and green. Assume the cache has space for only 3 keys.</p><ul><li><p>When the cache is disabled (a), all of the input records will be output.</p></li><li><p>When the cache is enabled (b):</p></li></ul><blockquote><pre><code>* Most records are output at the end of commit i [...]
* Some records are output because of cache pressure (i.e. before the end of a commit interval). For example, see the red record before `t2`. With smaller cache sizes we expect cache pressure to be the primary factor that dictates when records are output. With large cache sizes, the commit interval will be the primary factor.
* The total number of records output has been reduced from 15 to 8.
-</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img alt=../../../images/streams-cache-and-commit-interval.png src=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
+</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img src=../../../images/streams-cache-and-commit-interval.png alt=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
@@ -1987,7 +1988,7 @@ streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></bl
</code></pre><h1 id=other-memory-usage>Other memory usage<a class=td-heading-self-link href=#other-memory-usage aria-label="Heading self-link"></a></h1><p>There are other modules inside Apache Kafka that allocate memory during runtime. They include the following:</p><ul><li>Producer buffering, managed by the producer config <code>buffer.memory</code>.</li><li>Consumer buffering, currently not strictly managed, but can be indirectly controlled by fetch size, i.e., <code>fetch.max.bytes</c [...]
# from the fat JAR named `path-to-app-fatjar.jar`.
$ java -cp path-to-app-fatjar.jar com.example.MyStreamsApp
-</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
+</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
Topics that are specified via source processors in the application’s topology; e.g. via <code>StreamsBuilder#stream()</code>, <code>StreamsBuilder#table()</code> and <code>Topology#addSource()</code>.
Output topics
Topics that are specified via sink processors in the application’s topology; e.g. via <code>KStream#to()</code>, <code>KTable.to()</code> and <code>Topology#addSink()</code>.
diff --git a/10/streams/developer-guide/_print/index.html b/10/streams/developer-guide/_print/index.html
index 42a7b34c95..7201e7856e 100644
--- a/10/streams/developer-guide/_print/index.html
+++ b/10/streams/developer-guide/_print/index.html
@@ -415,7 +415,7 @@ KStream<String, String> rekeyed = stream.selectKey(
// Also, a variant of `toStream` exists that allows you
// to select a new key for the resulting stream.
KStream<byte[], String> stream = table.toStream();
-</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
+</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
// whatever may be stored in the record keys.
KStream<String, String> textLines = ...;
@@ -986,7 +986,7 @@ KStream<String, String> joined = left.leftJoin(right,
</code></pre><p>Detailed behavior:</p><ul><li><p>The join is indirectly <em>key-based</em> , i.e. with the join predicate <code>KeyValueMapper#apply(leftRecord.key, leftRecord.value) == rightRecord.key</code>.</p></li><li><p>The join will be triggered under the conditions listed below whenever new input is received. When it is triggered, the user-supplied <code>ValueJoiner</code> will be called to produce join output records.</p></li></ul><blockquote><pre><code>* Only input records for t [...]
* Input records for the stream with a `null` key or a `null` value are ignored and do not trigger the join.
* Input records for the table with a `null` value are interpreted as _tombstones_ , which indicate the deletion of a record key from the table. Tombstones do not trigger the join.
-</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
+</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
import org.apache.kafka.streams.kstream.TimeWindows;
// A tumbling time window with a size of 5 minutes (and, by definition, an implicit
@@ -1004,12 +1004,12 @@ import org.apache.kafka.streams.kstream.TimeWindows;
long windowSizeMs = TimeUnit.MINUTES.toMillis(5); // 5 * 60 * 1000L
long advanceMs = TimeUnit.MINUTES.toMillis(1); // 1 * 60 * 1000L
TimeWindows.of(windowSizeMs).advanceBy(advanceMs);
-</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img alt=../../../images/streams-time-windows-hopping.png src=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
+</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img src=../../../images/streams-time-windows-hopping.png alt=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
import org.apache.kafka.streams.kstream.SessionWindows;
// A session window with an inactivity gap of 5 minutes.
SessionWindows.with(TimeUnit.MINUTES.toMillis(5));
-</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
+</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
public class PopularPageEmailAlert implements Processor<PageId, Long> {
private final String emailAddress;
@@ -1220,9 +1220,9 @@ userCountByRegion.to("RegionCountsTopic", Produced.valueSerde(Serdes.L
* [Documentation](/documentation)
* [Kafka Streams](/documentation/streams)
* [Developer Guide](/documentation/streams/developer-guide/)
-</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, and [...]
+</code></pre></div><div class=td-content style=page-break-before:always><h1 id=pg-b6291b7120cd0489359c4bcf51c09a91>6 - Interactive Queries</h1><p>Interactive queries allow you to leverage the state of your application from outside your application. The Kafka Streams API enables your applications to be queryable.</p><p>The full state of your application is typically <a href=../architecture.html#streams-architecture-state>split across many distributed instances of your application</a>, and [...]
An application instance can query the locally managed portion of the state and directly query its own local state stores. You can use the corresponding local data in other parts of your application code, as long as it doesn’t require calling the Kafka Streams API. Querying state stores is always read-only to guarantee that the underlying state stores will never be mutated out-of-band (e.g., you cannot add new entries). State stores should only be mutated by the corresponding proces [...]
-Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
+Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
StreamsBuilder builder = ...;
KStream<String, String> textLines = ...;
@@ -1371,7 +1371,7 @@ streams.start();
MyReadableCustomStore<String,String> store = streams.store("the-custom-store", new MyCustomStoreType<String,String>());
// Query the store
String value = store.read("key");
-</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
+</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
// Set the unique RPC endpoint of this application instance through which it
// can be interactively queried. In a real application, the value would most
// probably not be hardcoded but derived dynamically.
@@ -1451,7 +1451,7 @@ streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 10 * 10
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></blockquote><p>The effect of these two configurations is described in the figure below. The records are shown using 4 keys: blue, red, yellow, and green. Assume the cache has space for only 3 keys.</p><ul><li><p>When the cache is disabled (a), all of the input records will be output.</p></li><li><p>When the cache is enabled (b):</p></li></ul><blockquote><pre><code>* Most records are output at the end of commit i [...]
* Some records are output because of cache pressure (i.e. before the end of a commit interval). For example, see the red record before `t2`. With smaller cache sizes we expect cache pressure to be the primary factor that dictates when records are output. With large cache sizes, the commit interval will be the primary factor.
* The total number of records output has been reduced from 15 to 8.
-</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img alt=../../../images/streams-cache-and-commit-interval.png src=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
+</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img src=../../../images/streams-cache-and-commit-interval.png alt=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
@@ -1460,7 +1460,7 @@ streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></bl
</code></pre><h1 id=other-memory-usage>Other memory usage<a class=td-heading-self-link href=#other-memory-usage aria-label="Heading self-link"></a></h1><p>There are other modules inside Apache Kafka that allocate memory during runtime. They include the following:</p><ul><li>Producer buffering, managed by the producer config <code>buffer.memory</code>.</li><li>Consumer buffering, currently not strictly managed, but can be indirectly controlled by fetch size, i.e., <code>fetch.max.bytes</c [...]
# from the fat JAR named `path-to-app-fatjar.jar`.
$ java -cp path-to-app-fatjar.jar com.example.MyStreamsApp
-</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
+</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
Topics that are specified via source processors in the application’s topology; e.g. via <code>StreamsBuilder#stream()</code>, <code>StreamsBuilder#table()</code> and <code>Topology#addSource()</code>.
Output topics
Topics that are specified via sink processors in the application’s topology; e.g. via <code>KStream#to()</code>, <code>KTable.to()</code> and <code>Topology#addSink()</code>.
diff --git a/10/streams/developer-guide/dsl-api/index.html b/10/streams/developer-guide/dsl-api/index.html
index fc4041d11e..42c48ab9a8 100644
--- a/10/streams/developer-guide/dsl-api/index.html
+++ b/10/streams/developer-guide/dsl-api/index.html
@@ -316,7 +316,7 @@ KStream<String, String> rekeyed = stream.selectKey(
// Also, a variant of `toStream` exists that allows you
// to select a new key for the resulting stream.
KStream<byte[], String> stream = table.toStream();
-</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
+</code></pre></td></tr></table><h2 id=stateful-transformations>Stateful transformations<a class=td-heading-self-link href=#stateful-transformations aria-label="Heading self-link"></a></h2><p>Stateful transformations depend on state for processing inputs and producing outputs and require a <a href=../architecture.html#streams-architecture-state>state store</a> associated with the stream processor. For example, in aggregating operations, a windowing state store is used to collect the lates [...]
// whatever may be stored in the record keys.
KStream<String, String> textLines = ...;
@@ -887,7 +887,7 @@ KStream<String, String> joined = left.leftJoin(right,
</code></pre><p>Detailed behavior:</p><ul><li><p>The join is indirectly <em>key-based</em> , i.e. with the join predicate <code>KeyValueMapper#apply(leftRecord.key, leftRecord.value) == rightRecord.key</code>.</p></li><li><p>The join will be triggered under the conditions listed below whenever new input is received. When it is triggered, the user-supplied <code>ValueJoiner</code> will be called to produce join output records.</p></li></ul><blockquote><pre><code>* Only input records for t [...]
* Input records for the stream with a `null` key or a `null` value are ignored and do not trigger the join.
* Input records for the table with a `null` value are interpreted as _tombstones_ , which indicate the deletion of a record key from the table. Tombstones do not trigger the join.
-</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
+</code></pre></blockquote><ul><li>For each input record on the left side that does not have any match on the right side, the <code>ValueJoiner</code> will be called with <code>ValueJoiner#apply(leftRecord.value, null)</code>.</li></ul></td></tr></table><p><strong>Semantics of stream-table joins:</strong> The join semantics are identical to KStream-KTable joins. The only difference is that, for KStream-GlobalKTable joins, the left input record is first “mapped” with a user-sup [...]
import org.apache.kafka.streams.kstream.TimeWindows;
// A tumbling time window with a size of 5 minutes (and, by definition, an implicit
@@ -905,12 +905,12 @@ import org.apache.kafka.streams.kstream.TimeWindows;
long windowSizeMs = TimeUnit.MINUTES.toMillis(5); // 5 * 60 * 1000L
long advanceMs = TimeUnit.MINUTES.toMillis(1); // 1 * 60 * 1000L
TimeWindows.of(windowSizeMs).advanceBy(advanceMs);
-</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img alt=../../../images/streams-time-windows-hopping.png src=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
+</code></pre><p><a href=../../../images/streams-time-windows-hopping.png><img src=../../../images/streams-time-windows-hopping.png alt=../../../images/streams-time-windows-hopping.png></a></p><p>This diagram shows windowing a stream of data records with hopping windows. In this diagram the time numbers represent minutes; e.g. t=5 means “at the five-minute mark”. In reality, the unit of time in Kafka Streams is milliseconds, which means the time numbers would need to be multip [...]
import org.apache.kafka.streams.kstream.SessionWindows;
// A session window with an inactivity gap of 5 minutes.
SessionWindows.with(TimeUnit.MINUTES.toMillis(5));
-</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
+</code></pre><p>Given the previous session window example, here’s what would happen on an input stream of six records. When the first three records arrive (upper part of in the diagram below), we’d have three sessions (see lower part) after having processed those records: two for the green record key, with one session starting and ending at the 0-minute mark (only due to the illustration it looks as if the session goes from 0 to 1), and another starting and ending at the 6-mi [...]
public class PopularPageEmailAlert implements Processor<PageId, Long> {
private final String emailAddress;
diff --git a/10/streams/developer-guide/interactive-queries/index.html b/10/streams/developer-guide/interactive-queries/index.html
index 218e84862b..45ef5ac985 100644
--- a/10/streams/developer-guide/interactive-queries/index.html
+++ b/10/streams/developer-guide/interactive-queries/index.html
@@ -83,9 +83,9 @@ Local state An application instance can query the locally managed portion of the
<a href="https://github.com/apache/kafka-site//issues/new?title=Interactive%20Queries" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/10/streams/developer-guide/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><a href=#querying-local-state-stores-for-an-app-instance>Querying local state stores for an app instance</a><ul><li><a href=#querying-local-key-value-stores>Querying local key-value stores</a></li><li><a href=#querying-local-window-stores>Querying local wind [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/10/>AK 1.0.X</a></li><li class=breadcrumb-item><a href=/10/streams/>Kafka Streams</a></li><li class=breadcrumb-item><a href=/10/streams/developer-guide/>Streams Developer Guide</a></li><li class="breadcrumb-item active" aria-current=page>Interactive Queries</li></ol></nav><div class=td-content><h1>Interactive Queries</h1><header c [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/10/>AK 1.0.X</a></li><li class=breadcrumb-item><a href=/10/streams/>Kafka Streams</a></li><li class=breadcrumb-item><a href=/10/streams/developer-guide/>Streams Developer Guide</a></li><li class="breadcrumb-item active" aria-current=page>Interactive Queries</li></ol></nav><div class=td-content><h1>Interactive Queries</h1><header c [...]
An application instance can query the locally managed portion of the state and directly query its own local state stores. You can use the corresponding local data in other parts of your application code, as long as it doesn’t require calling the Kafka Streams API. Querying state stores is always read-only to guarantee that the underlying state stores will never be mutated out-of-band (e.g., you cannot add new entries). State stores should only be mutated by the corresponding proces [...]
-Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
+Remote state</p><p>To query the full state of your application, you must connect the various fragments of the state, including:</p><ul><li>query local state stores</li><li>discover all running instances of your application in the network and their state stores</li><li>communicate with these instances over the network (e.g., an RPC layer)</li></ul><p>Connecting these fragments enables communication between instances of the same app and communication from other applications for interactive [...]
StreamsBuilder builder = ...;
KStream<String, String> textLines = ...;
@@ -234,7 +234,7 @@ streams.start();
MyReadableCustomStore<String,String> store = streams.store("the-custom-store", new MyCustomStoreType<String,String>());
// Query the store
String value = store.read("key");
-</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
+</code></pre><h1 id=querying-remote-state-stores-for-the-entire-app>Querying remote state stores for the entire app<a class=td-heading-self-link href=#querying-remote-state-stores-for-the-entire-app aria-label="Heading self-link"></a></h1><p>To query remote states for the entire app, you must expose the application’s full state to other applications, including applications that are running on different machines.</p><p>For example, you have a Kafka Streams application that processes [...]
// Set the unique RPC endpoint of this application instance through which it
// can be interactively queried. In a real application, the value would most
// probably not be hardcoded but derived dynamically.
diff --git a/10/streams/developer-guide/memory-mgmt/index.html b/10/streams/developer-guide/memory-mgmt/index.html
index e7caf431e9..fea38c026b 100644
--- a/10/streams/developer-guide/memory-mgmt/index.html
+++ b/10/streams/developer-guide/memory-mgmt/index.html
@@ -93,7 +93,7 @@ streamsConfiguration.put(StreamsConfig.CACHE_MAX_BYTES_BUFFERING_CONFIG, 10 * 10
streamsConfiguration.put(StreamsConfig.COMMIT_INTERVAL_MS_CONFIG, 1000);</p></blockquote><p>The effect of these two configurations is described in the figure below. The records are shown using 4 keys: blue, red, yellow, and green. Assume the cache has space for only 3 keys.</p><ul><li><p>When the cache is disabled (a), all of the input records will be output.</p></li><li><p>When the cache is enabled (b):</p></li></ul><blockquote><pre><code>* Most records are output at the end of commit i [...]
* Some records are output because of cache pressure (i.e. before the end of a commit interval). For example, see the red record before `t2`. With smaller cache sizes we expect cache pressure to be the primary factor that dictates when records are output. With large cache sizes, the commit interval will be the primary factor.
* The total number of records output has been reduced from 15 to 8.
-</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img alt=../../../images/streams-cache-and-commit-interval.png src=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
+</code></pre></blockquote><p><a href=../../../images/streams-cache-and-commit-interval.png><img src=../../../images/streams-cache-and-commit-interval.png alt=../../../images/streams-cache-and-commit-interval.png></a></p><h1 id=record-caches-in-the-processor-api>Record caches in the Processor API<a class=td-heading-self-link href=#record-caches-in-the-processor-api aria-label="Heading self-link"></a></h1><p>You can specify the total memory (RAM) size of the record cache for an instance of [...]
Stores.keyValueStoreBuilder(
Stores.persistentKeyValueStore("Counts"),
Serdes.String(),
diff --git a/10/streams/developer-guide/running-app/index.html b/10/streams/developer-guide/running-app/index.html
index eb90b9097f..925d5dd7a9 100644
--- a/10/streams/developer-guide/running-app/index.html
+++ b/10/streams/developer-guide/running-app/index.html
@@ -82,7 +82,7 @@ For up-to-date documentation, see the
<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/10/>AK 1.0.X</a></li><li class=breadcrumb-item><a href=/10/streams/>Kafka Streams</a></li><li class=breadcrumb-item><a href=/10/streams/developer-guide/>Streams Developer Guide</a></li><li class="breadcrumb-item active" aria-current=page>Running Streams Applications</li></ol></nav><div class=td-content><h1>Running Streams Applicat [...]
# from the fat JAR named `path-to-app-fatjar.jar`.
$ java -cp path-to-app-fatjar.jar com.example.MyStreamsApp
-</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
+</code></pre><p>When you start your application you are launching a Kafka Streams instance of your application. You can run multiple instances of your application. A common scenario is that there are multiple instances of your application running in parallel. For more information, see <a href=../architecture.html#streams-architecture-parallelism-model>Parallelism Model</a>.</p><p>When the application instance starts running, the defined processor topology will be initialized as one or mo [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Memory Management</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/10/streams/developer-guide/manage-topics/ rel=next aria-label="Next: Managing Streams Application Topics"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Managing Streams Application Topics
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/10/streams/quickstart/index.html b/10/streams/quickstart/index.html
index 2b03dc2d38..f765bcae57 100644
--- a/10/streams/quickstart/index.html
+++ b/10/streams/quickstart/index.html
@@ -195,7 +195,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/10/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/10/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/11/_print/index.html b/11/_print/index.html
index 8fb52f99c2..a69abef249 100644
--- a/11/_print/index.html
+++ b/11/_print/index.html
@@ -2497,7 +2497,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/11/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=1.1.0 \
diff --git a/11/streams/_print/index.html b/11/streams/_print/index.html
index 4a79814d47..7a8d96bfd0 100644
--- a/11/streams/_print/index.html
+++ b/11/streams/_print/index.html
@@ -257,7 +257,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/11/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=1.1.0 \
diff --git a/11/streams/quickstart/index.html b/11/streams/quickstart/index.html
index f6eb999f75..9f8f07762f 100644
--- a/11/streams/quickstart/index.html
+++ b/11/streams/quickstart/index.html
@@ -196,7 +196,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/11/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/11/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/20/_print/index.html b/20/_print/index.html
index 4bd201d861..8d6c5630cf 100644
--- a/20/_print/index.html
+++ b/20/_print/index.html
@@ -3085,7 +3085,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/20/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.0.0 \
diff --git a/20/streams/_print/index.html b/20/streams/_print/index.html
index 8f7bac9c60..5a47843c54 100644
--- a/20/streams/_print/index.html
+++ b/20/streams/_print/index.html
@@ -247,7 +247,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/20/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.0.0 \
diff --git a/20/streams/quickstart/index.html b/20/streams/quickstart/index.html
index fbebb2956c..6217f357f9 100644
--- a/20/streams/quickstart/index.html
+++ b/20/streams/quickstart/index.html
@@ -196,7 +196,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/20/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/20/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/21/_print/index.html b/21/_print/index.html
index 8c2d13249a..763cb3f2dc 100644
--- a/21/_print/index.html
+++ b/21/_print/index.html
@@ -3300,7 +3300,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/21/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.1.0 \
diff --git a/21/streams/_print/index.html b/21/streams/_print/index.html
index 8bace1a203..2b6b57f20e 100644
--- a/21/streams/_print/index.html
+++ b/21/streams/_print/index.html
@@ -247,7 +247,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/21/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.1.0 \
diff --git a/21/streams/quickstart/index.html b/21/streams/quickstart/index.html
index 8ccfca1437..a0cbff3196 100644
--- a/21/streams/quickstart/index.html
+++ b/21/streams/quickstart/index.html
@@ -196,7 +196,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/21/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/21/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/22/_print/index.html b/22/_print/index.html
index 3ef846cd1b..192dc3f822 100644
--- a/22/_print/index.html
+++ b/22/_print/index.html
@@ -3449,7 +3449,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/22/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.2.0 \
diff --git a/22/streams/_print/index.html b/22/streams/_print/index.html
index da72140493..b92fe58448 100644
--- a/22/streams/_print/index.html
+++ b/22/streams/_print/index.html
@@ -247,7 +247,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/22/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.2.0 \
diff --git a/22/streams/quickstart/index.html b/22/streams/quickstart/index.html
index 0d6cd6797a..6dba47fd48 100644
--- a/22/streams/quickstart/index.html
+++ b/22/streams/quickstart/index.html
@@ -196,7 +196,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/22/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/22/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/23/_print/index.html b/23/_print/index.html
index a152f1dd18..e60fe442fe 100644
--- a/23/_print/index.html
+++ b/23/_print/index.html
@@ -3636,7 +3636,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/23/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.3.0 \
diff --git a/23/streams/_print/index.html b/23/streams/_print/index.html
index 1187264173..468011cd73 100644
--- a/23/streams/_print/index.html
+++ b/23/streams/_print/index.html
@@ -249,7 +249,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/23/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.3.0 \
diff --git a/23/streams/quickstart/index.html b/23/streams/quickstart/index.html
index 58024897ab..331d5eff71 100644
--- a/23/streams/quickstart/index.html
+++ b/23/streams/quickstart/index.html
@@ -198,7 +198,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/23/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/23/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/24/_print/index.html b/24/_print/index.html
index 13c25159f9..fea3b17f20 100644
--- a/24/_print/index.html
+++ b/24/_print/index.html
@@ -4136,7 +4136,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/24/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.4.1 \
diff --git a/24/streams/_print/index.html b/24/streams/_print/index.html
index c2bf76baf3..55c7063dd4 100644
--- a/24/streams/_print/index.html
+++ b/24/streams/_print/index.html
@@ -249,7 +249,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/24/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.4.1 \
diff --git a/24/streams/quickstart/index.html b/24/streams/quickstart/index.html
index 6ec2eac0f6..898c5bdfd5 100644
--- a/24/streams/quickstart/index.html
+++ b/24/streams/quickstart/index.html
@@ -199,7 +199,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/24/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/24/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/25/_print/index.html b/25/_print/index.html
index 48f098ec19..a0f98053e2 100644
--- a/25/_print/index.html
+++ b/25/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/25/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.5.X</h1><div class=lead>Documentation for AK 2.5.X</div><ul><li>1: <a href=#pg-c2e52c70581081134b2d68867facd10b>Getting Started</a></li><ul><li>1.1: <a href=#pg-1d9ab60897b309c9fcad70a4536bab96>Introduction</a></li><li>1.2: <a href=#pg-a803465b517d17e26300b033fceea787>Use Cases</a></li><li>1.3: <a href=#pg-70ce3d643b88f2b0e1840c76c40 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/25/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.5.X</h1><div class=lead>Documentation for AK 2.5.X</div><ul><li>1: <a href=#pg-c2e52c70581081134b2d68867facd10b>Getting Started</a></li><ul><li>1.1: <a href=#pg-1d9ab60897b309c9fcad70a4536bab96>Introduction</a></li><li>1.2: <a href=#pg-a803465b517d17e26300b033fceea787>Use Cases</a></li><li>1.3: <a href=#pg-70ce3d643b88f2b0e1840c76c40 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.12-2.5.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -3891,7 +3892,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/25/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.5.0 \
diff --git a/25/getting-started/_print/index.html b/25/getting-started/_print/index.html
index 54a6a5e913..eed623b863 100644
--- a/25/getting-started/_print/index.html
+++ b/25/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/25/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-1d9ab60897b309c9fcad70a4536bab96>Introduction</a></li><li>2: <a href=#pg-a803465b517d17e26300b033fceea787>Use Cases</a></li><li>3: <a href=#pg-70ce3d643b88f2 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/25/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-1d9ab60897b309c9fcad70a4536bab96>Introduction</a></li><li>2: <a href=#pg-a803465b517d17e26300b033fceea787>Use Cases</a></li><li>3: <a href=#pg-70ce3d643b88f2 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.12-2.5.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/25/getting-started/introduction/index.html b/25/getting-started/introduction/index.html
index 5c29a3258d..65ccc2a771 100644
--- a/25/getting-started/introduction/index.html
+++ b/25/getting-started/introduction/index.html
@@ -78,7 +78,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/25/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/25/>AK 2.5.X</a></li><li class=breadcrumb-item><a href=/25/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/25/>AK 2.5.X</a></li><li class=breadcrumb-item><a href=/25/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/25/streams/_print/index.html b/25/streams/_print/index.html
index ab5f0bfaa7..ad6c01d8c3 100644
--- a/25/streams/_print/index.html
+++ b/25/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/25/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.5.0 \
diff --git a/25/streams/quickstart/index.html b/25/streams/quickstart/index.html
index 3e6845fc62..0ec1e74b51 100644
--- a/25/streams/quickstart/index.html
+++ b/25/streams/quickstart/index.html
@@ -200,7 +200,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/25/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/25/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/26/_print/index.html b/26/_print/index.html
index 3b1aacd0a0..b5c1106368 100644
--- a/26/_print/index.html
+++ b/26/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/26/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.6.X</h1><div class=lead>Documentation for AK 2.6.X</div><ul><li>1: <a href=#pg-7b9cd04b5315c8e7c9ad45cbdd512fd3>Getting Started</a></li><ul><li>1.1: <a href=#pg-cdddf029832837440263ae9b9f6f47b4>Introduction</a></li><li>1.2: <a href=#pg-357d6451ed3c2fc1b9a6e0585b6976a0>Use Cases</a></li><li>1.3: <a href=#pg-b311f6ce39abaee46980a18f966 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/26/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.6.X</h1><div class=lead>Documentation for AK 2.6.X</div><ul><li>1: <a href=#pg-7b9cd04b5315c8e7c9ad45cbdd512fd3>Getting Started</a></li><ul><li>1.1: <a href=#pg-cdddf029832837440263ae9b9f6f47b4>Introduction</a></li><li>1.2: <a href=#pg-357d6451ed3c2fc1b9a6e0585b6976a0>Use Cases</a></li><li>1.3: <a href=#pg-b311f6ce39abaee46980a18f966 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
> cd kafka_2.13-2.6.3
</code></pre><h2 id=step-2-start-the-server>Step 2: Start the server<a class=td-heading-self-link href=#step-2-start-the-server aria-label="Heading self-link"></a></h2><p>Kafka uses <a href=https://zookeeper.apache.org/ target=_blank rel=noopener>ZooKeeper</a> so you need to first start a ZooKeeper server if you don’t already have one. You can use the convenience script packaged with kafka to get a quick-and-dirty single-node ZooKeeper instance.</p><pre><code>> bin/zookeeper-ser [...]
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
@@ -4747,7 +4748,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/26/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.6.3 \
diff --git a/26/getting-started/_print/index.html b/26/getting-started/_print/index.html
index eb6b04a5fc..150ca43f42 100644
--- a/26/getting-started/_print/index.html
+++ b/26/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/26/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-cdddf029832837440263ae9b9f6f47b4>Introduction</a></li><li>2: <a href=#pg-357d6451ed3c2fc1b9a6e0585b6976a0>Use Cases</a></li><li>3: <a href=#pg-b311f6ce39abae [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/26/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-cdddf029832837440263ae9b9f6f47b4>Introduction</a></li><li>2: <a href=#pg-357d6451ed3c2fc1b9a6e0585b6976a0>Use Cases</a></li><li>3: <a href=#pg-b311f6ce39abae [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
> cd kafka_2.13-2.6.3
</code></pre><h2 id=step-2-start-the-server>Step 2: Start the server<a class=td-heading-self-link href=#step-2-start-the-server aria-label="Heading self-link"></a></h2><p>Kafka uses <a href=https://zookeeper.apache.org/ target=_blank rel=noopener>ZooKeeper</a> so you need to first start a ZooKeeper server if you don’t already have one. You can use the convenience script packaged with kafka to get a quick-and-dirty single-node ZooKeeper instance.</p><pre><code>> bin/zookeeper-ser [...]
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
diff --git a/26/getting-started/introduction/index.html b/26/getting-started/introduction/index.html
index 9151ba7d5b..03753c52cf 100644
--- a/26/getting-started/introduction/index.html
+++ b/26/getting-started/introduction/index.html
@@ -79,7 +79,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/26/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/26/>AK 2.6.X</a></li><li class=breadcrumb-item><a href=/26/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/26/>AK 2.6.X</a></li><li class=breadcrumb-item><a href=/26/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/26/streams/_print/index.html b/26/streams/_print/index.html
index 4917371f34..b7c07ce5ba 100644
--- a/26/streams/_print/index.html
+++ b/26/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/26/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.6.3 \
diff --git a/26/streams/quickstart/index.html b/26/streams/quickstart/index.html
index 0d4ea42294..1bc36e87bc 100644
--- a/26/streams/quickstart/index.html
+++ b/26/streams/quickstart/index.html
@@ -201,7 +201,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/26/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/26/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/27/_print/index.html b/27/_print/index.html
index ceb4e2dc79..1d5fab9554 100644
--- a/27/_print/index.html
+++ b/27/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/27/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.7.X</h1><div class=lead>Documentation for AK 2.7.X</div><ul><li>1: <a href=#pg-513ea43360ed1b4864ebce202345b492>Getting Started</a></li><ul><li>1.1: <a href=#pg-016bb4ea6104802ae48fa5ad5468860a>Introduction</a></li><li>1.2: <a href=#pg-353fe2e9d6a088240938c87e5e71227f>Use Cases</a></li><li>1.3: <a href=#pg-38cba431d717321944fab525ec2 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/27/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.7.X</h1><div class=lead>Documentation for AK 2.7.X</div><ul><li>1: <a href=#pg-513ea43360ed1b4864ebce202345b492>Getting Started</a></li><ul><li>1.1: <a href=#pg-016bb4ea6104802ae48fa5ad5468860a>Introduction</a></li><li>1.2: <a href=#pg-353fe2e9d6a088240938c87e5e71227f>Use Cases</a></li><li>1.3: <a href=#pg-38cba431d717321944fab525ec2 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-2.7.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -4886,7 +4887,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/27/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.7.2 \
@@ -5160,7 +5162,8 @@ summit 1
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-bfc4245c8ff4158c47088a8922f31c60>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-bfc4245c8ff4158c47088a8922f31c60>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/27/getting-started/_print/index.html b/27/getting-started/_print/index.html
index 34f12ed7a5..332049364f 100644
--- a/27/getting-started/_print/index.html
+++ b/27/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/27/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-016bb4ea6104802ae48fa5ad5468860a>Introduction</a></li><li>2: <a href=#pg-353fe2e9d6a088240938c87e5e71227f>Use Cases</a></li><li>3: <a href=#pg-38cba431d71732 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/27/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-016bb4ea6104802ae48fa5ad5468860a>Introduction</a></li><li>2: <a href=#pg-353fe2e9d6a088240938c87e5e71227f>Use Cases</a></li><li>3: <a href=#pg-38cba431d71732 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-2.7.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/27/getting-started/introduction/index.html b/27/getting-started/introduction/index.html
index 1980387aee..8eb6d839f7 100644
--- a/27/getting-started/introduction/index.html
+++ b/27/getting-started/introduction/index.html
@@ -80,7 +80,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/27/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/27/>AK 2.7.X</a></li><li class=breadcrumb-item><a href=/27/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/27/>AK 2.7.X</a></li><li class=breadcrumb-item><a href=/27/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/27/streams/_print/index.html b/27/streams/_print/index.html
index 7b0e76aa7a..715e6ee454 100644
--- a/27/streams/_print/index.html
+++ b/27/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/27/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.7.2 \
@@ -522,7 +523,8 @@ summit 1
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-bfc4245c8ff4158c47088a8922f31c60>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-bfc4245c8ff4158c47088a8922f31c60>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/27/streams/core-concepts/index.html b/27/streams/core-concepts/index.html
index 2ce62344f0..900d331c13 100644
--- a/27/streams/core-concepts/index.html
+++ b/27/streams/core-concepts/index.html
@@ -80,7 +80,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/27/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/27/>AK 2.7.X</a></li><li class=breadcrumb-item><a href=/27/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/27/>AK 2.7.X</a></li><li class=breadcrumb-item><a href=/27/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/27/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/27/streams/quickstart/index.html b/27/streams/quickstart/index.html
index 4f5d65dec2..32eee8a4ed 100644
--- a/27/streams/quickstart/index.html
+++ b/27/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/27/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/27/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/28/_print/index.html b/28/_print/index.html
index 353a33d3a3..30ec65bc4c 100644
--- a/28/_print/index.html
+++ b/28/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/28/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.8.X</h1><div class=lead>Documentation for AK 2.8.X</div><ul><li>1: <a href=#pg-40a8aef9f2c129bcb789246a39eaf469>Getting Started</a></li><ul><li>1.1: <a href=#pg-5beb4677c18ee82268e4d8ac32664be3>Introduction</a></li><li>1.2: <a href=#pg-64f601e05e33db4b78db50cde00868e2>Use Cases</a></li><li>1.3: <a href=#pg-1957032873f9449669d6e539fea [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/28/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 2.8.X</h1><div class=lead>Documentation for AK 2.8.X</div><ul><li>1: <a href=#pg-40a8aef9f2c129bcb789246a39eaf469>Getting Started</a></li><ul><li>1.1: <a href=#pg-5beb4677c18ee82268e4d8ac32664be3>Introduction</a></li><li>1.2: <a href=#pg-64f601e05e33db4b78db50cde00868e2>Use Cases</a></li><li>1.3: <a href=#pg-1957032873f9449669d6e539fea [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-2.8.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -5271,7 +5272,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/28/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.8.2 \
@@ -5549,7 +5551,8 @@ summit 1
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-7329eaabdd028a4c59ba24f1710d40fe>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-7329eaabdd028a4c59ba24f1710d40fe>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/28/getting-started/_print/index.html b/28/getting-started/_print/index.html
index 69c7cc45c6..158c6ea1bb 100644
--- a/28/getting-started/_print/index.html
+++ b/28/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/28/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-5beb4677c18ee82268e4d8ac32664be3>Introduction</a></li><li>2: <a href=#pg-64f601e05e33db4b78db50cde00868e2>Use Cases</a></li><li>3: <a href=#pg-1957032873f944 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/28/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-5beb4677c18ee82268e4d8ac32664be3>Introduction</a></li><li>2: <a href=#pg-64f601e05e33db4b78db50cde00868e2>Use Cases</a></li><li>3: <a href=#pg-1957032873f944 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-2.8.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/28/getting-started/introduction/index.html b/28/getting-started/introduction/index.html
index 5ba1a75e7f..16f9556cdc 100644
--- a/28/getting-started/introduction/index.html
+++ b/28/getting-started/introduction/index.html
@@ -80,7 +80,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/28/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/28/>AK 2.8.X</a></li><li class=breadcrumb-item><a href=/28/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/28/>AK 2.8.X</a></li><li class=breadcrumb-item><a href=/28/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/28/streams/_print/index.html b/28/streams/_print/index.html
index 93132b8682..17ebd9825c 100644
--- a/28/streams/_print/index.html
+++ b/28/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/28/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=2.8.2 \
@@ -526,7 +527,8 @@ summit 1
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-7329eaabdd028a4c59ba24f1710d40fe>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-7329eaabdd028a4c59ba24f1710d40fe>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/28/streams/core-concepts/index.html b/28/streams/core-concepts/index.html
index e1300c68dc..32b2fa7baa 100644
--- a/28/streams/core-concepts/index.html
+++ b/28/streams/core-concepts/index.html
@@ -80,7 +80,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/28/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/28/>AK 2.8.X</a></li><li class=breadcrumb-item><a href=/28/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/28/>AK 2.8.X</a></li><li class=breadcrumb-item><a href=/28/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/28/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/28/streams/quickstart/index.html b/28/streams/quickstart/index.html
index 758ad76fb8..0c60c5ff69 100644
--- a/28/streams/quickstart/index.html
+++ b/28/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/28/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/28/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/30/_print/index.html b/30/_print/index.html
index 77f0072a5d..6579ddb8bb 100644
--- a/30/_print/index.html
+++ b/30/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/30/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.0.X</h1><div class=lead>Documentation for AK 3.0.X</div><ul><li>1: <a href=#pg-087e775506ddaf5732553d7e1b402ca6>Getting Started</a></li><ul><li>1.1: <a href=#pg-4ce12f00fa57fe3782710d658bd3fef1>Introduction</a></li><li>1.2: <a href=#pg-a538d92dbc77c76c19713ac5e8570302>Use Cases</a></li><li>1.3: <a href=#pg-7f0624a48938db0333d9a6da4c2 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/30/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.0.X</h1><div class=lead>Documentation for AK 3.0.X</div><ul><li>1: <a href=#pg-087e775506ddaf5732553d7e1b402ca6>Getting Started</a></li><ul><li>1.1: <a href=#pg-4ce12f00fa57fe3782710d658bd3fef1>Introduction</a></li><li>1.2: <a href=#pg-a538d92dbc77c76c19713ac5e8570302>Use Cases</a></li><li>1.3: <a href=#pg-7f0624a48938db0333d9a6da4c2 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.0.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -5356,7 +5357,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/30/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.0.0 \
@@ -5634,7 +5636,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-2d586d3de98da02074f67f62c816747a>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-2d586d3de98da02074f67f62c816747a>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/30/getting-started/_print/index.html b/30/getting-started/_print/index.html
index 520fce25e5..328c86cbce 100644
--- a/30/getting-started/_print/index.html
+++ b/30/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/30/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-4ce12f00fa57fe3782710d658bd3fef1>Introduction</a></li><li>2: <a href=#pg-a538d92dbc77c76c19713ac5e8570302>Use Cases</a></li><li>3: <a href=#pg-7f0624a48938db [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/30/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-4ce12f00fa57fe3782710d658bd3fef1>Introduction</a></li><li>2: <a href=#pg-a538d92dbc77c76c19713ac5e8570302>Use Cases</a></li><li>3: <a href=#pg-7f0624a48938db [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.0.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/30/getting-started/introduction/index.html b/30/getting-started/introduction/index.html
index 14e8324c2e..feb48ec90d 100644
--- a/30/getting-started/introduction/index.html
+++ b/30/getting-started/introduction/index.html
@@ -80,7 +80,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/30/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/30/>AK 3.0.X</a></li><li class=breadcrumb-item><a href=/30/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/30/>AK 3.0.X</a></li><li class=breadcrumb-item><a href=/30/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/30/streams/_print/index.html b/30/streams/_print/index.html
index db93011dca..8714532dbc 100644
--- a/30/streams/_print/index.html
+++ b/30/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/30/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.0.0 \
@@ -526,7 +527,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-2d586d3de98da02074f67f62c816747a>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-2d586d3de98da02074f67f62c816747a>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/30/streams/core-concepts/index.html b/30/streams/core-concepts/index.html
index d17e206e98..8849da860e 100644
--- a/30/streams/core-concepts/index.html
+++ b/30/streams/core-concepts/index.html
@@ -80,7 +80,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/30/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/30/>AK 3.0.X</a></li><li class=breadcrumb-item><a href=/30/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/30/>AK 3.0.X</a></li><li class=breadcrumb-item><a href=/30/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/30/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/30/streams/quickstart/index.html b/30/streams/quickstart/index.html
index 4f83a05520..de6d107322 100644
--- a/30/streams/quickstart/index.html
+++ b/30/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/30/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/30/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/31/_print/index.html b/31/_print/index.html
index da50e7c031..8afbe7a5f2 100644
--- a/31/_print/index.html
+++ b/31/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/31/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.1.X</h1><div class=lead>Documentation for AK 3.1.X</div><ul><li>1: <a href=#pg-7570af30ad1bd7f7bfad7908fa9b2420>Getting Started</a></li><ul><li>1.1: <a href=#pg-9f0c62b97801b2e17e01177ac2b57341>Introduction</a></li><li>1.2: <a href=#pg-9c41e13da6f59fe1fc21f6cf84990859>Use Cases</a></li><li>1.3: <a href=#pg-b5a356c1b82ed32f3aae8c4b9fb [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/31/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.1.X</h1><div class=lead>Documentation for AK 3.1.X</div><ul><li>1: <a href=#pg-7570af30ad1bd7f7bfad7908fa9b2420>Getting Started</a></li><ul><li>1.1: <a href=#pg-9f0c62b97801b2e17e01177ac2b57341>Introduction</a></li><li>1.2: <a href=#pg-9c41e13da6f59fe1fc21f6cf84990859>Use Cases</a></li><li>1.3: <a href=#pg-b5a356c1b82ed32f3aae8c4b9fb [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.1.1-SNAPSHOT
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -5426,7 +5427,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/31/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.1.1-SNAPSHOT \
@@ -5704,7 +5706,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-d63e3b0f8d77aa6e3d03797da5ee482e>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-d63e3b0f8d77aa6e3d03797da5ee482e>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/31/getting-started/_print/index.html b/31/getting-started/_print/index.html
index 32cefedc5e..d55c54a0bd 100644
--- a/31/getting-started/_print/index.html
+++ b/31/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/31/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-9f0c62b97801b2e17e01177ac2b57341>Introduction</a></li><li>2: <a href=#pg-9c41e13da6f59fe1fc21f6cf84990859>Use Cases</a></li><li>3: <a href=#pg-b5a356c1b82ed3 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/31/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-9f0c62b97801b2e17e01177ac2b57341>Introduction</a></li><li>2: <a href=#pg-9c41e13da6f59fe1fc21f6cf84990859>Use Cases</a></li><li>3: <a href=#pg-b5a356c1b82ed3 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.1.1-SNAPSHOT
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/31/getting-started/introduction/index.html b/31/getting-started/introduction/index.html
index c4bb603f4e..bd11e38eea 100644
--- a/31/getting-started/introduction/index.html
+++ b/31/getting-started/introduction/index.html
@@ -80,7 +80,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/31/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/31/>AK 3.1.X</a></li><li class=breadcrumb-item><a href=/31/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/31/>AK 3.1.X</a></li><li class=breadcrumb-item><a href=/31/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/31/streams/_print/index.html b/31/streams/_print/index.html
index d3a021ebe3..62809110f4 100644
--- a/31/streams/_print/index.html
+++ b/31/streams/_print/index.html
@@ -248,7 +248,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/31/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.1.1-SNAPSHOT \
@@ -526,7 +527,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-d63e3b0f8d77aa6e3d03797da5ee482e>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-d63e3b0f8d77aa6e3d03797da5ee482e>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/31/streams/core-concepts/index.html b/31/streams/core-concepts/index.html
index 0a02f7708e..a8e9b0af25 100644
--- a/31/streams/core-concepts/index.html
+++ b/31/streams/core-concepts/index.html
@@ -80,7 +80,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/31/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/31/>AK 3.1.X</a></li><li class=breadcrumb-item><a href=/31/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/31/>AK 3.1.X</a></li><li class=breadcrumb-item><a href=/31/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/31/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/31/streams/quickstart/index.html b/31/streams/quickstart/index.html
index 9f858a4524..116c56e3d8 100644
--- a/31/streams/quickstart/index.html
+++ b/31/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/31/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/31/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/32/_print/index.html b/32/_print/index.html
index 8f6da5dda1..0930ac7ff1 100644
--- a/32/_print/index.html
+++ b/32/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/32/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.2.X</h1><div class=lead>Documentation for AK 3.2.X</div><ul><li>1: <a href=#pg-ffc40d6ba72d7050b0db6e0a12a1ae15>Getting Started</a></li><ul><li>1.1: <a href=#pg-b224ff35f511ef576ab7eb60ceb781cd>Introduction</a></li><li>1.2: <a href=#pg-6f50c86125325f9b0a1891df93826cab>Use Cases</a></li><li>1.3: <a href=#pg-58b3c876a71b705936eb9fda281 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/32/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.2.X</h1><div class=lead>Documentation for AK 3.2.X</div><ul><li>1: <a href=#pg-ffc40d6ba72d7050b0db6e0a12a1ae15>Getting Started</a></li><ul><li>1.1: <a href=#pg-b224ff35f511ef576ab7eb60ceb781cd>Introduction</a></li><li>1.2: <a href=#pg-6f50c86125325f9b0a1891df93826cab>Use Cases</a></li><li>1.3: <a href=#pg-58b3c876a71b705936eb9fda281 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.2.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
@@ -5567,7 +5568,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/32/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.2.1 \
@@ -5845,7 +5847,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-31a7c7f102876c443515839a3205b641>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-31a7c7f102876c443515839a3205b641>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/32/getting-started/_print/index.html b/32/getting-started/_print/index.html
index f86f5671f9..a479728590 100644
--- a/32/getting-started/_print/index.html
+++ b/32/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/32/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-b224ff35f511ef576ab7eb60ceb781cd>Introduction</a></li><li>2: <a href=#pg-6f50c86125325f9b0a1891df93826cab>Use Cases</a></li><li>3: <a href=#pg-58b3c876a71b70 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/32/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-b224ff35f511ef576ab7eb60ceb781cd>Introduction</a></li><li>2: <a href=#pg-6f50c86125325f9b0a1891df93826cab>Use Cases</a></li><li>3: <a href=#pg-58b3c876a71b70 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.2.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Run the following commands in order to start all services in the correct order:</p><pre><code># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
diff --git a/32/getting-started/introduction/index.html b/32/getting-started/introduction/index.html
index 3f7ba283f1..5f2745195d 100644
--- a/32/getting-started/introduction/index.html
+++ b/32/getting-started/introduction/index.html
@@ -80,7 +80,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/32/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/32/>AK 3.2.X</a></li><li class=breadcrumb-item><a href=/32/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/32/>AK 3.2.X</a></li><li class=breadcrumb-item><a href=/32/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/32/streams/_print/index.html b/32/streams/_print/index.html
index 5e18336715..c8df7ed85c 100644
--- a/32/streams/_print/index.html
+++ b/32/streams/_print/index.html
@@ -254,7 +254,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/32/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.2.1 \
@@ -532,7 +533,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-31a7c7f102876c443515839a3205b641>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-31a7c7f102876c443515839a3205b641>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/32/streams/core-concepts/index.html b/32/streams/core-concepts/index.html
index 0b2e953c8c..3e9cf105f7 100644
--- a/32/streams/core-concepts/index.html
+++ b/32/streams/core-concepts/index.html
@@ -80,7 +80,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/32/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/32/>AK 3.2.X</a></li><li class=breadcrumb-item><a href=/32/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/32/>AK 3.2.X</a></li><li class=breadcrumb-item><a href=/32/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/32/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/32/streams/quickstart/index.html b/32/streams/quickstart/index.html
index 05b238f81c..b6f721bd6f 100644
--- a/32/streams/quickstart/index.html
+++ b/32/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/32/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/32/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/33/_print/index.html b/33/_print/index.html
index 90c151a29c..8f6d5f59f6 100644
--- a/33/_print/index.html
+++ b/33/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/33/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.3.X</h1><div class=lead>Documentation for AK 3.3.X</div><ul><li>1: <a href=#pg-5bbd49d0f5e007ba40a80cfc23e5c8a8>Getting Started</a></li><ul><li>1.1: <a href=#pg-2bb2feb52856c7eaeeba1d3ec2f88c98>Introduction</a></li><li>1.2: <a href=#pg-1d9946d592d5314d78c08a7a3ef2fd29>Use Cases</a></li><li>1.3: <a href=#pg-9958274219a140073ccb6eb0eb1 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/33/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.3.X</h1><div class=lead>Documentation for AK 3.3.X</div><ul><li>1: <a href=#pg-5bbd49d0f5e007ba40a80cfc23e5c8a8>Getting Started</a></li><ul><li>1.1: <a href=#pg-2bb2feb52856c7eaeeba1d3ec2f88c98>Introduction</a></li><li>1.2: <a href=#pg-1d9946d592d5314d78c08a7a3ef2fd29>Use Cases</a></li><li>1.3: <a href=#pg-9958274219a140073ccb6eb0eb1 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.3.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
@@ -5891,7 +5892,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/33/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.3.1 \
@@ -6169,7 +6171,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e2e3123e4459749b9991ffbf297991d9>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e2e3123e4459749b9991ffbf297991d9>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/33/getting-started/_print/index.html b/33/getting-started/_print/index.html
index 4fdfaa9cc4..a75c56c9f7 100644
--- a/33/getting-started/_print/index.html
+++ b/33/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/33/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-2bb2feb52856c7eaeeba1d3ec2f88c98>Introduction</a></li><li>2: <a href=#pg-1d9946d592d5314d78c08a7a3ef2fd29>Use Cases</a></li><li>3: <a href=#pg-9958274219a140 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/33/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-2bb2feb52856c7eaeeba1d3ec2f88c98>Introduction</a></li><li>2: <a href=#pg-1d9946d592d5314d78c08a7a3ef2fd29>Use Cases</a></li><li>3: <a href=#pg-9958274219a140 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.3.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
diff --git a/33/getting-started/introduction/index.html b/33/getting-started/introduction/index.html
index f2ae305e34..f59dd5acab 100644
--- a/33/getting-started/introduction/index.html
+++ b/33/getting-started/introduction/index.html
@@ -82,7 +82,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/33/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/33/>AK 3.3.X</a></li><li class=breadcrumb-item><a href=/33/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/33/>AK 3.3.X</a></li><li class=breadcrumb-item><a href=/33/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/33/streams/_print/index.html b/33/streams/_print/index.html
index 848d4e3daa..bde6b196c6 100644
--- a/33/streams/_print/index.html
+++ b/33/streams/_print/index.html
@@ -252,7 +252,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/33/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.3.1 \
@@ -530,7 +531,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e2e3123e4459749b9991ffbf297991d9>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e2e3123e4459749b9991ffbf297991d9>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/33/streams/core-concepts/index.html b/33/streams/core-concepts/index.html
index a0fb5b843d..0e87491c4a 100644
--- a/33/streams/core-concepts/index.html
+++ b/33/streams/core-concepts/index.html
@@ -82,7 +82,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/33/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/33/>AK 3.3.X</a></li><li class=breadcrumb-item><a href=/33/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/33/>AK 3.3.X</a></li><li class=breadcrumb-item><a href=/33/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/33/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/33/streams/quickstart/index.html b/33/streams/quickstart/index.html
index 04a41e4630..de43f5a764 100644
--- a/33/streams/quickstart/index.html
+++ b/33/streams/quickstart/index.html
@@ -202,7 +202,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/33/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/33/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/34/_print/index.html b/34/_print/index.html
index bd89588da4..9af6c11444 100644
--- a/34/_print/index.html
+++ b/34/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/34/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.4.X</h1><div class=lead>Documentation for AK 3.4.X</div><ul><li>1: <a href=#pg-bf3cf3a7591b9d519c054fa25dbf79af>Getting Started</a></li><ul><li>1.1: <a href=#pg-74688ccbb1d76202a9960bf769e563d0>Introduction</a></li><li>1.2: <a href=#pg-20796ec4dd39e741e52513cb0a6e9811>Use Cases</a></li><li>1.3: <a href=#pg-13d0fb0dd00c032db237ee0da7e [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/34/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.4.X</h1><div class=lead>Documentation for AK 3.4.X</div><ul><li>1: <a href=#pg-bf3cf3a7591b9d519c054fa25dbf79af>Getting Started</a></li><ul><li>1.1: <a href=#pg-74688ccbb1d76202a9960bf769e563d0>Introduction</a></li><li>1.2: <a href=#pg-20796ec4dd39e741e52513cb0a6e9811>Use Cases</a></li><li>1.3: <a href=#pg-13d0fb0dd00c032db237ee0da7e [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.4.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
@@ -6051,7 +6052,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/34/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.4.0 \
@@ -6329,7 +6331,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e4aee450563249eae29555c2b9ba5d4f>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e4aee450563249eae29555c2b9ba5d4f>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/34/getting-started/_print/index.html b/34/getting-started/_print/index.html
index 11741dd42d..9bdd75034c 100644
--- a/34/getting-started/_print/index.html
+++ b/34/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/34/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-74688ccbb1d76202a9960bf769e563d0>Introduction</a></li><li>2: <a href=#pg-20796ec4dd39e741e52513cb0a6e9811>Use Cases</a></li><li>3: <a href=#pg-13d0fb0dd00c03 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/34/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-74688ccbb1d76202a9960bf769e563d0>Introduction</a></li><li>2: <a href=#pg-20796ec4dd39e741e52513cb0a6e9811>Use Cases</a></li><li>3: <a href=#pg-13d0fb0dd00c03 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.4.0
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
diff --git a/34/getting-started/introduction/index.html b/34/getting-started/introduction/index.html
index 6956b4a072..6561927a42 100644
--- a/34/getting-started/introduction/index.html
+++ b/34/getting-started/introduction/index.html
@@ -83,7 +83,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/34/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/34/>AK 3.4.X</a></li><li class=breadcrumb-item><a href=/34/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/34/>AK 3.4.X</a></li><li class=breadcrumb-item><a href=/34/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/34/streams/_print/index.html b/34/streams/_print/index.html
index 0ca33d8401..835e4b2828 100644
--- a/34/streams/_print/index.html
+++ b/34/streams/_print/index.html
@@ -252,7 +252,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/34/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.4.0 \
@@ -530,7 +531,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e4aee450563249eae29555c2b9ba5d4f>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-e4aee450563249eae29555c2b9ba5d4f>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/34/streams/core-concepts/index.html b/34/streams/core-concepts/index.html
index 6177ae7329..ba7a22e4f4 100644
--- a/34/streams/core-concepts/index.html
+++ b/34/streams/core-concepts/index.html
@@ -83,7 +83,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/34/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/34/>AK 3.4.X</a></li><li class=breadcrumb-item><a href=/34/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/34/>AK 3.4.X</a></li><li class=breadcrumb-item><a href=/34/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/34/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/34/streams/quickstart/index.html b/34/streams/quickstart/index.html
index 092880626e..b068bfba04 100644
--- a/34/streams/quickstart/index.html
+++ b/34/streams/quickstart/index.html
@@ -203,7 +203,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/34/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/34/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/35/_print/index.html b/35/_print/index.html
index d0bd957723..057086ccf5 100644
--- a/35/_print/index.html
+++ b/35/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/35/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.5.X</h1><div class=lead>Documentation for AK 3.5.X</div><ul><li>1: <a href=#pg-85c7d5b61eef265917e8c9fa303a890c>Getting Started</a></li><ul><li>1.1: <a href=#pg-96033c73891bdc388ba636f8c6f80e32>Introduction</a></li><li>1.2: <a href=#pg-b30684650ab3013accbaff4710b77af5>Use Cases</a></li><li>1.3: <a href=#pg-15221a992dfe422ac6bbc2c10e1 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/35/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.5.X</h1><div class=lead>Documentation for AK 3.5.X</div><ul><li>1: <a href=#pg-85c7d5b61eef265917e8c9fa303a890c>Getting Started</a></li><ul><li>1.1: <a href=#pg-96033c73891bdc388ba636f8c6f80e32>Introduction</a></li><li>1.2: <a href=#pg-b30684650ab3013accbaff4710b77af5>Use Cases</a></li><li>1.3: <a href=#pg-15221a992dfe422ac6bbc2c10e1 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.5.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
@@ -6224,7 +6225,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/35/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.5.2 \
@@ -6502,7 +6504,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-fcbd56fed4f3a61a15ca5272b93b8adc>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-fcbd56fed4f3a61a15ca5272b93b8adc>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/35/getting-started/_print/index.html b/35/getting-started/_print/index.html
index e2c329beba..66a0944a11 100644
--- a/35/getting-started/_print/index.html
+++ b/35/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/35/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-96033c73891bdc388ba636f8c6f80e32>Introduction</a></li><li>2: <a href=#pg-b30684650ab3013accbaff4710b77af5>Use Cases</a></li><li>3: <a href=#pg-15221a992dfe42 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/35/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-96033c73891bdc388ba636f8c6f80e32>Introduction</a></li><li>2: <a href=#pg-b30684650ab3013accbaff4710b77af5>Use Cases</a></li><li>3: <a href=#pg-15221a992dfe42 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.5.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
diff --git a/35/getting-started/introduction/index.html b/35/getting-started/introduction/index.html
index a217b0d631..75eff5deea 100644
--- a/35/getting-started/introduction/index.html
+++ b/35/getting-started/introduction/index.html
@@ -84,7 +84,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/35/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/35/>AK 3.5.X</a></li><li class=breadcrumb-item><a href=/35/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/35/>AK 3.5.X</a></li><li class=breadcrumb-item><a href=/35/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/35/streams/_print/index.html b/35/streams/_print/index.html
index d059b14ddc..09d5b07ba0 100644
--- a/35/streams/_print/index.html
+++ b/35/streams/_print/index.html
@@ -252,7 +252,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/35/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.5.2 \
@@ -530,7 +531,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-fcbd56fed4f3a61a15ca5272b93b8adc>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-fcbd56fed4f3a61a15ca5272b93b8adc>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/35/streams/core-concepts/index.html b/35/streams/core-concepts/index.html
index 432bffc3e6..a446691795 100644
--- a/35/streams/core-concepts/index.html
+++ b/35/streams/core-concepts/index.html
@@ -84,7 +84,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/35/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/35/>AK 3.5.X</a></li><li class=breadcrumb-item><a href=/35/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/35/>AK 3.5.X</a></li><li class=breadcrumb-item><a href=/35/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/35/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/35/streams/quickstart/index.html b/35/streams/quickstart/index.html
index 9991c87edc..32a2a432b3 100644
--- a/35/streams/quickstart/index.html
+++ b/35/streams/quickstart/index.html
@@ -204,7 +204,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/35/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/35/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/36/_print/index.html b/36/_print/index.html
index 712e3f4c65..4b8c1e99c4 100644
--- a/36/_print/index.html
+++ b/36/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/36/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.6.X</h1><div class=lead>Documentation for AK 3.6.X</div><ul><li>1: <a href=#pg-6a197ab6fc9b0ed90ba645b3dd88616a>Getting Started</a></li><ul><li>1.1: <a href=#pg-356233ad2ba5354191aa17c83f364efc>Introduction</a></li><li>1.2: <a href=#pg-07674ec7b240d9742d9f5a73ad2a1b7e>Use Cases</a></li><li>1.3: <a href=#pg-c34c344cd73aab85575e5776f92 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/36/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.6.X</h1><div class=lead>Documentation for AK 3.6.X</div><ul><li>1: <a href=#pg-6a197ab6fc9b0ed90ba645b3dd88616a>Getting Started</a></li><ul><li>1.1: <a href=#pg-356233ad2ba5354191aa17c83f364efc>Introduction</a></li><li>1.2: <a href=#pg-07674ec7b240d9742d9f5a73ad2a1b7e>Use Cases</a></li><li>1.3: <a href=#pg-c34c344cd73aab85575e5776f92 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.6.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
@@ -6335,7 +6336,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/36/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.6.2 \
@@ -6613,7 +6615,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ee7f38c136ec5211edca7f7eac8eb033>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ee7f38c136ec5211edca7f7eac8eb033>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/36/getting-started/_print/index.html b/36/getting-started/_print/index.html
index 2164fb6573..6122610b5f 100644
--- a/36/getting-started/_print/index.html
+++ b/36/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/36/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-356233ad2ba5354191aa17c83f364efc>Introduction</a></li><li>2: <a href=#pg-07674ec7b240d9742d9f5a73ad2a1b7e>Use Cases</a></li><li>3: <a href=#pg-c34c344cd73aab [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/36/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-356233ad2ba5354191aa17c83f364efc>Introduction</a></li><li>2: <a href=#pg-07674ec7b240d9742d9f5a73ad2a1b7e>Use Cases</a></li><li>3: <a href=#pg-c34c344cd73aab [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.6.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link href [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
diff --git a/36/getting-started/introduction/index.html b/36/getting-started/introduction/index.html
index c2a63e6dc1..87d45c5580 100644
--- a/36/getting-started/introduction/index.html
+++ b/36/getting-started/introduction/index.html
@@ -87,7 +87,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/36/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/36/>AK 3.6.X</a></li><li class=breadcrumb-item><a href=/36/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/36/>AK 3.6.X</a></li><li class=breadcrumb-item><a href=/36/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/36/streams/_print/index.html b/36/streams/_print/index.html
index cdddbc057b..6e2d6fccd9 100644
--- a/36/streams/_print/index.html
+++ b/36/streams/_print/index.html
@@ -252,7 +252,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/36/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.6.2 \
@@ -530,7 +531,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ee7f38c136ec5211edca7f7eac8eb033>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ee7f38c136ec5211edca7f7eac8eb033>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
A high-level API that provides the most common data transformation operations such as <code>map</code>, <code>filter</code>, <code>join</code>, and <code>aggregations</code> out of the box. The DSL is the recommended starting point for developers new to Kafka Streams, and should cover many use cases and stream processing needs. If you’re writing a Scala application then you can use the <a href=dsl-api.html#scala-dsl>Kafka Streams DSL for Scala</a> library which removes much of the [...]
<a href=processor-api.html#streams-developer-guide-processor-api>Processor API</a>
A low-level API that lets you add and connect processors as well as interact directly with state stores. The Processor API provides you with even more flexibility than the DSL but at the expense of requiring more manual work on the side of the application developer (e.g., more lines of code).</p><h1 id=libraries-and-maven-artifacts>Libraries and Maven artifacts<a class=td-heading-self-link href=#libraries-and-maven-artifacts aria-label="Heading self-link"></a></h1><p>This section lists t [...]
diff --git a/36/streams/core-concepts/index.html b/36/streams/core-concepts/index.html
index d27f7b71de..d3e1a7471d 100644
--- a/36/streams/core-concepts/index.html
+++ b/36/streams/core-concepts/index.html
@@ -87,7 +87,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/36/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/36/>AK 3.6.X</a></li><li class=breadcrumb-item><a href=/36/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/36/>AK 3.6.X</a></li><li class=breadcrumb-item><a href=/36/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/36/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/36/streams/quickstart/index.html b/36/streams/quickstart/index.html
index bb2f316e7f..cade54fd76 100644
--- a/36/streams/quickstart/index.html
+++ b/36/streams/quickstart/index.html
@@ -207,7 +207,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/36/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/36/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/37/_print/index.html b/37/_print/index.html
index 7e54cbfa99..8f4bd80e9e 100644
--- a/37/_print/index.html
+++ b/37/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/37/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.7.X</h1><div class=lead>Documentation for AK 3.7.X</div><ul><li>1: <a href=#pg-0078774ff221dcb211fdee97debdad45>Getting Started</a></li><ul><li>1.1: <a href=#pg-bf0a51c5d31cf33cb1d7b290f44125b9>Introduction</a></li><li>1.2: <a href=#pg-4bd6c8b4c0b829ed6dda92003818766c>Use Cases</a></li><li>1.3: <a href=#pg-a3e809b5e82d6409112800f9cc7 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/37/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.7.X</h1><div class=lead>Documentation for AK 3.7.X</div><ul><li>1: <a href=#pg-0078774ff221dcb211fdee97debdad45>Getting Started</a></li><ul><li>1.1: <a href=#pg-bf0a51c5d31cf33cb1d7b290f44125b9>Introduction</a></li><li>1.2: <a href=#pg-4bd6c8b4c0b829ed6dda92003818766c>Use Cases</a></li><li>1.3: <a href=#pg-a3e809b5e82d6409112800f9cc7 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.7.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link h [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
@@ -6493,7 +6494,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/37/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.7.2 \
@@ -6771,7 +6773,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-24d2a378760a35934dafb6b018a76d3a>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-24d2a378760a35934dafb6b018a76d3a>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/37/getting-started/_print/index.html b/37/getting-started/_print/index.html
index 83a9981e32..f60023bb67 100644
--- a/37/getting-started/_print/index.html
+++ b/37/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/37/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-bf0a51c5d31cf33cb1d7b290f44125b9>Introduction</a></li><li>2: <a href=#pg-4bd6c8b4c0b829ed6dda92003818766c>Use Cases</a></li><li>3: <a href=#pg-a3e809b5e82d64 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/37/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-bf0a51c5d31cf33cb1d7b290f44125b9>Introduction</a></li><li>2: <a href=#pg-4bd6c8b4c0b829ed6dda92003818766c>Use Cases</a></li><li>3: <a href=#pg-a3e809b5e82d64 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.7.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using ZooKeeper or KRaft. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-zookeeper>Kafka with ZooKeeper<a class=td-heading-self-link h [...]
$ bin/zookeeper-server-start.sh config/zookeeper.properties
diff --git a/37/getting-started/introduction/index.html b/37/getting-started/introduction/index.html
index 761f4dfa22..2aa77cd7fa 100644
--- a/37/getting-started/introduction/index.html
+++ b/37/getting-started/introduction/index.html
@@ -88,7 +88,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/37/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/37/>AK 3.7.X</a></li><li class=breadcrumb-item><a href=/37/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/37/>AK 3.7.X</a></li><li class=breadcrumb-item><a href=/37/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/37/streams/_print/index.html b/37/streams/_print/index.html
index f20f96c08e..d35ae3f689 100644
--- a/37/streams/_print/index.html
+++ b/37/streams/_print/index.html
@@ -252,7 +252,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/37/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.7.2 \
@@ -530,7 +531,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-24d2a378760a35934dafb6b018a76d3a>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-24d2a378760a35934dafb6b018a76d3a>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/37/streams/core-concepts/index.html b/37/streams/core-concepts/index.html
index f4c578df3a..d66ed078e3 100644
--- a/37/streams/core-concepts/index.html
+++ b/37/streams/core-concepts/index.html
@@ -88,7 +88,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/37/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/37/>AK 3.7.X</a></li><li class=breadcrumb-item><a href=/37/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/37/>AK 3.7.X</a></li><li class=breadcrumb-item><a href=/37/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/37/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/37/streams/quickstart/index.html b/37/streams/quickstart/index.html
index 7addf37b46..b2ebb6ef76 100644
--- a/37/streams/quickstart/index.html
+++ b/37/streams/quickstart/index.html
@@ -208,7 +208,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/37/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/37/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/38/_print/index.html b/38/_print/index.html
index 757a47af4a..48a89d376c 100644
--- a/38/_print/index.html
+++ b/38/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/38/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.8.X</h1><div class=lead>Documentation for AK 3.8.X</div><ul><li>1: <a href=#pg-c1d0674d6ad78cc1dc3fdc8972dbd580>Getting Started</a></li><ul><li>1.1: <a href=#pg-1029eb8c1815e4de33ee3652a9c37c4a>Introduction</a></li><li>1.2: <a href=#pg-17698c8e7b5172153543f10ffd5cff37>Use Cases</a></li><li>1.3: <a href=#pg-ec542c5cbfc771b9c3db76ab59b [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/38/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.8.X</h1><div class=lead>Documentation for AK 3.8.X</div><ul><li>1: <a href=#pg-c1d0674d6ad78cc1dc3fdc8972dbd580>Getting Started</a></li><ul><li>1.1: <a href=#pg-1029eb8c1815e4de33ee3652a9c37c4a>Introduction</a></li><li>1.2: <a href=#pg-17698c8e7b5172153543f10ffd5cff37>Use Cases</a></li><li>1.3: <a href=#pg-ec542c5cbfc771b9c3db76ab59b [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.8.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using KRaft or ZooKeeper. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-kraft>Kafka with KRaft<a class=td-heading-self-link href=#kaf [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
@@ -6585,7 +6586,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/38/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.8.1 \
@@ -6863,7 +6865,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-9f85f23d1b67cc32a0ad20896125eb73>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-9f85f23d1b67cc32a0ad20896125eb73>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/38/getting-started/_print/index.html b/38/getting-started/_print/index.html
index f193f780ff..48307d196c 100644
--- a/38/getting-started/_print/index.html
+++ b/38/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/38/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-1029eb8c1815e4de33ee3652a9c37c4a>Introduction</a></li><li>2: <a href=#pg-17698c8e7b5172153543f10ffd5cff37>Use Cases</a></li><li>3: <a href=#pg-ec542c5cbfc771 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/38/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-1029eb8c1815e4de33ee3652a9c37c4a>Introduction</a></li><li>2: <a href=#pg-17698c8e7b5172153543f10ffd5cff37>Use Cases</a></li><li>3: <a href=#pg-ec542c5cbfc771 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.8.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using KRaft or ZooKeeper. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-kraft>Kafka with KRaft<a class=td-heading-self-link href=#kaf [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format -t $KAFKA_CLUSTER_ID -c config/kraft/server.properties
diff --git a/38/getting-started/introduction/index.html b/38/getting-started/introduction/index.html
index 8cfb429064..ae650706cc 100644
--- a/38/getting-started/introduction/index.html
+++ b/38/getting-started/introduction/index.html
@@ -88,7 +88,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/38/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/38/>AK 3.8.X</a></li><li class=breadcrumb-item><a href=/38/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/38/>AK 3.8.X</a></li><li class=breadcrumb-item><a href=/38/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/38/streams/_print/index.html b/38/streams/_print/index.html
index 103e5d0c7b..5c70bf6b71 100644
--- a/38/streams/_print/index.html
+++ b/38/streams/_print/index.html
@@ -195,7 +195,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/38/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.8.1 \
@@ -473,7 +474,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-9f85f23d1b67cc32a0ad20896125eb73>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-9f85f23d1b67cc32a0ad20896125eb73>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/38/streams/core-concepts/index.html b/38/streams/core-concepts/index.html
index 7bf1a5fe14..f8328d6694 100644
--- a/38/streams/core-concepts/index.html
+++ b/38/streams/core-concepts/index.html
@@ -88,7 +88,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/38/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/38/>AK 3.8.X</a></li><li class=breadcrumb-item><a href=/38/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/38/>AK 3.8.X</a></li><li class=breadcrumb-item><a href=/38/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/38/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/38/streams/quickstart/index.html b/38/streams/quickstart/index.html
index 22327295ca..27f5361bf9 100644
--- a/38/streams/quickstart/index.html
+++ b/38/streams/quickstart/index.html
@@ -203,7 +203,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/38/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/38/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/39/_print/index.html b/39/_print/index.html
index 6f043d113e..71a4a410fb 100644
--- a/39/_print/index.html
+++ b/39/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/39/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.9.X</h1><div class=lead>Documentation for AK 3.9.X</div><ul><li>1: <a href=#pg-987f4fc6a6a9e9aa12313011605bcc82>Getting Started</a></li><ul><li>1.1: <a href=#pg-52fe456cbd8b8b4a54eec227b5838a10>Introduction</a></li><li>1.2: <a href=#pg-be9c46fd718c29332db3766b18807812>Use Cases</a></li><li>1.3: <a href=#pg-d449d9b210b3eb33d1874ead947 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/39/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 3.9.X</h1><div class=lead>Documentation for AK 3.9.X</div><ul><li>1: <a href=#pg-987f4fc6a6a9e9aa12313011605bcc82>Getting Started</a></li><ul><li>1.1: <a href=#pg-52fe456cbd8b8b4a54eec227b5838a10>Introduction</a></li><li>1.2: <a href=#pg-be9c46fd718c29332db3766b18807812>Use Cases</a></li><li>1.3: <a href=#pg-d449d9b210b3eb33d1874ead947 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.9.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using KRaft or ZooKeeper. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-kraft>Kafka with KRaft<a class=td-heading-self-link href=#kaf [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/kraft/reconfig-server.properties
@@ -6990,7 +6991,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/39/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.9.1 \
@@ -7268,7 +7270,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-6d6f824e3b3e9ccc5f0e39449c74136b>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-6d6f824e3b3e9ccc5f0e39449c74136b>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/39/getting-started/_print/index.html b/39/getting-started/_print/index.html
index adbf0ec03f..bda8d02369 100644
--- a/39/getting-started/_print/index.html
+++ b/39/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/39/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-52fe456cbd8b8b4a54eec227b5838a10>Introduction</a></li><li>2: <a href=#pg-be9c46fd718c29332db3766b18807812>Use Cases</a></li><li>3: <a href=#pg-d449d9b210b3eb [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/39/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-52fe456cbd8b8b4a54eec227b5838a10>Introduction</a></li><li>2: <a href=#pg-be9c46fd718c29332db3766b18807812>Use Cases</a></li><li>3: <a href=#pg-d449d9b210b3eb [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-3.9.1
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 8+ installed.</p><p>Apache Kafka can be started using KRaft or ZooKeeper. To get started with either configuration follow one of the sections below but not both.</p><h3 id=kafka-with-kraft>Kafka with KRaft<a class=td-heading-self-link href=#kaf [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/kraft/reconfig-server.properties
diff --git a/39/getting-started/introduction/index.html b/39/getting-started/introduction/index.html
index 28638e63d0..f43b28623e 100644
--- a/39/getting-started/introduction/index.html
+++ b/39/getting-started/introduction/index.html
@@ -89,7 +89,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/39/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/39/>AK 3.9.X</a></li><li class=breadcrumb-item><a href=/39/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/39/>AK 3.9.X</a></li><li class=breadcrumb-item><a href=/39/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/39/streams/_print/index.html b/39/streams/_print/index.html
index 59596df7c0..e138ed8b7c 100644
--- a/39/streams/_print/index.html
+++ b/39/streams/_print/index.html
@@ -195,7 +195,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/39/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=3.9.1 \
@@ -473,7 +474,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-6d6f824e3b3e9ccc5f0e39449c74136b>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-6d6f824e3b3e9ccc5f0e39449c74136b>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/39/streams/core-concepts/index.html b/39/streams/core-concepts/index.html
index 05c1d956b5..2081648a49 100644
--- a/39/streams/core-concepts/index.html
+++ b/39/streams/core-concepts/index.html
@@ -89,7 +89,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/39/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/39/>AK 3.9.X</a></li><li class=breadcrumb-item><a href=/39/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/39/>AK 3.9.X</a></li><li class=breadcrumb-item><a href=/39/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/39/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/39/streams/quickstart/index.html b/39/streams/quickstart/index.html
index 9f1b8f98a7..69b16efecd 100644
--- a/39/streams/quickstart/index.html
+++ b/39/streams/quickstart/index.html
@@ -204,7 +204,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/39/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/39/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/40/_print/index.html b/40/_print/index.html
index bf64e1a547..64da1a9b7e 100644
--- a/40/_print/index.html
+++ b/40/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/40/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.0.X</h1><div class=lead>Documentation for AK 4.0.X</div><ul><li>1: <a href=#pg-57ae49d85a2c164e0eb07c10120dcbb3>Getting Started</a></li><ul><li>1.1: <a href=#pg-18cb84658ea274059968ea6aee464417>Introduction</a></li><li>1.2: <a href=#pg-87be86f466ccf95b3e25ecfa713a9ae9>Use Cases</a></li><li>1.3: <a href=#pg-808eec61f3f1629c7f824e92a5d [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/40/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.0.X</h1><div class=lead>Documentation for AK 4.0.X</div><ul><li>1: <a href=#pg-57ae49d85a2c164e0eb07c10120dcbb3>Getting Started</a></li><ul><li>1.1: <a href=#pg-18cb84658ea274059968ea6aee464417>Introduction</a></li><li>1.2: <a href=#pg-87be86f466ccf95b3e25ecfa713a9ae9>Use Cases</a></li><li>1.3: <a href=#pg-808eec61f3f1629c7f824e92a5d [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.0.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
@@ -5956,7 +5957,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/40/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.0.2 \
@@ -6234,7 +6236,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ec5d58470ed8eedf1f0bb5597dc0bce1>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ec5d58470ed8eedf1f0bb5597dc0bce1>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/40/getting-started/_print/index.html b/40/getting-started/_print/index.html
index d6083a046b..6299835559 100644
--- a/40/getting-started/_print/index.html
+++ b/40/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/40/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-18cb84658ea274059968ea6aee464417>Introduction</a></li><li>2: <a href=#pg-87be86f466ccf95b3e25ecfa713a9ae9>Use Cases</a></li><li>3: <a href=#pg-808eec61f3f162 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/40/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-18cb84658ea274059968ea6aee464417>Introduction</a></li><li>2: <a href=#pg-87be86f466ccf95b3e25ecfa713a9ae9>Use Cases</a></li><li>3: <a href=#pg-808eec61f3f162 [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.0.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
diff --git a/40/getting-started/introduction/index.html b/40/getting-started/introduction/index.html
index 4849f083f3..152cfb85ce 100644
--- a/40/getting-started/introduction/index.html
+++ b/40/getting-started/introduction/index.html
@@ -90,7 +90,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/40/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/40/>AK 4.0.X</a></li><li class=breadcrumb-item><a href=/40/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/40/>AK 4.0.X</a></li><li class=breadcrumb-item><a href=/40/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/40/streams/_print/index.html b/40/streams/_print/index.html
index 2cd844c9ab..dd3bf53354 100644
--- a/40/streams/_print/index.html
+++ b/40/streams/_print/index.html
@@ -193,7 +193,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/40/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.0.2 \
@@ -471,7 +472,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ec5d58470ed8eedf1f0bb5597dc0bce1>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-ec5d58470ed8eedf1f0bb5597dc0bce1>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/40/streams/core-concepts/index.html b/40/streams/core-concepts/index.html
index a525196197..bd912d0d99 100644
--- a/40/streams/core-concepts/index.html
+++ b/40/streams/core-concepts/index.html
@@ -90,7 +90,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/40/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/40/>AK 4.0.X</a></li><li class=breadcrumb-item><a href=/40/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/40/>AK 4.0.X</a></li><li class=breadcrumb-item><a href=/40/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/40/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/40/streams/quickstart/index.html b/40/streams/quickstart/index.html
index 477028cc3e..099ab0b8b2 100644
--- a/40/streams/quickstart/index.html
+++ b/40/streams/quickstart/index.html
@@ -203,7 +203,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/40/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/40/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/41/_print/index.html b/41/_print/index.html
index f8206a0cff..a708095712 100644
--- a/41/_print/index.html
+++ b/41/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/41/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.1.X</h1><div class=lead>Documentation for AK 4.1.X</div><ul><li>1: <a href=#pg-29d887f684be378cb140f1f5074c81a9>Getting Started</a></li><ul><li>1.1: <a href=#pg-8782c61eb036e91e74c521fffbedf97f>Introduction</a></li><li>1.2: <a href=#pg-4b49567cdcd40a9b6c0b7ec8c9fab811>Use Cases</a></li><li>1.3: <a href=#pg-cdf8e3cdeb21ebf8e49686f02ff [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/41/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.1.X</h1><div class=lead>Documentation for AK 4.1.X</div><ul><li>1: <a href=#pg-29d887f684be378cb140f1f5074c81a9>Getting Started</a></li><ul><li>1.1: <a href=#pg-8782c61eb036e91e74c521fffbedf97f>Introduction</a></li><li>1.2: <a href=#pg-4b49567cdcd40a9b6c0b7ec8c9fab811>Use Cases</a></li><li>1.3: <a href=#pg-cdf8e3cdeb21ebf8e49686f02ff [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.1.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
@@ -6439,7 +6440,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/41/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.1.2 \
@@ -6717,7 +6719,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-150954e6b1bd3f225237c1105b481ec1>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-150954e6b1bd3f225237c1105b481ec1>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/41/getting-started/_print/index.html b/41/getting-started/_print/index.html
index 9f03d82100..ff4804e69d 100644
--- a/41/getting-started/_print/index.html
+++ b/41/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/41/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-8782c61eb036e91e74c521fffbedf97f>Introduction</a></li><li>2: <a href=#pg-4b49567cdcd40a9b6c0b7ec8c9fab811>Use Cases</a></li><li>3: <a href=#pg-cdf8e3cdeb21eb [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/41/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-8782c61eb036e91e74c521fffbedf97f>Introduction</a></li><li>2: <a href=#pg-4b49567cdcd40a9b6c0b7ec8c9fab811>Use Cases</a></li><li>3: <a href=#pg-cdf8e3cdeb21eb [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.1.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
diff --git a/41/getting-started/introduction/index.html b/41/getting-started/introduction/index.html
index bf1f786a56..5b25bfc706 100644
--- a/41/getting-started/introduction/index.html
+++ b/41/getting-started/introduction/index.html
@@ -91,7 +91,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/41/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/41/>AK 4.1.X</a></li><li class=breadcrumb-item><a href=/41/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/41/>AK 4.1.X</a></li><li class=breadcrumb-item><a href=/41/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/41/streams/_print/index.html b/41/streams/_print/index.html
index 9433c3410f..1295ee8bf2 100644
--- a/41/streams/_print/index.html
+++ b/41/streams/_print/index.html
@@ -193,7 +193,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/41/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.1.2 \
@@ -471,7 +472,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-150954e6b1bd3f225237c1105b481ec1>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-150954e6b1bd3f225237c1105b481ec1>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
leftStream
.filter((key, value) -> key != null)
.leftJoin(rightStream, (leftValue, rightValue) -> join(leftValue, rightValue), windows);
diff --git a/41/streams/core-concepts/index.html b/41/streams/core-concepts/index.html
index aeb1a99fc6..6edb731e43 100644
--- a/41/streams/core-concepts/index.html
+++ b/41/streams/core-concepts/index.html
@@ -91,7 +91,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/41/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/41/>AK 4.1.X</a></li><li class=breadcrumb-item><a href=/41/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/41/>AK 4.1.X</a></li><li class=breadcrumb-item><a href=/41/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/41/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/41/streams/quickstart/index.html b/41/streams/quickstart/index.html
index 09605bd5d6..c5a3584ccb 100644
--- a/41/streams/quickstart/index.html
+++ b/41/streams/quickstart/index.html
@@ -204,7 +204,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/41/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/41/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/42/_print/index.html b/42/_print/index.html
index e8c0536851..b8d90c4f2d 100644
--- a/42/_print/index.html
+++ b/42/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/42/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.2.X</h1><div class=lead>Documentation for AK 4.2.X</div><ul><li>1: <a href=#pg-2dc8c735955b2cdef4c364063c2e434a>Getting Started</a></li><ul><li>1.1: <a href=#pg-f9f0ac88beba4a4804395a0bf63d91fc>Introduction</a></li><li>1.2: <a href=#pg-bac56b7c306c0c51f9832545a8540934>Use Cases</a></li><li>1.3: <a href=#pg-e79e753beaf7dd375bcc2ef3cfa [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/42/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.2.X</h1><div class=lead>Documentation for AK 4.2.X</div><ul><li>1: <a href=#pg-2dc8c735955b2cdef4c364063c2e434a>Getting Started</a></li><ul><li>1.1: <a href=#pg-f9f0ac88beba4a4804395a0bf63d91fc>Introduction</a></li><li>1.2: <a href=#pg-bac56b7c306c0c51f9832545a8540934>Use Cases</a></li><li>1.3: <a href=#pg-e79e753beaf7dd375bcc2ef3cfa [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.2.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
@@ -6803,7 +6804,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/42/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.2.2 \
@@ -7081,7 +7083,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-61621e73f004fa3453d3ebe0a5d513c8>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-61621e73f004fa3453d3ebe0a5d513c8>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
This release marks the General Availability for the core functionality detailed in <a href=https://cwiki.apache.org/confluence/display/KAFKA/KIP-1071%3A+Streams+Rebalance+Protocol target=_blank rel=noopener>KIP-1071</a>.
For more information about the feature set, design, usage and migration,
please refer to the <a href=/42/streams/developer-guide/streams-rebalance-protocol>developer guide</a>.</p><p><strong>Note:</strong> Due to a critical broker-side bug in the offline migration code (<a href=https://issues.apache.org/jira/browse/KAFKA-20254 target=_blank rel=noopener>KAFKA-20254</a>), we recommend against doing migrations from classic to streams groups in 4.2.0. Newly created streams groups are not impacted. The fix is available in 4.2.1.</p><h3 id=other-changes>Other chan [...]
diff --git a/42/getting-started/_print/index.html b/42/getting-started/_print/index.html
index 4d03d046c8..4a15009a9f 100644
--- a/42/getting-started/_print/index.html
+++ b/42/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/42/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-f9f0ac88beba4a4804395a0bf63d91fc>Introduction</a></li><li>2: <a href=#pg-bac56b7c306c0c51f9832545a8540934>Use Cases</a></li><li>3: <a href=#pg-e79e753beaf7dd [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/42/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-f9f0ac88beba4a4804395a0bf63d91fc>Introduction</a></li><li>2: <a href=#pg-bac56b7c306c0c51f9832545a8540934>Use Cases</a></li><li>3: <a href=#pg-e79e753beaf7dd [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
$ cd kafka_2.13-4.2.2
</code></pre><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label="Heading self-link" [...]
</code></pre><p>Format Log Directories</p><pre><code>$ bin/kafka-storage.sh format --standalone -t $KAFKA_CLUSTER_ID -c config/server.properties
diff --git a/42/getting-started/introduction/index.html b/42/getting-started/introduction/index.html
index 029505ae10..b1ff1c1121 100644
--- a/42/getting-started/introduction/index.html
+++ b/42/getting-started/introduction/index.html
@@ -93,7 +93,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/42/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/42/>AK 4.2.X</a></li><li class=breadcrumb-item><a href=/42/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/42/>AK 4.2.X</a></li><li class=breadcrumb-item><a href=/42/getting-started/>Getting Started</a></li><li class="breadcrumb-item active" aria-current=page>Introduction</li></ol></nav><div class=td-content><h1>Introduction</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>T [...]
+Figure: This example topic has four partitions P1–P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/42/streams/_print/index.html b/42/streams/_print/index.html
index 2cb781b7ea..a89c091130 100644
--- a/42/streams/_print/index.html
+++ b/42/streams/_print/index.html
@@ -195,7 +195,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/42/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.2.2 \
@@ -473,7 +474,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-61621e73f004fa3453d3ebe0a5d513c8>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-61621e73f004fa3453d3ebe0a5d513c8>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
This release marks the General Availability for the core functionality detailed in <a href=https://cwiki.apache.org/confluence/display/KAFKA/KIP-1071%3A+Streams+Rebalance+Protocol target=_blank rel=noopener>KIP-1071</a>.
For more information about the feature set, design, usage and migration,
please refer to the <a href=/42/streams/developer-guide/streams-rebalance-protocol>developer guide</a>.</p><p><strong>Note:</strong> Due to a critical broker-side bug in the offline migration code (<a href=https://issues.apache.org/jira/browse/KAFKA-20254 target=_blank rel=noopener>KAFKA-20254</a>), we recommend against doing migrations from classic to streams groups in 4.2.0. Newly created streams groups are not impacted. The fix is available in 4.2.1.</p><h3 id=other-changes>Other chan [...]
diff --git a/42/streams/core-concepts/index.html b/42/streams/core-concepts/index.html
index b794ca595c..68bf0ceb5d 100644
--- a/42/streams/core-concepts/index.html
+++ b/42/streams/core-concepts/index.html
@@ -93,7 +93,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
<a id=print href=/42/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
For up-to-date documentation, see the
-<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/42/>AK 4.2.X</a></li><li class=breadcrumb-item><a href=/42/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+<a href=/43/ target=_blank>latest version</a>.</p></div><nav aria-label=breadcrumb class=td-breadcrumbs><ol class=breadcrumb><li class=breadcrumb-item><a href=/42/>AK 4.2.X</a></li><li class=breadcrumb-item><a href=/42/streams/>Kafka Streams</a></li><li class="breadcrumb-item active" aria-current=page>Core Concepts</li></ol></nav><div class=td-content><h1>Core Concepts</h1><header class=article-meta><div class="taxonomy taxonomy-terms-article taxo-tags"><h5 class=taxonomy-title>Tags:</h5 [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/42/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/42/streams/quickstart/index.html b/42/streams/quickstart/index.html
index d79ba301a8..0ab70f19ae 100644
--- a/42/streams/quickstart/index.html
+++ b/42/streams/quickstart/index.html
@@ -208,7 +208,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/42/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/42/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/43/_print/index.html b/43/_print/index.html
index d4d9e60392..973a6c5165 100644
--- a/43/_print/index.html
+++ b/43/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/43/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.3.X</h1><div class=lead>Documentation for AK 4.3.X</div><ul><li>1: <a href=#pg-1487d897183085ba3554102203fda8b8>Getting Started</a></li><ul><li>1.1: <a href=#pg-a0cdc6bf04199453d4057ed37788bcf8>Introduction</a></li><li>1.2: <a href=#pg-102d27b5605e3d62e32c3778de5a48d5>Use Cases</a></li><li>1.3: <a href=#pg-839a75ae39282328b95b15bbf11 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/43/>Return to the regular view of this page</a>.</p></div><h1 class=title>AK 4.3.X</h1><div class=lead>Documentation for AK 4.3.X</div><ul><li>1: <a href=#pg-1487d897183085ba3554102203fda8b8>Getting Started</a></li><ul><li>1.1: <a href=#pg-a0cdc6bf04199453d4057ed37788bcf8>Introduction</a></li><li>1.2: <a href=#pg-102d27b5605e3d62e32c3778de5a48d5>Use Cases</a></li><li>1.3: <a href=#pg-839a75ae39282328b95b15bbf11 [...]
+Figure: This example topic has four partitions P1-P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
</span></span><span style=display:flex><span>$ <span style=color:#204a87>cd</span> kafka_2.13-4.3.1
</span></span></code></pre></div><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label [...]
</span></span></code></pre></div><p>Format Log Directories</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>$ bin/kafka-storage.sh format --standalone -t <span style=color:#000>$KAFKA_CLUSTER_ID</span> -c config/server.properties
@@ -6714,7 +6715,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/43/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.3.1 \
@@ -6992,7 +6994,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-f3306dcfbccae85024408f901c644ebd>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-f3306dcfbccae85024408f901c644ebd>9.4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and sim [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#000>Properties</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>props</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>new</span><span style=color:#f8f8f [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#000>props</span><span style=color:#000;font-weight:700>.</span><span style=color:#c4a000>put</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>StreamsConfig</span><span style=color:#000;font-weight:700>.</span><span style=color:#c4a000>DSL_STORE_FORMAT_CONFIG</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8 [...]
</span></span></span></code></pre></div><p>Per-operator customization is possible by providing a custom <code>DslStoreSuppliers</code> via <code>Materialized.withStoreType(...)</code>, or by supplying explicit headers-aware store suppliers. The pre-existing <code>boolean isTimestamped</code> constructors and <code>isTimestamped()</code> methods on <code>DslKeyValueParams</code> and <code>DslWindowParams</code>, and the 3-argument constructor on <code>DslSessionParams</code>, are deprecat [...]
diff --git a/43/getting-started/_print/index.html b/43/getting-started/_print/index.html
index 3f9aa1490a..e00269c031 100644
--- a/43/getting-started/_print/index.html
+++ b/43/getting-started/_print/index.html
@@ -4,7 +4,8 @@
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
-<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/43/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-a0cdc6bf04199453d4057ed37788bcf8>Introduction</a></li><li>2: <a href=#pg-102d27b5605e3d62e32c3778de5a48d5>Use Cases</a></li><li>3: <a href=#pg-839a75ae392823 [...]
+<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/43/getting-started/>Return to the regular view of this page</a>.</p></div><h1 class=title>Getting Started</h1><div class=lead>This section provides an overview of what Kafka is, why it is useful, and how to get started using it.</div><ul><li>1: <a href=#pg-a0cdc6bf04199453d4057ed37788bcf8>Introduction</a></li><li>2: <a href=#pg-102d27b5605e3d62e32c3778de5a48d5>Use Cases</a></li><li>3: <a href=#pg-839a75ae392823 [...]
+Figure: This example topic has four partitions P1-P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
</span></span><span style=display:flex><span>$ <span style=color:#204a87>cd</span> kafka_2.13-4.3.1
</span></span></code></pre></div><h2 id=step-2-start-the-kafka-environment>Step 2: Start the Kafka environment<a class=td-heading-self-link href=#step-2-start-the-kafka-environment aria-label="Heading self-link"></a></h2><p>NOTE: Your local environment must have Java 17+ installed.</p><p>Kafka can be run using local scripts and downloaded files or the docker image.</p><h3 id=using-downloaded-files>Using downloaded files<a class=td-heading-self-link href=#using-downloaded-files aria-label [...]
</span></span></code></pre></div><p>Format Log Directories</p><div class=highlight><pre tabindex=0 style=background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4><code class=language-bash data-lang=bash><span style=display:flex><span>$ bin/kafka-storage.sh format --standalone -t <span style=color:#000>$KAFKA_CLUSTER_ID</span> -c config/server.properties
diff --git a/43/getting-started/introduction/index.html b/43/getting-started/introduction/index.html
index 562ef9f3bf..cfbd7435a0 100644
--- a/43/getting-started/introduction/index.html
+++ b/43/getting-started/introduction/index.html
@@ -92,7 +92,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<a href=https://github.com/apache/kafka-site//edit/markdown/content/en/43/getting-started/introduction.md class="td-page-meta--edit td-page-meta__edit" target=_blank rel=noopener><i class="fa-solid fa-pen-to-square fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/kafka-site//new/markdown/content/en/43/getting-started?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+t [...]
<a href="https://github.com/apache/kafka-site//issues/new?title=Introduction" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
-<a id=print href=/43/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
+<a id=print href=/43/getting-started/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#what-is-event-streaming>What is event streaming?</a></li><li><a href=#what-can-i-use-event-streaming-for>What can I use event streaming for?</a></li><li><a href=#apache-kafka-is-an-event-streaming-platform-what-does-that-mean>Apache Kafka® is an eve [...]
+Figure: This example topic has four partitions P1-P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Use Cases
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/43/streams/_print/index.html b/43/streams/_print/index.html
index 202d6fb9ea..4696ca6615 100644
--- a/43/streams/_print/index.html
+++ b/43/streams/_print/index.html
@@ -195,7 +195,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/43/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
-DarchetypeGroupId=org.apache.kafka \
-DarchetypeArtifactId=streams-quickstart-java \
-DarchetypeVersion=4.3.1 \
@@ -473,7 +474,8 @@ public class WordCount {
// ... same as Pipe.java above
}
}
-</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-f3306dcfbccae85024408f901c644ebd>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+</code></pre><ul><li><a href=/documentation>Documentation</a></li><li><a href=/documentation/streams>Kafka Streams</a></li></ul></div><div class=td-content style=page-break-before:always><h1 id=pg-f3306dcfbccae85024408f901c644ebd>4 - Core Concepts</h1><p>Kafka Streams is a client library for processing and analyzing data stored in Kafka. It builds upon important stream processing concepts such as properly distinguishing between event time and processing time, windowing support, and simpl [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#000>Properties</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#000>props</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#ce5c00;font-weight:700>=</span><span style=color:#f8f8f8;text-decoration:underline> </span><span style=color:#204a87;font-weight:700>new</span><span style=color:#f8f8f [...]
</span></span></span><span style=display:flex><span><span style=color:#f8f8f8;text-decoration:underline></span><span style=color:#000>props</span><span style=color:#000;font-weight:700>.</span><span style=color:#c4a000>put</span><span style=color:#000;font-weight:700>(</span><span style=color:#000>StreamsConfig</span><span style=color:#000;font-weight:700>.</span><span style=color:#c4a000>DSL_STORE_FORMAT_CONFIG</span><span style=color:#000;font-weight:700>,</span><span style=color:#f8f8 [...]
</span></span></span></code></pre></div><p>Per-operator customization is possible by providing a custom <code>DslStoreSuppliers</code> via <code>Materialized.withStoreType(...)</code>, or by supplying explicit headers-aware store suppliers. The pre-existing <code>boolean isTimestamped</code> constructors and <code>isTimestamped()</code> methods on <code>DslKeyValueParams</code> and <code>DslWindowParams</code>, and the 3-argument constructor on <code>DslSessionParams</code>, are deprecat [...]
diff --git a/43/streams/core-concepts/index.html b/43/streams/core-concepts/index.html
index b22344af4b..70ff78c39d 100644
--- a/43/streams/core-concepts/index.html
+++ b/43/streams/core-concepts/index.html
@@ -92,7 +92,8 @@ Kafka Streams has a low barrier to entry : You can quickly write and run a small
<a href=https://github.com/apache/kafka-site//edit/markdown/content/en/43/streams/core-concepts.md class="td-page-meta--edit td-page-meta__edit" target=_blank rel=noopener><i class="fa-solid fa-pen-to-square fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/kafka-site//new/markdown/content/en/43/streams?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+th [...]
<a href="https://github.com/apache/kafka-site//issues/new?title=Core%20Concepts" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
-<a id=print href=/43/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
+<a id=print href=/43/streams/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#stream-processing-topology>Stream Processing Topology</a></li><li><a href=#time>Time</a></li><li><a href=#duality-of-streams-and-tables>Duality of Streams and Tables</a></li><li><a href=#aggregations>Aggregations</a></li><li><a href=#windowing>Windowing</a> [...]
+The <strong>stream-table duality</strong> describes the close relationship between streams and tables.</p><ul><li><strong>Stream as Table</strong> : A stream can be considered a changelog of a table, where each data record in the stream captures a state change of the table. A stream is thus a table in disguise, and it can be easily turned into a “real” table by replaying the changelog from beginning to end to reconstruct the table. Similarly, in a more general analogy, aggreg [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Write a streams app</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/43/streams/architecture/ rel=next aria-label="Next: Architecture"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Architecture
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/43/streams/quickstart/index.html b/43/streams/quickstart/index.html
index 6673ad66cc..a0bee206bc 100644
--- a/43/streams/quickstart/index.html
+++ b/43/streams/quickstart/index.html
@@ -207,7 +207,8 @@ streams 2
join 1
kafka 3
summit 1
-</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+</code></pre><p>As one can see, outputs of the Wordcount application is actually a continuous stream of updates, where each output record (i.e. each line in the original output above) is an updated count of a single word, aka record key such as “kafka”. For multiple records with the same key, each later record is an update of the previous one.</p><p>The two diagrams below illustrate what is essentially happening behind the scenes. The first column shows the evolution of the c [...]
+<img src=/43/images/streams-table-updates-01.png></p><p>First the text line “all streams lead to kafka” is being processed. The <code>KTable</code> is being built up as each new word results in a new table entry (highlighted with a green background), and a corresponding change record is sent to the downstream <code>KStream</code>.</p><p>When the second text line “hello kafka streams” is processed, we observe, for the first time, that existing entries in the <code> [...]
<span class="text-dark text-truncate d-inline-block" style=max-width:18rem>Introduction</span></a></div><div class="ms-auto d-flex flex-column align-items-end"><a class="btn pager-btn rounded-3 fw-semibold py-2 px-3 d-inline-flex align-items-center gap-2" style=min-width:12rem href=/43/streams/tutorial/ rel=next aria-label="Next: Write a streams app"><span class="fw-semibold text-dark">Next:</span>
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Write a streams app
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
diff --git a/community/_print/index.html b/community/_print/index.html
index 85e3ea1113..bf72214762 100644
--- a/community/_print/index.html
+++ b/community/_print/index.html
@@ -14,7 +14,20 @@ Read more"><meta property="og:title" content="Community"><meta property="og:desc
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
<a href=# onclick="return print(),!1">Click here to print</a>.</p><p><a href=/community/>Return to the regular view of this page</a>.</p></div><h1 class=title>Community</h1><ul><li>1: <a href=#pg-0665cd9e48e73cb4cfd162eb35b2877c>Books and Papers</a></li><li>2: <a href=#pg-3bb5697a9ed9f7f65802735c7b7390ee>Contact</a></li><li>3: <a href=#pg-d721f98237364e1b51b2907b18ce1b88>CVE List</a></li><li>4: <a href=#pg-b360854f29764337de0e05139da8b5ed>Developer Guide</a></li><li>5: <a href=#pg-089c35 [...]
-Please follow this space for updates!</p></div></div><div class="col-lg-4 mb-5 mb-lg-0 text-center"><div class="mb-4 h1"><i class="fas fa-link"></i></div><h4 class=h3>Kafka Summit</h4><div class=mb-0><p>Join us at <a href=https://kafka-summit.org target=_blank rel=noopener>Kafka Summit</a></p></div></div><div class="col-lg-4 mb-5 mb-lg-0 text-center"><div class="mb-4 h1"><i class="fas fa-link"></i></div><h4 class=h3>Project Wiki</h4><div class=mb-0><p>Check out our project <a href=https: [...]
+Please follow this space for updates!</p></div></div><div class="col-lg-4 mb-5 mb-lg-0 text-center"><div class="mb-4 h1"><i class="fas fa-link"></i></div><h4 class=h3>Kafka Summit</h4><div class=mb-0><p>Join us at <a href=https://kafka-summit.org target=_blank rel=noopener>Kafka Summit</a></p></div></div><div class="col-lg-4 mb-5 mb-lg-0 text-center"><div class="mb-4 h1"><i class="fas fa-link"></i></div><h4 class=h3>Project Wiki</h4><div class=mb-0><p>Check out our project <a href=https: [...]
+</a><a href=https://www.confluent.io/ebook/i-heart-logs-event-data-stream-processing-and-data-integration/ target=_blank rel=noopener><img src=/images/books/book-heart-logs.jpg>
+</a><a href=https://dataintensive.net/ target=_blank rel=noopener><img src=/images/books/book-ddia.png>
+</a><a href=https://www.confluent.io/designing-event-driven-systems/ target=_blank rel=noopener><img src=/images/books/book-designing-eds.jpg>
+</a><a href=https://www.confluent.io/stream-processing/ target=_blank rel=noopener><img src=/images/books/book-making-sense.png>
+</a><a href=https://www.manning.com/books/kafka-streams-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-streams-action.png>
+</a><a href=https://www.manning.com/books/kafka-streams-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-streams-in-action.jpg>
+</a><a href=https://www.learningjournal.guru/ebook/kafka-streams-real-time-stream-processing/ target=_blank rel=noopener><img src=/images/books/book-kafka-streams-journal.jpg>
+</a><a href=https://www.manning.com/books/event-streams-in-action target=_blank rel=noopener><img src=/images/books/book-event-streams-action.png>
+</a><a href=https://www.amazon.com/dp/B0863R7MKG/ target=_blank rel=noopener><img src=/images/books/book-effective-kafka.png>
+</a><a href=https://www.kafka-streams-book.com/ target=_blank rel=noopener><img src=/images/books/book-kafka-streams-ksqldb.png>
+</a><a href=https://www.manning.com/books/kafka-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-action.png>
+</a><a href=https://www.oreilly.com/library/view/kafka-connect/9781098126520/ target=_blank rel=noopener><img src=/images/books/book-kafka-connect.png>
+</a><a href=https://www.manning.com/books/kafka-for-architects/ target=_blank rel=noopener><img src=/images/books/book-kafka-for-architects.png></a></p><h2 id=academic-references-and-papers>Academic References and Papers<a class=td-heading-self-link href=#academic-references-and-papers aria-label="Heading self-link"></a></h2><p>The following academic papers and publications cover Apache Kafka and/or the subject of event streaming in general.</p><ul><li><a href=https://openproceedings.org [...]
Note that the mailing list works on plain text emails. Sending HTML based emails can leads to issues and should be avoided.</li><li><strong>Developer mailing list</strong> : A list for discussion on Kafka® development. To subscribe, send an email to <a href=mailto:dev-subscribe@kafka.apache.org>dev-subscribe@kafka.apache.org</a>. Once subscribed, you can have discussion on Kafka® development by mailing to <a href=mailto:dev@kafka.apache.org>dev@kafka.apache.org</a>. Archives are availabl [...]
Note that the mailing list works on plain text emails. Sending HTML based emails can leads to issues and should be avoided.</li><li><strong>JIRA mailing list</strong> : A list to track Kafka® <a href=https://issues.apache.org/jira/projects/KAFKA target=_blank rel=noopener>JIRA</a> notifications. To subscribe, send an email to <a href=mailto:jira-subscribe@kafka.apache.org>jira-subscribe@kafka.apache.org</a>. Archives are available <a href=https://lists.apache.org/list.html?jira@kafka.apa [...]
This discrepancy can result in misconfigured Access Control Lists (ACLs) and unintended security postures,
diff --git a/community/books_and_papers/index.html b/community/books_and_papers/index.html
index ff70a6e0fc..71c068419b 100644
--- a/community/books_and_papers/index.html
+++ b/community/books_and_papers/index.html
@@ -26,7 +26,20 @@ KSQL: Streaming SQL Engine for Apache Kafka by Hojjat Jafarpour, Rohan Desai, Da
<a href=https://github.com/apache/kafka-site//edit/markdown/content/en/community/books_and_papers.md class="td-page-meta--edit td-page-meta__edit" target=_blank rel=noopener><i class="fa-solid fa-pen-to-square fa-fw"></i> Edit this page</a>
<a href="https://github.com/apache/kafka-site//new/markdown/content/en/community?filename=change-me.md&value=---%0Atitle%3A+%22Long+Page+Title%22%0AlinkTitle%3A+%22Short+Nav+Title%22%0Aweight%3A+100%0Adescription%3A+%3E-%0A+++++Page+description+for+heading+and+indexes.%0A---%0A%0A%23%23+Heading%0A%0AEdit+this+template+to+create+your+new+page.%0A%0A%2A+Give+it+a+good+name%2C+ending+in+%60.md%60+-+e.g.+%60getting-started.md%60%0A%2A+Edit+the+%22front+matter%22+section+at+the+top+of+the [...]
<a href="https://github.com/apache/kafka-site//issues/new?title=Books%20and%20Papers" class="td-page-meta--issue td-page-meta__issue" target=_blank rel=noopener><i class="fa-solid fa-list-check fa-fw"></i> Create documentation issue</a>
-<a id=print href=/community/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#books>Books</a></li><li><a href=#academic-references-and-papers>Academic References and Papers</a></li></ul></li></ul></nav></div></div><div class="taxonomy taxonomy-terms-cloud taxo-tags"><h5 class=taxonomy-title>Tag Cloud</h5><ul class=taxonomy-terms><li>< [...]
+<a id=print href=/community/_print/><i class="fa-solid fa-print fa-fw"></i> Print entire section</a></div></div><div class=td-sticky-content><div class=td-toc-content><div class=td-toc><nav id=TableOfContents><ul><li><ul><li><a href=#books>Books</a></li><li><a href=#academic-references-and-papers>Academic References and Papers</a></li></ul></li></ul></nav></div></div><div class="taxonomy taxonomy-terms-cloud taxo-tags"><h5 class=taxonomy-title>Tag Cloud</h5><ul class=taxonomy-terms><li>< [...]
+</a><a href=https://www.confluent.io/ebook/i-heart-logs-event-data-stream-processing-and-data-integration/ target=_blank rel=noopener><img src=/images/books/book-heart-logs.jpg>
+</a><a href=https://dataintensive.net/ target=_blank rel=noopener><img src=/images/books/book-ddia.png>
+</a><a href=https://www.confluent.io/designing-event-driven-systems/ target=_blank rel=noopener><img src=/images/books/book-designing-eds.jpg>
+</a><a href=https://www.confluent.io/stream-processing/ target=_blank rel=noopener><img src=/images/books/book-making-sense.png>
+</a><a href=https://www.manning.com/books/kafka-streams-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-streams-action.png>
+</a><a href=https://www.manning.com/books/kafka-streams-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-streams-in-action.jpg>
+</a><a href=https://www.learningjournal.guru/ebook/kafka-streams-real-time-stream-processing/ target=_blank rel=noopener><img src=/images/books/book-kafka-streams-journal.jpg>
+</a><a href=https://www.manning.com/books/event-streams-in-action target=_blank rel=noopener><img src=/images/books/book-event-streams-action.png>
+</a><a href=https://www.amazon.com/dp/B0863R7MKG/ target=_blank rel=noopener><img src=/images/books/book-effective-kafka.png>
+</a><a href=https://www.kafka-streams-book.com/ target=_blank rel=noopener><img src=/images/books/book-kafka-streams-ksqldb.png>
+</a><a href=https://www.manning.com/books/kafka-in-action target=_blank rel=noopener><img src=/images/books/book-kafka-action.png>
+</a><a href=https://www.oreilly.com/library/view/kafka-connect/9781098126520/ target=_blank rel=noopener><img src=/images/books/book-kafka-connect.png>
+</a><a href=https://www.manning.com/books/kafka-for-architects/ target=_blank rel=noopener><img src=/images/books/book-kafka-for-architects.png></a></p><h2 id=academic-references-and-papers>Academic References and Papers<a class=td-heading-self-link href=#academic-references-and-papers aria-label="Heading self-link"></a></h2><p>The following academic papers and publications cover Apache Kafka and/or the subject of event streaming in general.</p><ul><li><a href=https://openproceedings.org [...]
<span class="text-dark text-truncate d-inline-block text-end" style=max-width:18rem>Contact
</span><span class="fw-semibold text-dark">›</span></a></div></nav></div></main></div></div><footer class="td-footer d-print-none"><div class=container-fluid><div class="row align-items-center"><div class="col-12 col-md-3 text-center text-md-start"><div class=td-footer__social-icons><a href=/community/contact/ target=_blank rel=noopener aria-label=Contact class=td-footer__social-link><i class="fa fa-envelope"></i>
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
diff --git a/intro/index.html b/intro/index.html
index 7081249728..e4dbec958a 100644
--- a/intro/index.html
+++ b/intro/index.html
@@ -7,7 +7,8 @@ Technically speaking, event streaming is the practice of capturing data in real-
<span></span>
<span></span></div></button>
<a class="navbar-brand order-1 order-lg-0 mx-auto mx-lg-0" href=/><img src=/logos/kafka_logo--simple.png alt="Apache Kafka" class=navbar-logo-img></a><div class="order-2 d-lg-none" style=width:48px></div><div class="collapse navbar-collapse order-3 order-lg-1" id=main_navbar><ul class="navbar-nav ms-auto"><li class="nav-item dropdown"><a class="nav-link dropdown-toggle" href=/43/getting-started/ aria-haspopup=true aria-expanded=false>Get Started</a><ul class=dropdown-menu><li><a class=dr [...]
-<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
+<i class="fas fa-search"></i></button><div class=search-input-wrapper id=searchInputWrapper><div class="td-search td-search--offline"><div class=td-search__icon></div><input type=search class="td-search__input form-control" placeholder="Search this site…" aria-label="Search this site…" autocomplete=off data-offline-search-index-json-src=/offline-search-index.197b2128381cc22a7f43972449033fde.json data-offline-search-base-href=/ data-offline-search-max-results=10></div></div></div></div></ [...]
+Figure: This example topic has four partitions P1-P4. Two different producer clients are publishing, independently from each other, new events to the topic by writing events over the network to the topic’s partitions. Events with the same key (denoted by their color in the figure) are written to the same partition. Note that both producers can write to the same partition if appropriate.</p><p>To make your data fault-tolerant and highly-available, every topic can be <strong>replicat [...]
</a><a href=https://twitter.com/apachekafka target=_blank rel=noopener aria-label=Twitter class=td-footer__social-link><i class="fab fa-twitter"></i>
</a><a href=https://stackoverflow.com/questions/tagged/apache-kafka target=_blank rel=noopener aria-label="Stack Overflow" class=td-footer__social-link><i class="fab fa-stack-overflow"></i>
</a><a href=https://github.com/apache/kafka target=_blank rel=noopener aria-label=GitHub class=td-footer__social-link><i class="fab fa-github"></i>