13 December 2019 ~ 0 Comments

Kafka create-topic.sh

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.

Struktura foldera

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 "[email protected]"
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.

Tags:

Leave a Reply