Getting started with Apache Kafka

In this tutorial we will learn how to get started with Apache Kafka. We will create a simple set up with a Single Broker Kafka Cluster and produce/consume messages with it.

Apache Kafka architecture

In Kafka, there are three types of clusters:

• Single node–single broker

• Single node–multiple broker

• Multiple node–multiple broker

The following diagram depicts an example of a single node single broker cluster:

Firstly, download and unzip Apache Kafka from https://kafka.apache.org/downloads

Then, unzip the binary build in a location of your likes, before moving to the next section.

Starting the Zookeeper Server

Next, start the ZooKeeper server. Kafka provides a simple ZooKeeper configuration file to launch a single ZooKeeper instance. To install the ZooKeeper instance, use the following command:

bin/zookeeper-server-start.sh config/zookeeper.properties

Check from the Console logs that Zookeeper is up and running:

[2022-05-10 19:33:16,682] INFO PrepRequestProcessor (sid:0) started, reconfigEnabled=false (org.apache.zookeeper.server.PrepRequestProcessor)
[2022-05-10 19:33:16,683] INFO zookeeper.request_throttler.shutdownTimeout = 10000 (org.apache.zookeeper.server.RequestThrottler)
[2022-05-10 19:33:16,694] INFO Using checkIntervalMs=60000 maxPerMinute=10000 maxNeverUsedIntervalMs=0 (org.apache.zookeeper.server.ContainerManager)
[2022-05-10 19:33:16,695] INFO ZooKeeper audit is disabled. (org.apache.zookeeper.audit.ZKAuditProvider)

The following are the main properties defined in zookeeper.properties:

  • dataDir : The data directory where ZooKeeper is stored (default /tmp/zookeeper)
  • clientPort : The listening port for client requests. By default, ZooKeeper listens in the 2181 TCP port
  • maxClientCnxns : The limit per IP for the number of connections (0 = unbounded):

Starting the Kafka Broker

You can start the Kafka Broker using the default configuration (config.properties)

NOTE: If you are using localhost as bind address, we recommend setting the advertised.listeners property as follows otherwise, it will use the function java.net.InetAddress.getCanonicalHostName as return value:

advertised.listeners=PLAINTEXT://localhost:9092

Next , start the Kafka broker with the following command:

bin/kafka-server-start.sh config/server.properties

Finally, check from the Console logs that also Kafka is up and running:

[2022-05-10 19:34:46,047] INFO [SocketServer listenerType=ZK_BROKER, nodeId=0] Started socket server acceptors and processors (kafka.network.SocketServer)
[2022-05-10 19:34:46,052] INFO Kafka version: 3.1.0 (org.apache.kafka.common.utils.AppInfoParser)

The following are the main properties you can configure in server.properties:

  • Broker id: The unique positive integer id for each broker.
  • Port: The port where the socket server listens on (default port=9092).
  • Log dir: The directory to store log files (default log.dir=/tmp/kafka10-logs).
  • Num partitions: The number of log partitions per topic (default num.partitions=2).
  • ZooKeeper connect: The ZooKeeper connection URL (default zookeeper.connect=localhost:2181)

Creating a Topic

Kafka has the create command to create topics. Let’s create a topic called myTopic with one partition and one replica:

bin/kafka-topics.sh --create --topic myTopic --bootstrap-server localhost:9092

Next, to display information, such as the partition count, you can use the describe option:

bin/kafka-topics.sh --describe --topic myTopic --bootstrap-server localhost:9092

Topic: myTopic	TopicId: npLmDgyLTPWFN1aYVBNFxg	PartitionCount: 1	ReplicationFactor: 1	Configs: segment.bytes=1073741824
  Topic: myTopic	Partition: 0	Leader: 0	Replicas: 0	Isr: 0

Starting a Producer

You can use the kafka-console-producer shell script to start producers . It accepts input from the command line and publishes them as messages. By default, each new line will be a new message:

bin/kafka-console-producer.sh --broker-list localhost:9092 --topic myTopic

Now type the following:

Hello World! [Enter] 

Starting a Consumer

Kafka has the kafka-console-consumer script to start a message consumer client . It shows the output at the command line as soon as it subscribes to the topic in the broker:

bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic myTopic --from-beginning

you see the following output:

Hello World! 

Conclusion

This article was a walk through Apache Kafka set up. We have showed how to install and bootstrap a single cluster node. Then we have learnt how to create a Topic with a producer and a consumer.