Select Page

The writer decided on the Free and Open Source Fund to obtain a donation as a part of the Write for DOnations program.


Apache Kafka is a well-liked dispensed message dealer designed to successfully deal with huge volumes of real-time knowledge. A Kafka cluster is not just extremely scalable and fault-tolerant, nevertheless it additionally has a far upper throughput in comparison to different message agents similar to ActiveMQ and RabbitMQ. Despite the fact that it’s normally used as a post/subscribe messaging gadget, a large number of organizations additionally use it for log aggregation as it gives continual garage for printed messages.

A post/subscribe messaging gadget lets in a number of manufacturers to post messages with out taking into consideration the selection of shoppers or how they’ll procedure the messages. Subscribed shoppers are notified mechanically about updates and the introduction of recent messages. The program is extra environment friendly and scalable than programs the place shoppers ballot periodically to decide if new messages are to be had.

On this instructional, you’re going to set up and use Apache Kafka 1.1.Zero on CentOS 7.

Must haves

To apply alongside, you’re going to want:

  • One CentOS 7 server and a non-root consumer with sudo privileges. Apply the stairs specified on this guide if you happen to would not have a non-root consumer arrange.
  • A minimum of 4GB of RAM at the server. Installations with out this quantity of RAM might reason the Kafka provider to fail, with the Java virtual machine (JVM) throwing an “Out Of Memory” exception all through startup.
  • OpenJDK Eight put in in your server. To put in this model, apply these instructions on putting in particular variations of OpenJDK. Kafka is written in Java, so it calls for a JVM; on the other hand, its startup shell script has a model detection worm that reasons it to fail initially JVM variations above 8.

Step 1 — Making a Consumer for Kafka

Since Kafka can deal with requests over a community, you must create a devoted consumer for it. This minimizes harm for your CentOS system must the Kafka server be compromised. We can create a devoted kafka consumer on this step, however you must create a distinct non-root consumer to accomplish different duties in this server after you have completed putting in place Kafka.

Logged in as your non-root sudo consumer, create a consumer referred to as kafka with the useradd command:

The -m flag guarantees {that a} house listing can be created for the consumer. This house listing, /house/kafka, will act as our workspace listing for executing instructions within the sections under.

Set the password the use of passwd:

Upload the kafka consumer to the wheel crew with the adduser command, in order that it has the privileges required to put in Kafka’s dependencies:

  • sudo usermod -aG wheel kafka

Your kafka consumer is now able. Log into this account the use of su:

Now that we have created the Kafka-specific consumer, we will transfer directly to downloading and extracting the Kafka binaries.

Step 2 — Downloading and Extracting the Kafka Binaries

Let’s obtain and extract the Kafka binaries into devoted folders in our kafka consumer’s house listing.

To start out, create a listing in /house/kafka referred to as Downloads to retailer your downloads:

Use curl to obtain the Kafka binaries:

  • curl "" -o ~/Downloads/kafka.tgz

Create a listing referred to as kafka and alter to this listing. This would be the base listing of the Kafka set up:

  • mkdir ~/kafka && cd ~/kafka

Extract the archive you downloaded the use of the tar command:

  • tar -xvzf ~/Downloads/kafka.tgz --strip 1

We specify the --strip 1 flag to be sure that the archive’s contents are extracted in ~/kafka/ itself and no longer in some other listing (similar to ~/kafka/kafka_2.12-1.1.0/) within it.

Now that we have downloaded and extracted the binaries effectively, we will transfer on configuring to Kafka to permit for subject deletion.

Step 3 — Configuring the Kafka Server

Kafka’s default conduct is not going to let us delete a subject, the class, crew, or feed identify to which messages can also be printed. To change this, let’s edit the configuration report.

Kafka’s configuration choices are laid out in Open this report with vi or your favourite editor:

  • vi ~/kafka/config/

Let’s upload a atmosphere that may let us delete Kafka subjects. Press i to insert textual content, and upload the next to the ground of the report:


