diff --git a/docker/docker-compose-kafka-cluster.yml b/docker/docker-compose-kafka-cluster.yml new file mode 100644 index 0000000..ac48967 --- /dev/null +++ b/docker/docker-compose-kafka-cluster.yml @@ -0,0 +1,111 @@ +services: + controller: + image: apache/kafka:latest + container_name: controller + environment: + KAFKA_NODE_ID: 0 + KAFKA_PROCESS_ROLES: controller + KAFKA_LISTENERS: CONTROLLER://:9093 + KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_CONTROLLER_QUORUM_VOTERS: 0@controller:9093 + + broker-1: + image: apache/kafka:latest + container_name: broker-1 + privileged: true + ports: + - "29092:9092" + - "29093:9093" + - "7071:7071" + environment: + KAFKA_NODE_ID: 1 + KAFKA_PROCESS_ROLES: broker + KAFKA_LISTENERS: PLAINTEXT://:19092,PLAINTEXT_HOST://:9092,SSL://:19093,SSL_HOST://:9093 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker-1:19092,PLAINTEXT_HOST://localhost:29092,SSL://broker-1:19093,SSL_HOST://localhost:29093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,SSL:SSL,SSL_HOST:SSL + KAFKA_SSL_TRUSTSTORE_FILENAME: kafka.broker.truststore.jks + KAFKA_SSL_TRUSTSTORE_CREDENTIALS: password + KAFKA_SSL_KEYSTORE_FILENAME: kafka.broker.keystore.jks + KAFKA_SSL_KEYSTORE_CREDENTIALS: password + KAFKA_SSL_KEY_CREDENTIALS: password + KAFKA_NUM_PARTITIONS: 3 + KAFKA_DEFAULT_REPLICATION_FACTOR: 3 + KAFKA_MIN_INSYNC_REPLICAS: 2 + KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 5 + KAFKA_CONTROLLER_QUORUM_VOTERS: 0@controller:9093 + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_OPTS: -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar=7071:/opt/jmx_exporter/server-metrics.yml + depends_on: + - controller + volumes: + - ./jmx/server-metrics.yml:/opt/jmx_exporter/server-metrics.yml + - ./jmx/jmx_prometheus_javaagent-0.3.1.jar:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar + - ../ssl:/etc/kafka/secrets + + broker-2: + image: apache/kafka:latest + container_name: broker-2 + privileged: true + ports: + - "39092:9092" + - "39093:9093" + - "7072:7071" + environment: + KAFKA_NODE_ID: 2 + KAFKA_PROCESS_ROLES: broker + KAFKA_LISTENERS: PLAINTEXT://:19092,PLAINTEXT_HOST://:9092,SSL://:19093,SSL_HOST://:9093 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker-2:19092,PLAINTEXT_HOST://localhost:39092,SSL://broker-2:19093,SSL_HOST://localhost:39093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,SSL:SSL,SSL_HOST:SSL + KAFKA_SSL_TRUSTSTORE_FILENAME: kafka.broker.truststore.jks + KAFKA_SSL_TRUSTSTORE_CREDENTIALS: password + KAFKA_SSL_KEYSTORE_FILENAME: kafka.broker.keystore.jks + KAFKA_SSL_KEYSTORE_CREDENTIALS: password + KAFKA_SSL_KEY_CREDENTIALS: password + KAFKA_NUM_PARTITIONS: 3 + KAFKA_DEFAULT_REPLICATION_FACTOR: 3 + KAFKA_MIN_INSYNC_REPLICAS: 2 + KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 5 + KAFKA_CONTROLLER_QUORUM_VOTERS: 0@controller:9093 + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_OPTS: -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar=7071:/opt/jmx_exporter/server-metrics.yml + depends_on: + - controller + volumes: + - ./jmx/server-metrics.yml:/opt/jmx_exporter/server-metrics.yml + - ./jmx/jmx_prometheus_javaagent-0.3.1.jar:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar + - ../ssl:/etc/kafka/secrets + + broker-3: + image: apache/kafka:latest + container_name: broker-3 + privileged: true + ports: + - "49092:9092" + - "49093:9093" + - "7073:7071" + environment: + KAFKA_NODE_ID: 3 + KAFKA_PROCESS_ROLES: broker + KAFKA_LISTENERS: PLAINTEXT://:19092,PLAINTEXT_HOST://:9092,SSL://:19093,SSL_HOST://:9093 + KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker-3:19092,PLAINTEXT_HOST://localhost:49092,SSL://broker-3:19093,SSL_HOST://localhost:49093 + KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT,SSL:SSL,SSL_HOST:SSL + KAFKA_SSL_TRUSTSTORE_FILENAME: kafka.broker.truststore.jks + KAFKA_SSL_TRUSTSTORE_CREDENTIALS: password + KAFKA_SSL_KEYSTORE_FILENAME: kafka.broker.keystore.jks + KAFKA_SSL_KEYSTORE_CREDENTIALS: password + KAFKA_SSL_KEY_CREDENTIALS: password + KAFKA_NUM_PARTITIONS: 3 + KAFKA_DEFAULT_REPLICATION_FACTOR: 3 + KAFKA_MIN_INSYNC_REPLICAS: 2 + KAFKA_OFFSETS_TOPIC_NUM_PARTITIONS: 5 + KAFKA_CONTROLLER_QUORUM_VOTERS: 0@controller:9093 + KAFKA_CONTROLLER_LISTENER_NAMES: CONTROLLER + KAFKA_OPTS: -javaagent:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar=7071:/opt/jmx_exporter/server-metrics.yml + depends_on: + - controller + volumes: + - ./jmx/server-metrics.yml:/opt/jmx_exporter/server-metrics.yml + - ./jmx/jmx_prometheus_javaagent-0.3.1.jar:/opt/jmx_exporter/jmx_prometheus_javaagent-0.3.1.jar + - ../ssl:/etc/kafka/secrets +