Kafka configuration

Apache Kafka is a distributed streaming platform. It is useful for building real-time streaming data pipelines to get data between the systems or applications. Another useful feature is real-time streaming applications that can transform streams of data or react on a stream of data.

On GNU/Linux

Arch Linux

[ ]:
$ yay -S kafka
$ sudo pip install kafka-python

Ubuntu

A very useful guide (and recommended) can be readed in tecadmin.net, just follow it until step 3.

TL;DR

[ ]:
$ sudo apt update
$ sudo apt install default-jdk
$ sudo pip install kafka-python

$ wget http://www-us.apache.org/dist/kafka/2.4.0/kafka_2.13-2.4.0.tgz

$ tar xzf kafka_2.13-2.4.0.tgz
$ mv kafka_2.13-2.4.0 /usr/local/kafka

$ echo """[Unit]
Description=Apache Zookeeper server
Documentation=http://zookeeper.apache.org
Requires=network.target remote-fs.target
After=network.target remote-fs.target

[Service]
Type=simple
ExecStart=/usr/local/kafka/bin/zookeeper-server-start.sh /usr/local/kafka/config/zookeeper.properties
ExecStop=/usr/local/kafka/bin/zookeeper-server-stop.sh
Restart=on-abnormal

[Install]
WantedBy=multi-user.target""" >> /etc/systemd/system/zookeeper.service

$ echo """[Unit]
Description=Apache Kafka Server
Documentation=http://kafka.apache.org/documentation.html
Requires=zookeeper.service

[Service]
Type=simple
Environment="JAVA_HOME=/usr/lib/jvm/java-1.11.0-openjdk-amd64"
ExecStart=/usr/local/kafka/bin/kafka-server-start.sh /usr/local/kafka/config/server.properties
ExecStop=/usr/local/kafka/bin/kafka-server-stop.sh

[Install]
WantedBy=multi-user.target
""" >> /etc/systemd/system/kafka.service

$ systemctl daemon-reload

Daemon

Start daemon, on Ubuntu must be zookeeper.service instead of zookeeper@kafka.service.

[ ]:
systemctl enable kafka.service zookeeper@kafka.service
systemctl start kafka.service zookeeper@kafka.service

Create topic, on Ubuntu the complete path moust be specified: /usr/local/kafka/bin/kafka-topics.sh

[ ]:
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic binary
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic binary0
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic binary1
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic binary2
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic binary3
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic eeg
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic aux
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic eeg0
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic eeg1
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic eeg2
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic eeg3
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic marker
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic annotation
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic command
kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic feedback

Change retention

[ ]:
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name binary --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name binary0 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name binary1 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name binary2 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name binary3 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name aux --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name eeg --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name eeg0 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name eeg1 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name eeg2 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name eeg3 --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name marker --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name annotation --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name command --alter --add-config retention.ms=1000
kafka-configs.sh --bootstrap-server localhost:9092 --entity-type topics --entity-name feedback --alter --add-config retention.ms=1000

Windows

Who cares?