blob: a2632913af74958c3046010c3e429d6c9029a265 [file] [log] [blame]
<!--
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership.
The ASF licenses this file to You under the Apache License, Version 2.0
(the "License"); you may not use this file except in compliance with
the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<script>
<!--#include virtual="js/templateData.js" -->
</script>
<script id="quickstart-template" type="text/x-handlebars-template">
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_download" href="#quickstart_download"></a>
<a href="#quickstart_download">Step 1: Get Kafka</a>
</h4>
<p>
<a href="https://www.apache.org/dyn/closer.cgi?path=/kafka/2.7.0/kafka_2.13-2.7.0.tgz">Download</a>
the latest Kafka release and extract it:
</p>
<pre class="line-numbers"><code class="language-bash">$ tar -xzf kafka_2.13-2.7.0.tgz
$ cd kafka_2.13-2.7.0</code></pre>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_startserver" href="#quickstart_startserver"></a>
<a href="#quickstart_startserver">Step 2: Start the Kafka environment</a>
</h4>
<p class="note">
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 class="line-numbers"><code class="language-bash"># Start the ZooKeeper service
# Note: Soon, ZooKeeper will no longer be required by Apache Kafka.
$ bin/zookeeper-server-start.sh config/zookeeper.properties</code></pre>
<p>
Open another terminal session and run:
</p>
<pre class="line-numbers"><code class="language-bash"># Start the Kafka broker service
$ bin/kafka-server-start.sh config/server.properties</code></pre>
<p>
Once all services have successfully launched, you will have a basic Kafka environment running and ready to use.
</p>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_createtopic" href="#quickstart_createtopic"></a>
<a href="#quickstart_createtopic">Step 3: Create a topic to store your events</a>
</h4>
<p>
Kafka is a distributed <em>event streaming platform</em> that lets you read, write, store, and process
<a href="/documentation/#messages"><em>events</em></a> (also called <em>records</em> or
<em>messages</em> in the documentation)
across many machines.
</p>
<p>
Example events are payment transactions, geolocation updates from mobile phones, shipping orders, sensor measurements
from IoT devices or medical equipment, and much more. These events are organized and stored in
<a href="/documentation/#intro_concepts_and_terms"><em>topics</em></a>.
Very simplified, a topic is similar to a folder in a filesystem, and the events are the files in that folder.
</p>
<p>
So before you can write your first events, you must create a topic. Open another terminal session and run:
</p>
<pre class="line-numbers"><code class="language-bash">$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092</code></pre>
<p>
All of Kafka's command line tools have additional options: run the <code>kafka-topics.sh</code> command without any
arguments to display usage information. For example, it can also show you
<a href="/documentation/#intro_concepts_and_terms">details such as the partition count</a>
of the new topic:
</p>
<pre class="line-numbers"><code class="language-bash">$ bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Topic:quickstart-events PartitionCount:1 ReplicationFactor:1 Configs:
Topic: quickstart-events Partition: 0 Leader: 0 Replicas: 0 Isr: 0</code></pre>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_send" href="#quickstart_send"></a>
<a href="#quickstart_send">Step 4: Write some events into the topic</a>
</h4>
<p>
A Kafka client communicates with the Kafka brokers via the network for writing (or reading) events.
Once received, the brokers will store the events in a durable and fault-tolerant manner for as long as you
needeven forever.
</p>
<p>
Run the console producer client to write a few events into your topic.
By default, each line you enter will result in a separate event being written to the topic.
</p>
<pre class="line-numbers"><code class="language-bash">$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
This is my first event
This is my second event</code></pre>
<p>
You can stop the producer client with <code>Ctrl-C</code> at any time.
</p>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_consume" href="#quickstart_consume"></a>
<a href="#quickstart_consume">Step 5: Read the events</a>
</h4>
<p>Open another terminal session and run the console consumer client to read the events you just created:</p>
<pre class="line-numbers"><code class="language-bash">$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
This is my first event
This is my second event</code></pre>
<p>You can stop the consumer client with <code>Ctrl-C</code> at any time.</p>
<p>Feel free to experiment: for example, switch back to your producer terminal (previous step) to write
additional events, and see how the events immediately show up in your consumer terminal.</p>
<p>Because events are durably stored in Kafka, they can be read as many times and by as many consumers as you want.
You can easily verify this by opening yet another terminal session and re-running the previous command again.</p>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_kafkaconnect" href="#quickstart_kafkaconnect"></a>
<a href="#quickstart_kafkaconnect">Step 6: Import/export your data as streams of events with Kafka Connect</a>
</h4>
<p>
You probably have lots of data in existing systems like relational databases or traditional messaging systems,
along with many applications that already use these systems.
<a href="/documentation/#connect">Kafka Connect</a> allows you to continuously ingest
data from external systems into Kafka, and vice versa. It is thus very easy to integrate existing systems with
Kafka. To make this process even easier, there are hundreds of such connectors readily available.
</p>
<p>Take a look at the <a href="/documentation/#connect">Kafka Connect section</a>
to learn more about how to continuously import/export your data into and out of Kafka.</p>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_kafkastreams" href="#quickstart_kafkastreams"></a>
<a href="#quickstart_kafkastreams">Step 7: Process your events with Kafka Streams</a>
</h4>
<p>
Once your data is stored in Kafka as events, you can process the data with the
<a href="/documentation/streams">Kafka Streams</a> client library for Java/Scala.
It allows you to implement mission-critical real-time applications and microservices, where the input
and/or output data is stored in Kafka topics. Kafka Streams combines the simplicity of writing and deploying
standard Java and Scala applications on the client side with the benefits of Kafka's server-side cluster
technology to make these applications highly scalable, elastic, fault-tolerant, and distributed. The library
supports exactly-once processing, stateful operations and aggregations, windowing, joins, processing based
on event-time, and much more.
</p>
<p>To give you a first taste, here's how one would implement the popular <code>WordCount</code> algorithm:</p>
<pre class="line-numbers"><code class="language-bash">KStream&lt;String, String&gt; textLines = builder.stream("quickstart-events");
KTable&lt;String, Long&gt; wordCounts = textLines
.flatMapValues(line -&gt; Arrays.asList(line.toLowerCase().split(" ")))
.groupBy((keyIgnored, word) -&gt; word)
.count();
wordCounts.toStream().to("output-topic", Produced.with(Serdes.String(), Serdes.Long()));</code></pre>
<p>
The <a href="/25/documentation/streams/quickstart">Kafka Streams demo</a>
and the <a href="/25/documentation/streams/tutorial">app development tutorial</a>
demonstrate how to code and run such a streaming application from start to finish.
</p>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_kafkaterminate" href="#quickstart_kafkaterminate"></a>
<a href="#quickstart_kafkaterminate">Step 8: Terminate the Kafka environment</a>
</h4>
<p>
Now that you reached the end of the quickstart, feel free to tear down the Kafka environmentor
continue playing around.
</p>
<ol>
<li>
Stop the producer and consumer clients with <code>Ctrl-C</code>, if you haven't done so already.
</li>
<li>
Stop the Kafka broker with <code>Ctrl-C</code>.
</li>
<li>
Lastly, stop the ZooKeeper server with <code>Ctrl-C</code>.
</li>
</ol>
<p>
If you also want to delete any data of your local Kafka environment including any events you have created
along the way, run the command:
</p>
<pre class="line-numbers"><code class="language-bash">$ rm -rf /tmp/kafka-logs /tmp/zookeeper</code></pre>
</div>
<div class="quickstart-step">
<h4 class="anchor-heading">
<a class="anchor-link" id="quickstart_kafkacongrats" href="#quickstart_kafkacongrats"></a>
<a href="#quickstart_kafkacongrats">Congratulations!</a>
</h4>
<p>You have successfully finished the Apache Kafka quickstart.<div>
<p>To learn more, we suggest the following next steps:</p>
<ul>
<li>
Read through the brief <a href="/intro">Introduction</a>
to learn how Kafka works at a high level, its main concepts, and how it compares to other
technologies. To understand Kafka in more detail, head over to the
<a href="/documentation/">Documentation</a>.
</li>
<li>
Browse through the <a href="/powered-by">Use Cases</a> to learn how
other users in our world-wide community are getting value out of Kafka.
</li>
<!--
<li>
Learn how _Kafka compares to other technologies_ you might be familiar with.
[note to design team: this new page is not yet written]
</li>
-->
<li>
Join a <a href="/events">local Kafka meetup group</a> and
<a href="https://kafka-summit.org/past-events/">watch talks from Kafka Summit</a>,
the main conference of the Kafka community.
</li>
</ul>
</div>
</script>
<div class="p-quickstart"></div>