delete.subject.allow = true

If you end up completed, press ESC to go out insert mode and :wq to write down the adjustments to the report and give up. Now that we have configured Kafka, we will transfer on to making systemd unit information for operating and enabling it on startup.

Step 4 — Developing Systemd Unit Recordsdata and Beginning the Kafka Server

On this phase, we can create systemd unit files for the Kafka provider. This may increasingly lend a hand us carry out commonplace provider movements similar to beginning, preventing, and restarting Kafka in a way in keeping with different Linux products and services.

Zookeeper is a provider that Kafka makes use of to control its cluster state and configurations. It’s regularly utilized in many dispensed programs as an integral part. If you want to grasp extra about it, consult with the legitimate Zookeeper docs.

Create the unit report for zookeeper:

  • sudo vi /and many others/systemd/gadget/zookeeper.provider

Input the next unit definition into the report:

/and many others/systemd/gadget/zookeeper.provider

Calls for=community.goal remote-fs.goal
After=community.goal remote-fs.goal

ExecStart=/house/kafka/kafka/bin/ /house/kafka/kafka/config/


The [Unit] phase specifies that Zookeeper calls for networking and the filesystem to be able prior to it may delivery.

The [Service] phase specifies that systemd must use the and shell information for beginning and preventing the provider. It additionally specifies that Zookeeper must be restarted mechanically if it exits abnormally.

Subsequent, create the systemd provider report for kafka:

  • sudo vi /and many others/systemd/gadget/kafka.provider

Input the next unit definition into the report:

/and many others/systemd/gadget/kafka.provider

Calls for=zookeeper.provider

ExecStart=/bin/sh -c '/house/kafka/kafka/bin/ /house/kafka/kafka/config/ > /house/kafka/kafka/kafka.log 2>&1'


The [Unit] phase specifies that this unit report is determined by zookeeper.provider. This may increasingly be sure that zookeeper will get began mechanically when the kafa provider begins.

The [Service] phase specifies that systemd must use the and shell information for beginning and preventing the provider. It additionally specifies that Kafka must be restarted mechanically if it exits abnormally.

Now that the gadgets were outlined, delivery Kafka with the next command:

  • sudo systemctl delivery kafka

To be sure that the server has began effectively, test the magazine logs for the kafka unit:

You must see output very similar to the next:


Jul 17 18:38:59 kafka-centos systemd[1]: Began kafka.provider.

You presently have a Kafka server listening on port 9092.

Whilst we’ve began the kafka provider, if we have been to reboot our server, it could no longer be began mechanically. To allow kafka on server boot, run:

  • sudo systemctl allow kafka

Now that we have began and enabled the products and services, let’s test the set up.

Step 5 — Trying out the Set up

Let’s post and devour a “Hello World” message to verify the Kafka server is behaving appropriately. Publishing messages in Kafka calls for:

  • A manufacturer, which allows the newsletter of information and information to subjects.
  • A user, which reads messages and information from subjects.

First, create an issue named TutorialTopic through typing:

  • ~/kafka/bin/ --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic TutorialTopic

You’ll be able to create a manufacturer from the command line the use of the script. It expects the Kafka server’s hostname, port, and an issue identify as arguments.

Post the string "Hello, World" to the TutorialTopic subject through typing:

  • echo "Hello, World" | ~/kafka/bin/ --broker-list localhost:9092 --topic TutorialTopic > /dev/null

Subsequent, you’ll be able to create a Kafka user the use of the script. It expects the ZooKeeper server’s hostname and port, at the side of an issue identify as arguments.

The next command consumes messages from TutorialTopic. Word using the --from-beginning flag, which permits the intake of messages that have been printed prior to the patron used to be began:

  • ~/kafka/bin/ --bootstrap-server localhost:9092 --topic TutorialTopic --from-beginning

If there aren’t any configuration problems, you must see Hi, Global for your terminal:


Hi, Global

The script will proceed to run, looking forward to extra messages to be printed to the subject. Be at liberty to open a brand new terminal and delivery a manufacturer to post a couple of extra messages. You must be capable to see all of them within the user’s output.

If you end up completed trying out, press CTRL+C to forestall the patron script. Now that we have got examined the set up, let’s transfer directly to putting in KafkaT.

Step 6 — Putting in KafkaT (Not obligatory)

KafkaT is a device from Airbnb that makes it more uncomplicated so that you can view information about your Kafka cluster and carry out sure administrative duties from the command line. As a result of this can be a Ruby gem, you’re going to want Ruby to make use of it. You’re going to additionally want ruby-devel and build-related programs similar to make and gcc so as to construct the opposite gemstones it is determined by. Set up them the use of yum:

  • sudo yum set up ruby ruby-devel make gcc patch

You’ll be able to now set up KafkaT the use of the gem command:

KafkaT makes use of .kafkatcfg because the configuration report to decide the set up and log directories of your Kafka server. It must even have an access pointing KafkaT for your ZooKeeper example.

Create a brand new report referred to as .kafkatcfg:

Upload the next traces to specify the desired details about your Kafka server and Zookeeper example:


  "kafka_path": "~/kafka",
  "log_path": "/tmp/kafka-logs",
  "zk_path": "localhost:2181"

You at the moment are able to make use of KafkaT. For a delivery, here is how you possibly can use it to view information about all Kafka walls:

You’re going to see the next output:


Subject Partition Chief Replicas ISRs TutorialTopic 0 0 [0] [0] __consumer_offsets 0 0 [0] [0] ... ...

You’re going to see TutorialTopic, in addition to __consumer_offsets, an interior subject utilized by Kafka for storing client-related data. You’ll be able to safely forget about traces beginning with __consumer_offsets.

To be informed extra about KafkaT, consult with its GitHub repository.

Step 7 — Environment Up a Multi-Node Cluster (Not obligatory)

If you wish to create a multi-broker cluster the use of extra CentOS 7 machines, you must repeat Step 1, Step 4, and Step Five on each and every of the brand new machines. Moreover, you must make the next adjustments within the report for each and every:

  • The price of the dealer.identification belongings must be modified such that it’s distinctive during the cluster. This belongings uniquely identifies each and every server within the cluster and will have any string as its worth. As an example, "server1", "server2", and many others.

  • The price of the zookeeper.attach belongings must be modified such that each one nodes level to the similar ZooKeeper example. This belongings specifies the Zookeeper example’s cope with and follows the : structure. As an example, "", "" and many others.

If you wish to have a couple of ZooKeeper cases in your cluster, the price of the zookeeper.attach belongings on each and every node must be an an identical, comma-separated string list the IP addresses and port numbers of the entire ZooKeeper cases.

Step 8 — Proscribing the Kafka Consumer

Now that the entire installations are completed, you’ll be able to take away the kafka consumer’s admin privileges. Ahead of you achieve this, sign off and log again in as another non-root sudo consumer. If you’re nonetheless operating the similar shell consultation you began this instructional with, merely sort go out.

Take away the kafka consumer from the sudo crew:

  • sudo gpasswd -d kafka wheel

To additional give a boost to your Kafka server’s safety, lock the kafka consumer’s password the use of the passwd command. This makes positive that no one can without delay log into the server the use of this account:

At this level, handiest root or a sudo consumer can log in as kafka through typing within the following command:

One day, if you wish to liberate it, use passwd with the -u choice:

You’ve gotten now effectively limited the kafka consumer’s admin privileges.


You presently have Apache Kafka operating securely in your CentOS server. You’ll be able to employ it for your tasks through developing Kafka manufacturers and shoppers the use of Kafka clients, which might be to be had for many programming languages. To be informed extra about Kafka, you’ll be able to additionally seek the advice of its documentation.