Kreiranje topica u Kafki vrlo vjerojatno je najčešći operativni zadatak u održavanju Kafka okruženja. Ako ste pročitali moj članak “Kako ne izgubiti podatke iz Kafka klastera” i onemogućili automatiku kreiranja topica onda bi vam ova skripta mogla biti korisna.
Ovu skriptu kreirao sam kako bi si olakšao rad sa više Kafka okruženja i (pre)dugačkim komandnim linijama kafka-topics.sh alata. Primjer za kreiranje topica na jednom okruženju, i prema savjetima iz članka o standardnim postavkama Kafka topica, naredba bi izgledala ovako:
- kafka-topics.sh –bootstrap-server “kafka1:9092,kafka2:9092,kafka3:9092” –command-config /opt/kafka/config/cluster1/consumer.properties –create –topic new-topic –partitions 2 –replication-factor 3 –config min.insync.replicas=2 –config segment.bytes=1073741824 –config segment.ms=86400000 –config retention.ms=2678400000 –config retention.bytes=1073741824
Skripta koju sam pripremio skraćuje kreiranje topica na:
- create-topic.sh -e=cluster1 -t=new-topic
Struktura foldera
Prije samog objašnjenja skripte potrebno je kreirati određenu strukturu foldera kako bi skripta bila primjenjiva u slučaju dodavanja novih Kafka klastera. Također potrebno je preuzeti i binary Kafke sa slijedećeg linka.
Binary Kafke otpakirajte u /opt/kafka/kafka_2.12-2.3.0/
Kreirajte /opt/kafka/config/ folder. Unutar foldera kreirajte podfoldere koji će sadržavati potrebne datoteke za upravljanje Kafka klasterom (prema primjeru na slici). Za ovu skriptu nisu potrebne sve datoteke sa slike, ali za slijedeće skripte/projekte biti će potrebne. Obratite pozornost na naziv foldera klastera kako će to biti parametar koji će se koristiti za jedan od atributa skripte.

Sve datoteke, osim servers.list, su standardne datoteke potrebne za rad Kafka klastera te nije potrebno dodatno objašnjenje. servers.list datoteka sadrži nazive i portove Kafka brokera i Zookeeper servera u obliku:
- BROKERS=”kafka1:9092,kafka2:9092,kafka3:9092″
- ZOOKEEPERS=”kafka1:2181,kafka2:2181,kafka3:2181″
Skripta
Skripti je potrebno proslijediti dva parametra:
- -e=xxxx – naziv okruženja a u skladu sa nazivom foldera što je ranije opisano (gdje je xxxx naziv okruženja/foldera)
- -t=XXXX – naziv topica koji će se kreirati (gdje je xxxx željeni naziv)
Skripta kreira topic prema preporučenim postavkama (prema članku) na okruženju koje se sastoji od 3 brokera. U slučaju da vaše okruženje zahtijeva drugačije standardne postavke ili se sastoji od više brokera prilagodite atribute na liniji 46.
#!/bin/bash # Set Kafka tools path KAFKA_FOLDER="/opt/kafka/kafka_2.12-2.3.0/" # Set variables for output coloring GREEN='\033[0;32m' DEF='\033[0m' # Default env to test and topic to all ENVIRONMENT='cluster1' TOPIC='' # Get arguments for i in "$@" do case $i in -e=*|--environment=*) ENVIRONMENT="${i#*=}" shift ;; -t=*|--topic=*) TOPIC="${i#*=}" shift ;; *) # Not parsed arguments ;; esac done # Check if environment exists if [ -f "/opt/kafka/config/$ENVIRONMENT/servers.list" ]; then # Set env export KAFKA_OPTS="-Djava.security.auth.login.config=/opt/kafka/config/$ENVIRONMENT/kafka_jaas.conf" source /opt/kafka/config/$ENVIRONMENT/servers.list BOOTSTRAP_SERVERS=$BROKERS PROPERTIES_CONFIG="/opt/kafka/config/$ENVIRONMENT/consumer.properties" echo -e "Running on environment: ${ENVIRONMENT} (${BOOTSTRAP_SERVERS})" if [ $TOPIC = "" ] then echo -e "Topic name must be specified" else $KAFKA_FOLDER/bin/kafka-topics.sh --bootstrap-server $BOOTSTRAP_SERVERS --command-config $PROPERTIES_CONFIG --create --topic $TOPIC --partitions 2 --replication-factor 3 --config min.insync.replicas=2 --config segment.bytes=1073741824 --config segment.ms=86400000 --config retention.ms=2678400000 --config retention.bytes=1073741824 fi else echo "Environment $ENVIRONMENT does not exist" fi
Skripta je dostupna i u GitHub repozitoriju.