'Preserve Kafka Connectors on `docker-compose down`?
I followed Confluent's guides and made both the broker and zookeeper services use named volumes. Apparently, all of the connect service's data are on broker, so I don't need to make connect use a named volume.
However, when I run docker-compose down, then docker-compose up, none of the Kafka Connectors get restored. The topics get restored, so the named volumes are working for broker.
How can I make docker-compose down not delete the Kafka Connectors? Here's part of my docker-compose.yml:
---
version: '3.8'
services:
zookeeper:
image: confluentinc/cp-zookeeper:7.0.1
container_name: zookeeper
ports:
- "2181:2181"
restart: on-failure:3
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
volumes:
- volume_zookeeper:/var/lib/zookeeper
broker:
image: confluentinc/cp-server:7.0.1
container_name: broker
depends_on:
- zookeeper
ports:
- "9092:9092"
- "9101:9101"
restart: on-failure:3
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
# KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1
KAFKA_CONFLUENT_BALANCER_TOPIC_REPLICATION_FACTOR: 1
KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
KAFKA_JMX_PORT: 9101
KAFKA_JMX_HOSTNAME: localhost
KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://schema-registry:8081
CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: broker:29092
CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
CONFLUENT_METRICS_ENABLE: 'false'
CONFLUENT_SUPPORT_CUSTOMER_ID: 'anonymous'
CONFLUENT_REPORTERS_TELEMETRY_AUTO_ENABLE: 'false'
volumes:
- volume_kafka:/var/lib/kafka
schema-registry:
image: confluentinc/cp-schema-registry:7.0.1
container_name: schema-registry
depends_on:
- broker
ports:
- "8081:8081"
restart: on-failure:3
environment:
SCHEMA_REGISTRY_HOST_NAME: schema-registry
SCHEMA_REGISTRY_KAFKASTORE_BOOTSTRAP_SERVERS: 'broker:29092'
SCHEMA_REGISTRY_LISTENERS: http://0.0.0.0:8081
connect:
image: kafka-connect-dockerfile:latest
build:
context: ./framework/infra
dockerfile: ./kafka-connect-dockerfile
container_name: connect
depends_on:
- broker
- schema-registry
ports:
- "8083:8083"
restart: on-failure:3
environment:
CONNECT_BOOTSTRAP_SERVERS: 'broker:29092'
CONNECT_REST_ADVERTISED_HOST_NAME: connect
CONNECT_GROUP_ID: compose-connect-group
CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
CONNECT_VALUE_CONVERTER: io.confluent.connect.avro.AvroConverter
CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081
# CLASSPATH required due to CC-2422
CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.0.1.jar
CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor"
CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor"
CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/opt/kafka-connectors"
CONNECT_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.I0Itec.zkclient=ERROR,org.reflections=ERROR
CONNECT_LOG4J_ROOT_LOGLEVEL: 'WARN'
CONNECT_TOOLS_LOG4J_LOGLEVEL: 'WARN'
CONNECT_REST_PORT: 8083
volumes:
- ./framework/infra/kafka-connectors/jars:/opt/kafka-connectors
volumes:
volume_zookeeper:
driver: local
driver_opts:
type: none
o: bind
device: /var/lib/zookeeper
volume_kafka:
driver: local
driver_opts:
type: none
o: bind
device: /var/lib/kafka
Solution 1:[1]
Kafka Connect connectors are stateless. All their data is stored in Kafka, in the 3 topics defined in the container environment variables
Therefore, you'll need to ensure your mounted volumes for Kafka and Zookeeper are not deleted upon restarts
Sources
This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.
Source: Stack Overflow
| Solution | Source |
|---|---|
| Solution 1 | OneCricketeer |
