Phase 1: Migration vorbereitet
authorKai Moritz <kai@juplo.de>
Thu, 17 Apr 2025 20:10:59 +0000 (22:10 +0200)
committerKai Moritz <kai@juplo.de>
Sat, 19 Apr 2025 08:52:45 +0000 (10:52 +0200)
* Die folgenden Setups gehen davon aus, dass die Cluster-ID
  *8e-KqCzwQPqK7EibrzJE5g* ist.
* Daher müssen vor dem Start über `docker compose up setup` die folgenden
  Befehle ausgeführt werden:
+
[source]
--
docker compose up -d zookeeper
sleep 10
docker compose exec zookeeper zookeeper-shell zookeeper:2181 create /cluster
docker compose exec zookeeper zookeeper-shell zookeeper:2181 create /cluster/id
docker compose exec zookeeper zookeeper-shell zookeeper:2181 set /cluster/id '{"version":"1","id":"8e-KqCzwQPqK7EibrzJE5g"}'
docker compose exec zookeeper zookeeper-shell zookeeper:2181 get /cluster/id
--

docker-compose.yml [new file with mode: 0644]

diff --git a/docker-compose.yml b/docker-compose.yml
new file mode 100644 (file)
index 0000000..307bd86
--- /dev/null
@@ -0,0 +1,162 @@
+services:
+  zookeeper:
+    image: confluentinc/cp-zookeeper:7.9.0
+    environment:
+      ZOOKEEPER_CLIENT_PORT: 2181
+    ports:
+      - 2181:2181
+    volumes:
+      - zookeeper-data:/var/lib/zookeeper/data
+      - zookeeper-log:/var/lib/zookeeper/log
+
+  kafka-1:
+    image: confluentinc/cp-kafka:7.9.0
+    environment:
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9081
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
+      KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-1:9092, LOCALHOST://localhost:9081
+      KAFKA_BROKER_ID: 1
+      KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
+      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
+      KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS: 1000
+      KAFKA_LOG4J_LOGGERS: "org.apache.kafka.metadata.migration=TRACE"
+    volumes:
+      - kafka-1-data:/var/lib/kafka/data
+    ports:
+      - 9081:9081
+    stop_grace_period: 120s
+    depends_on:
+      - zookeeper
+
+  kafka-2:
+    image: confluentinc/cp-kafka:7.9.0
+    environment:
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9082
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
+      KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-2:9092, LOCALHOST://localhost:9082
+      KAFKA_BROKER_ID: 2
+      KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
+      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
+      KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS: 10000
+      KAFKA_LOG4J_LOGGERS: "org.apache.kafka.metadata.migration=TRACE"
+    volumes:
+      - kafka-2-data:/var/lib/kafka/data
+    ports:
+      - 9092:9082
+      - 9082:9082
+    networks:
+      default:
+        aliases:
+          - kafka
+    stop_grace_period: 120s
+    depends_on:
+      - zookeeper
+
+  kafka-3:
+    image: confluentinc/cp-kafka:7.9.0
+    environment:
+      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
+      KAFKA_LISTENERS: BROKER://:9092, LOCALHOST://:9083
+      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: BROKER:PLAINTEXT, LOCALHOST:PLAINTEXT
+      KAFKA_ADVERTISED_LISTENERS: BROKER://kafka-3:9092, LOCALHOST://localhost:9083
+      KAFKA_BROKER_ID: 3
+      KAFKA_INTER_BROKER_LISTENER_NAME: BROKER
+      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 3
+      KAFKA_AUTO_CREATE_TOPICS_ENABLE: "false"
+      KAFKA_LOG_RETENTION_CHECK_INTERVAL_MS: 10000
+      KAFKA_LOG4J_LOGGERS: "org.apache.kafka.metadata.migration=TRACE"
+    volumes:
+      - kafka-3-data:/var/lib/kafka/data
+    ports:
+      - 9083:9083
+    stop_grace_period: 120s
+    depends_on:
+      - zookeeper
+
+  cli:
+    image: juplo/toolbox
+    command: sleep infinity
+    stop_grace_period: 0s
+    depends_on:
+      - kafka-1
+      - kafka-2
+      - kafka-3
+
+  setup:
+    image: juplo/toolbox
+    command:
+      - bash
+      - -c
+      - |
+        cub kafka-ready -b kafka-1:9092,kafka-2:9092,kafka-3:9092 3 60 > /dev/null 2>&1 || exit 1
+        if [ -e INITIALIZED ]
+        then
+          echo -n Bereits konfiguriert: 
+          cat INITIALIZED
+          kafka-topics --bootstrap-server kafka:9092 --describe --topic test
+        else
+          kafka-topics --bootstrap-server kafka:9092 \
+                       --delete \
+                       --if-exists \
+                       --topic test
+          kafka-topics --bootstrap-server kafka:9092 \
+                       --create \
+                       --topic test \
+                       --partitions 2 \
+                       --replication-factor 3 \
+                       --config min.insync.replicas=2 \
+          && echo Das Topic \'test\' wurde erfolgreich angelegt: \
+          && kafka-topics --bootstrap-server kafka:9092 --describe --topic test \
+          && date > INITIALIZED
+        fi
+    stop_grace_period: 0s
+    depends_on:
+      - cli
+
+  akhq:
+    image: tchiotludo/akhq:0.23.0
+    ports:
+      - 8888:8080
+    environment:
+      AKHQ_CONFIGURATION: |
+        akhq:
+          connections:
+            docker-kafka-server:
+              properties:
+                bootstrap.servers: "kafka:9092"
+              schema-registry:
+                url: "http://schema-registry:8085"
+              connect:
+                - name: "connect"
+                  url: "http://connect:8083"
+    depends_on:
+      - kafka-1
+      - kafka-2
+      - kafka-3
+
+  producer:
+    image: juplo/simple-producer:1.0-SNAPSHOT
+    command: kafka:9092 test producer
+
+  consumer:
+    image: juplo/simple-consumer:1.0-SNAPSHOT
+    command: kafka:9092 test my-group consumer
+
+  peter:
+    image: juplo/simple-consumer:1.0-SNAPSHOT
+    command: kafka:9092 test my-group peter
+
+  ute:
+    image: juplo/simple-consumer:1.0-SNAPSHOT
+    command: kafka:9092 test my-group ute
+
+volumes:
+  zookeeper-data:
+  zookeeper-log:
+  kafka-1-data:
+  kafka-2-data:
+  kafka-3-data: