123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291 |
- version: '3.9'
- services:
- zookeeper-1:
- hostname: 'zookeeper-1'
- image: 'docker.io/library/zookeeper:3.6.3'
- init: true
- restart: always
- environment:
- ZOO_MY_ID: '1'
- ZOO_SERVERS: 'server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888'
- ZOO_CFG_EXTRA: 'clientPort=2181 peerPort=2888 leaderPort=3888'
- ZOO_INIT_LIMIT: '10'
- ZOO_SYNC_LIMIT: '5'
- ZOO_MAX_CLIENT_CNXNS: '0'
- ZOO_4LW_COMMANDS_WHITELIST: 'mntr,conf,ruok'
- zookeeper-2:
- hostname: 'zookeeper-2'
- image: 'docker.io/library/zookeeper:3.6.3'
- init: true
- restart: always
- environment:
- ZOO_MY_ID: '2'
- ZOO_SERVERS: 'server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888'
- ZOO_CFG_EXTRA: 'clientPort=2181 peerPort=2888 leaderPort=3888'
- ZOO_INIT_LIMIT: '10'
- ZOO_SYNC_LIMIT: '5'
- ZOO_MAX_CLIENT_CNXNS: '0'
- ZOO_4LW_COMMANDS_WHITELIST: 'mntr,conf,ruok'
- zookeeper-3:
- hostname: 'zookeeper-3'
- image: 'docker.io/library/zookeeper:3.6.3'
- init: true
- restart: always
- environment:
- ZOO_MY_ID: '3'
- ZOO_SERVERS: 'server.1=zookeeper-1:2888:3888 server.2=zookeeper-2:2888:3888 server.3=zookeeper-3:2888:3888'
- ZOO_CFG_EXTRA: 'clientPort=2181 peerPort=2888 leaderPort=3888'
- ZOO_INIT_LIMIT: '10'
- ZOO_SYNC_LIMIT: '5'
- ZOO_MAX_CLIENT_CNXNS: '0'
- ZOO_4LW_COMMANDS_WHITELIST: 'mntr,conf,ruok'
- kafka-1:
- hostname: 'kafka-1'
- image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.6.0}'
- init: true
- build:
- context: .
- dockerfile: Dockerfile.kafka
- args:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- SCALA_VERSION: ${SCALA_VERSION:-2.13}
- healthcheck:
- test:
- [
- 'CMD',
- '/opt/kafka-${KAFKA_VERSION:-3.6.0}/bin/kafka-broker-api-versions.sh',
- '--bootstrap-server',
- 'kafka-1:9091',
- ]
- interval: 15s
- timeout: 15s
- retries: 10
- start_period: 360s
- depends_on:
- - zookeeper-1
- - zookeeper-2
- - zookeeper-3
- - toxiproxy
- restart: always
- environment:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
- KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29091'
- KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-1:9091,LISTENER_LOCAL://localhost:29091'
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT'
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
- KAFKA_CFG_BROKER_ID: '1'
- KAFKA_CFG_BROKER_RACK: '1'
- KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
- KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
- KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
- KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
- KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
- KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
- kafka-2:
- hostname: 'kafka-2'
- image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.6.0}'
- init: true
- build:
- context: .
- dockerfile: Dockerfile.kafka
- args:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- SCALA_VERSION: ${SCALA_VERSION:-2.13}
- healthcheck:
- test:
- [
- 'CMD',
- '/opt/kafka-${KAFKA_VERSION:-3.6.0}/bin/kafka-broker-api-versions.sh',
- '--bootstrap-server',
- 'kafka-2:9091',
- ]
- interval: 15s
- timeout: 15s
- retries: 10
- start_period: 360s
- depends_on:
- - zookeeper-1
- - zookeeper-2
- - zookeeper-3
- - toxiproxy
- restart: always
- environment:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
- KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29092'
- KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-2:9091,LISTENER_LOCAL://localhost:29092'
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT'
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
- KAFKA_CFG_BROKER_ID: '2'
- KAFKA_CFG_BROKER_RACK: '2'
- KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
- KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
- KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
- KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
- KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
- KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
- kafka-3:
- hostname: 'kafka-3'
- image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.6.0}'
- init: true
- build:
- context: .
- dockerfile: Dockerfile.kafka
- args:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- SCALA_VERSION: ${SCALA_VERSION:-2.13}
- healthcheck:
- test:
- [
- 'CMD',
- '/opt/kafka-${KAFKA_VERSION:-3.6.0}/bin/kafka-broker-api-versions.sh',
- '--bootstrap-server',
- 'kafka-3:9091',
- ]
- interval: 15s
- timeout: 15s
- retries: 10
- start_period: 360s
- depends_on:
- - zookeeper-1
- - zookeeper-2
- - zookeeper-3
- - toxiproxy
- restart: always
- environment:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
- KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29093'
- KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-3:9091,LISTENER_LOCAL://localhost:29093'
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT'
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
- KAFKA_CFG_BROKER_ID: '3'
- KAFKA_CFG_BROKER_RACK: '3'
- KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
- KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
- KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
- KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
- KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
- KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
- kafka-4:
- hostname: 'kafka-4'
- image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.6.0}'
- init: true
- build:
- context: .
- dockerfile: Dockerfile.kafka
- args:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- SCALA_VERSION: ${SCALA_VERSION:-2.13}
- healthcheck:
- test:
- [
- 'CMD',
- '/opt/kafka-${KAFKA_VERSION:-3.6.0}/bin/kafka-broker-api-versions.sh',
- '--bootstrap-server',
- 'kafka-4:9091',
- ]
- interval: 15s
- timeout: 15s
- retries: 10
- start_period: 360s
- depends_on:
- - zookeeper-1
- - zookeeper-2
- - zookeeper-3
- - toxiproxy
- restart: always
- environment:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
- KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29094'
- KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-4:9091,LISTENER_LOCAL://localhost:29094'
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT'
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
- KAFKA_CFG_BROKER_ID: '4'
- KAFKA_CFG_BROKER_RACK: '4'
- KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
- KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
- KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
- KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
- KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
- KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
- kafka-5:
- hostname: 'kafka-5'
- image: 'sarama/fv-kafka-${KAFKA_VERSION:-3.6.0}'
- init: true
- build:
- context: .
- dockerfile: Dockerfile.kafka
- args:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- SCALA_VERSION: ${SCALA_VERSION:-2.13}
- healthcheck:
- test:
- [
- 'CMD',
- '/opt/kafka-${KAFKA_VERSION:-3.6.0}/bin/kafka-broker-api-versions.sh',
- '--bootstrap-server',
- 'kafka-5:9091',
- ]
- interval: 15s
- timeout: 15s
- retries: 10
- start_period: 360s
- depends_on:
- - zookeeper-1
- - zookeeper-2
- - zookeeper-3
- - toxiproxy
- restart: always
- environment:
- KAFKA_VERSION: ${KAFKA_VERSION:-3.6.0}
- KAFKA_CFG_ZOOKEEPER_CONNECT: 'zookeeper-1:2181,zookeeper-2:2181,zookeeper-3:2181'
- KAFKA_CFG_LISTENERS: 'LISTENER_INTERNAL://:9091,LISTENER_LOCAL://:29095'
- KAFKA_CFG_ADVERTISED_LISTENERS: 'LISTENER_INTERNAL://kafka-5:9091,LISTENER_LOCAL://localhost:29095'
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME: 'LISTENER_INTERNAL'
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP: 'LISTENER_INTERNAL:PLAINTEXT,LISTENER_LOCAL:PLAINTEXT'
- KAFKA_CFG_DEFAULT_REPLICATION_FACTOR: '2'
- KAFKA_CFG_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: '2'
- KAFKA_CFG_BROKER_ID: '5'
- KAFKA_CFG_BROKER_RACK: '5'
- KAFKA_CFG_ZOOKEEPER_SESSION_TIMEOUT_MS: '6000'
- KAFKA_CFG_ZOOKEEPER_CONNECTION_TIMEOUT_MS: '6000'
- KAFKA_CFG_REPLICA_SELECTOR_CLASS: 'org.apache.kafka.common.replica.RackAwareReplicaSelector'
- KAFKA_CFG_DELETE_TOPIC_ENABLE: 'true'
- KAFKA_CFG_AUTO_CREATE_TOPICS_ENABLE: 'false'
- KAFKA_CFG_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
- KAFKA_JVM_PERFORMANCE_OPTS: "-XX:+IgnoreUnrecognizedVMOptions"
- toxiproxy:
- hostname: 'toxiproxy'
- image: 'ghcr.io/shopify/toxiproxy:2.4.0'
- init: true
- healthcheck:
- test: ['CMD', '/toxiproxy-cli', 'l']
- interval: 15s
- timeout: 15s
- retries: 3
- start_period: 30s
- ports:
- # The tests themselves actually start the proxies on these ports
- - '29091:29091'
- - '29092:29092'
- - '29093:29093'
- - '29094:29094'
- - '29095:29095'
- # This is the toxiproxy API port
- - '8474:8474'
|