<!--
 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.
-->

<h3><a id="quickstart" href="#quickstart">1.3 Quick Start</a></h3>

This tutorial assumes you are starting fresh and have no existing Kafka or ZooKeeper data.

<h4><a id="quickstart_download" href="#quickstart_download">Step 1: Download the code</a></h4>

<a href="https://www.apache.org/dyn/closer.cgi?path=/kafka/0.9.0.0/kafka_2.11-0.9.0.0.tgz" title="Kafka downloads">Download</a> the 0.9.0.0 release and un-tar it.

<pre>
&gt; <b>tar -xzf kafka_2.11-0.9.0.0.tgz</b>
&gt; <b>cd kafka_2.11-0.9.0.0</b>
</pre>

<h4><a id="quickstart_startserver" href="#quickstart_startserver">Step 2: Start the server</a></h4>

<p>
Kafka uses ZooKeeper 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.

<pre>
&gt; <b>bin/zookeeper-server-start.sh config/zookeeper.properties</b>
[2013-04-22 15:01:37,495] INFO Reading configuration from: config/zookeeper.properties (org.apache.zookeeper.server.quorum.QuorumPeerConfig)
...
</pre>

Now start the Kafka server:
<pre>
&gt; <b>bin/kafka-server-start.sh config/server.properties</b>
[2013-04-22 15:01:47,028] INFO Verifying properties (kafka.utils.VerifiableProperties)
[2013-04-22 15:01:47,051] INFO Property socket.send.buffer.bytes is overridden to 1048576 (kafka.utils.VerifiableProperties)
...
</pre>

<h4><a id="quickstart_createtopic" href="#quickstart_createtopic">Step 3: Create a topic</a></h4>

Let's create a topic named "test" with a single partition and only one replica:
<pre>
&gt; <b>bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic test</b>
</pre>

We can now see that topic if we run the list topic command:
<pre>
&gt; <b>bin/kafka-topics.sh --list --zookeeper localhost:2181</b>
test
</pre>
Alternatively, instead of manually creating topics you can also configure your brokers to auto-create topics when a non-existent topic is published to.

<h4><a id="quickstart_send" href="#quickstart_send">Step 4: Send some messages</a></h4>

Kafka comes with a command line client that will take input from a file or from standard input and send it out as messages to the Kafka cluster. By default each line will be sent as a separate message.
<p>
Run the producer and then type a few messages into the console to send to the server.

<pre>
&gt; <b>bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test</b>
<b>This is a message</b>
<b>This is another message</b>
</pre>

<h4><a id="quickstart_consume" href="#quickstart_consume">Step 5: Start a consumer</a></h4>

Kafka also has a command line consumer that will dump out messages to standard output.

<pre>
&gt; <b>bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic test --from-beginning</b>
This is a message
This is another message
</pre>
<p>
If you have each of the above commands running in a different terminal then you should now be able to type messages into the producer terminal and see them appear in the consumer terminal.
</p>
<p>
All of the command line tools have additional options; running the command with no arguments will display usage information documenting them in more detail.
</p>

<h4><a id="quickstart_multibroker" href="#quickstart_multibroker">Step 6: Setting up a multi-broker cluster</a></h4>

So far we have been running against a single broker, but that's no fun. For Kafka, a single broker is just a cluster of size one, so nothing much changes other than starting a few more broker instances. But just to get feel for it, let's expand our cluster to three nodes (still all on our local machine).
<p>
First we make a config file for each of the brokers:
<pre>
&gt; <b>cp config/server.properties config/server-1.properties</b>
&gt; <b>cp config/server.properties config/server-2.properties</b>
</pre>

Now edit these new files and set the following properties:
<pre>

config/server-1.properties:
    broker.id=1
    port=9093
    log.dir=/tmp/kafka-logs-1

config/server-2.properties:
    broker.id=2
    port=9094
    log.dir=/tmp/kafka-logs-2
</pre>
The <code>broker.id</code> property is the unique and permanent name of each node in the cluster. We have to override the port and log directory only because we are running these all on the same machine and we want to keep the brokers from all trying to register on the same port or overwrite each others data.
<p>
We already have Zookeeper and our single node started, so we just need to start the two new nodes:
<pre>
&gt; <b>bin/kafka-server-start.sh config/server-1.properties &amp;</b>
...
&gt; <b>bin/kafka-server-start.sh config/server-2.properties &amp;</b>
...
</pre>

Now create a new topic with a replication factor of three:
<pre>
&gt; <b>bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 1 --topic my-replicated-topic</b>
</pre>

Okay but now that we have a cluster how can we know which broker is doing what? To see that run the "describe topics" command:
<pre>
&gt; <b>bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic</b>
Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: my-replicated-topic	Partition: 0	Leader: 1	Replicas: 1,2,0	Isr: 1,2,0
</pre>
Here is an explanation of output. The first line gives a summary of all the partitions, each additional line gives information about one partition. Since we have only one partition for this topic there is only one line.
<ul>
  <li>"leader" is the node responsible for all reads and writes for the given partition. Each node will be the leader for a randomly selected portion of the partitions.
  <li>"replicas" is the list of nodes that replicate the log for this partition regardless of whether they are the leader or even if they are currently alive.
  <li>"isr" is the set of "in-sync" replicas. This is the subset of the replicas list that is currently alive and caught-up to the leader.
</ul>
Note that in my example node 1 is the leader for the only partition of the topic.
<p>
We can run the same command on the original topic we created to see where it is:
<pre>
&gt; <b>bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic test</b>
Topic:test	PartitionCount:1	ReplicationFactor:1	Configs:
	Topic: test	Partition: 0	Leader: 0	Replicas: 0	Isr: 0
</pre>
So there is no surprise there&mdash;the original topic has no replicas and is on server 0, the only server in our cluster when we created it.
<p>
Let's publish a few messages to our new topic:
<pre>
&gt; <b>bin/kafka-console-producer.sh --broker-list localhost:9092 --topic my-replicated-topic</b>
...
<b>my test message 1</b>
<b>my test message 2</b>
<b>^C</b>
</pre>
Now let's consume these messages:
<pre>
&gt; <b>bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic</b>
...
my test message 1
my test message 2
<b>^C</b>
</pre>

Now let's test out fault-tolerance. Broker 1 was acting as the leader so let's kill it:
<pre>
&gt; <b>ps | grep server-1.properties</b>
<i>7564</i> ttys002    0:15.91 /System/Library/Frameworks/JavaVM.framework/Versions/1.6/Home/bin/java...
&gt; <b>kill -9 7564</b>
</pre>

Leadership has switched to one of the slaves and node 1 is no longer in the in-sync replica set:
<pre>
&gt; <b>bin/kafka-topics.sh --describe --zookeeper localhost:2181 --topic my-replicated-topic</b>
Topic:my-replicated-topic	PartitionCount:1	ReplicationFactor:3	Configs:
	Topic: my-replicated-topic	Partition: 0	Leader: 2	Replicas: 1,2,0	Isr: 2,0
</pre>
But the messages are still be available for consumption even though the leader that took the writes originally is down:
<pre>
&gt; <b>bin/kafka-console-consumer.sh --zookeeper localhost:2181 --from-beginning --topic my-replicated-topic</b>
...
my test message 1
my test message 2
<b>^C</b>
</pre>


<h4><a id="quickstart_kafkaconnect" href="#quickstart_kafkaconnect">Step 7: Use Kafka Connect to import/export data</a></h4>

Writing data from the console and writing it back to the console is a convenient place to start, but you'll probably want
to use data from other sources or export data from Kafka to other systems. For many systems, instead of writing custom
integration code you can use Kafka Connect to import or export data.

Kafka Connect is a tool included with Kafka that imports and exports data to Kafka. It is an extensible tool that runs
<i>connectors</i>, which implement the custom logic for interacting with an external system. In this quickstart we'll see
how to run Kafka Connect with simple connectors that import data from a file to a Kafka topic and export data from a
Kafka topic to a file.

First, we'll start by creating some seed data to test with:

<pre>
&gt; <b>echo -e "foo\nbar" > test.txt</b>
</pre>

Next, we'll start two connectors running in <i>standalone</i> mode, which means they run in a single, local, dedicated
process. We provide three configuration files as parameters. The first is always the configuration for the Kafka Connect
process, containing common configuration such as the Kafka brokers to connect to and the serialization format for data.
The remaining configuration files each specify a connector to create. These files include a unique connector name, the connector
class to instantiate, and any other configuration required by the connector.

<pre>
&gt; <b>bin/connect-standalone.sh config/connect-standalone.properties config/connect-file-source.properties config/connect-file-sink.properties</b>
</pre>

These sample configuration files, included with Kafka, use the default local cluster configuration you started earlier
and create two connectors: the first is a source connector that reads lines from an input file and produces each to a Kafka topic
and the second is a sink connector that reads messages from a Kafka topic and produces each as a line in an output file.

During startup you'll see a number of log messages, including some indicating that the connectors are being instantiated.
Once the Kafka Connect process has started, the source connector should start reading lines from <pre>test.txt</pre> and
producing them to the topic <pre>connect-test</pre>, and the sink connector should start reading messages from the topic <pre>connect-test</pre>
and write them to the file <pre>test.sink.txt</pre>. We can verify the data has been delivered through the entire pipeline
by examining the contents of the output file:

<pre>
&gt; <b>cat test.sink.txt</b>
foo
bar
</pre>

Note that the data is being stored in the Kafka topic <pre>connect-test</pre>, so we can also run a console consumer to see the
data in the topic (or use custom consumer code to process it):

<pre>
&gt; <b>bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic connect-test --from-beginning</b>
{"schema":{"type":"string","optional":false},"payload":"foo"}
{"schema":{"type":"string","optional":false},"payload":"bar"}
...
</pre>

The connectors continue to process data, so we can add data to the file and see it move through the pipeline:

<pre>
&gt; <b>echo "Another line" >> test.txt</b>
</pre>

You should see the line appear in the console consumer output and in the sink file.
