|
| 1 | +version: '3.8' |
| 2 | + |
| 3 | +services: |
| 4 | + kafka-connect: |
| 5 | + image: confluentinc/cp-kafka-connect:7.5.0 |
| 6 | + container_name: kafka-connect |
| 7 | + hostname: kafka-connect |
| 8 | + user: "0:0" # Run as root to access mounted SSL certificates |
| 9 | + ports: |
| 10 | + - "8083:8083" |
| 11 | + - "9404:9404" # JMX Exporter |
| 12 | + environment: |
| 13 | + # Connect Worker Configuration |
| 14 | + CONNECT_BOOTSTRAP_SERVERS: "${KAFKA_BOOTSTRAP_SERVERS}" |
| 15 | + CONNECT_REST_PORT: 8083 |
| 16 | + CONNECT_REST_ADVERTISED_HOST_NAME: "kafka-connect-2" |
| 17 | + |
| 18 | + # Cluster Configuration |
| 19 | + CONNECT_GROUP_ID: "kafka-connect-cluster" |
| 20 | + CONNECT_CONFIG_STORAGE_TOPIC: "connect-configs" |
| 21 | + CONNECT_OFFSET_STORAGE_TOPIC: "connect-offsets" |
| 22 | + CONNECT_STATUS_STORAGE_TOPIC: "connect-status" |
| 23 | + |
| 24 | + # Topic Replication Factors |
| 25 | + CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 3 |
| 26 | + CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 3 |
| 27 | + CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 3 |
| 28 | + |
| 29 | + # Converters |
| 30 | + CONNECT_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" |
| 31 | + CONNECT_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" |
| 32 | + CONNECT_KEY_CONVERTER_SCHEMAS_ENABLE: "false" |
| 33 | + CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: "false" |
| 34 | + |
| 35 | + # Internal Converters |
| 36 | + CONNECT_INTERNAL_KEY_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" |
| 37 | + CONNECT_INTERNAL_VALUE_CONVERTER: "org.apache.kafka.connect.json.JsonConverter" |
| 38 | + |
| 39 | + # Security Configuration (SASL_SSL) |
| 40 | + CONNECT_SECURITY_PROTOCOL: "${KAFKA_SECURITY_PROTOCOL:-SASL_SSL}" |
| 41 | + CONNECT_SASL_MECHANISM: "${KAFKA_SASL_MECHANISM:-SCRAM-SHA-512}" |
| 42 | + CONNECT_SASL_JAAS_CONFIG: "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"${KAFKA_SASL_USERNAME:-admin}\" password=\"${KAFKA_SASL_PASSWORD}\";" |
| 43 | + CONNECT_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "" |
| 44 | + CONNECT_SSL_TRUSTSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.truststore.jks" |
| 45 | + CONNECT_SSL_TRUSTSTORE_PASSWORD: "${SSL_TRUSTSTORE_PASSWORD:-confluenttruststorepass}" |
| 46 | + CONNECT_SSL_KEYSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.keystore.jks" |
| 47 | + CONNECT_SSL_KEYSTORE_PASSWORD: "${SSL_KEYSTORE_PASSWORD:-confluenttruststorepass}" |
| 48 | + CONNECT_SSL_KEY_PASSWORD: "${SSL_KEY_PASSWORD:-confluenttruststorepass}" |
| 49 | + |
| 50 | + # Admin Client Security |
| 51 | + CONNECT_ADMIN_SECURITY_PROTOCOL: "${KAFKA_SECURITY_PROTOCOL:-SASL_SSL}" |
| 52 | + CONNECT_ADMIN_SASL_MECHANISM: "${KAFKA_SASL_MECHANISM:-SCRAM-SHA-512}" |
| 53 | + CONNECT_ADMIN_SASL_JAAS_CONFIG: "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"${KAFKA_SASL_USERNAME:-admin}\" password=\"${KAFKA_SASL_PASSWORD}\";" |
| 54 | + CONNECT_ADMIN_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "" |
| 55 | + CONNECT_ADMIN_SSL_TRUSTSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.truststore.jks" |
| 56 | + CONNECT_ADMIN_SSL_TRUSTSTORE_PASSWORD: "${SSL_TRUSTSTORE_PASSWORD:-confluenttruststorepass}" |
| 57 | + CONNECT_ADMIN_SSL_KEYSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.keystore.jks" |
| 58 | + CONNECT_ADMIN_SSL_KEYSTORE_PASSWORD: "${SSL_KEYSTORE_PASSWORD:-confluenttruststorepass}" |
| 59 | + CONNECT_ADMIN_SSL_KEY_PASSWORD: "${SSL_KEY_PASSWORD:-confluenttruststorepass}" |
| 60 | + |
| 61 | + # Producer Security |
| 62 | + CONNECT_PRODUCER_SECURITY_PROTOCOL: "${KAFKA_SECURITY_PROTOCOL:-SASL_SSL}" |
| 63 | + CONNECT_PRODUCER_SASL_MECHANISM: "${KAFKA_SASL_MECHANISM:-SCRAM-SHA-512}" |
| 64 | + CONNECT_PRODUCER_SASL_JAAS_CONFIG: "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"${KAFKA_SASL_USERNAME:-admin}\" password=\"${KAFKA_SASL_PASSWORD}\";" |
| 65 | + CONNECT_PRODUCER_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "" |
| 66 | + CONNECT_PRODUCER_SSL_TRUSTSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.truststore.jks" |
| 67 | + CONNECT_PRODUCER_SSL_TRUSTSTORE_PASSWORD: "${SSL_TRUSTSTORE_PASSWORD:-confluenttruststorepass}" |
| 68 | + CONNECT_PRODUCER_SSL_KEYSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.keystore.jks" |
| 69 | + CONNECT_PRODUCER_SSL_KEYSTORE_PASSWORD: "${SSL_KEYSTORE_PASSWORD:-confluenttruststorepass}" |
| 70 | + CONNECT_PRODUCER_SSL_KEY_PASSWORD: "${SSL_KEY_PASSWORD:-confluenttruststorepass}" |
| 71 | + |
| 72 | + # Consumer Security |
| 73 | + CONNECT_CONSUMER_SECURITY_PROTOCOL: "${KAFKA_SECURITY_PROTOCOL:-SASL_SSL}" |
| 74 | + CONNECT_CONSUMER_SASL_MECHANISM: "${KAFKA_SASL_MECHANISM:-SCRAM-SHA-512}" |
| 75 | + CONNECT_CONSUMER_SASL_JAAS_CONFIG: "org.apache.kafka.common.security.scram.ScramLoginModule required username=\"${KAFKA_SASL_USERNAME:-admin}\" password=\"${KAFKA_SASL_PASSWORD}\";" |
| 76 | + CONNECT_CONSUMER_SSL_ENDPOINT_IDENTIFICATION_ALGORITHM: "" |
| 77 | + CONNECT_CONSUMER_SSL_TRUSTSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.truststore.jks" |
| 78 | + CONNECT_CONSUMER_SSL_TRUSTSTORE_PASSWORD: "${SSL_TRUSTSTORE_PASSWORD:-confluenttruststorepass}" |
| 79 | + CONNECT_CONSUMER_SSL_KEYSTORE_LOCATION: "/etc/kafka/secrets/kafka_connect.keystore.jks" |
| 80 | + CONNECT_CONSUMER_SSL_KEYSTORE_PASSWORD: "${SSL_KEYSTORE_PASSWORD:-confluenttruststorepass}" |
| 81 | + CONNECT_CONSUMER_SSL_KEY_PASSWORD: "${SSL_KEY_PASSWORD:-confluenttruststorepass}" |
| 82 | + |
| 83 | + # Plugin Path |
| 84 | + CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/etc/kafka-connect/plugins" |
| 85 | + |
| 86 | + # Logging |
| 87 | + CONNECT_LOG4J_ROOT_LOGLEVEL: INFO |
| 88 | + CONNECT_LOG4J_LOGGERS: "org.reflections=ERROR" |
| 89 | + |
| 90 | + # JMX Configuration |
| 91 | + KAFKA_JMX_PORT: 9101 |
| 92 | + KAFKA_JMX_HOSTNAME: localhost |
| 93 | + KAFKA_JMX_OPTS: "-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=localhost -Dcom.sun.management.jmxremote.rmi.port=9101" |
| 94 | + |
| 95 | + # JMX Exporter for Prometheus + SSL Certificate Verification Disable |
| 96 | + KAFKA_OPTS: "-javaagent:/usr/share/jmx_exporter/jmx_prometheus_javaagent.jar=9404:/etc/kafka-connect/jmx-exporter-config.yml -Dssl.endpoint.identification.algorithm=" |
| 97 | + |
| 98 | + volumes: |
| 99 | + - ./plugins:/etc/kafka-connect/plugins |
| 100 | + - ./jmx_prometheus_javaagent.jar:/usr/share/jmx_exporter/jmx_prometheus_javaagent.jar |
| 101 | + - ./jmx-exporter-config.yml:/etc/kafka-connect/jmx-exporter-config.yml |
| 102 | + - ./connectors:/etc/kafka-connect/connectors |
| 103 | + - /var/ssl/private:/etc/kafka/secrets:ro |
| 104 | + |
| 105 | + healthcheck: |
| 106 | + test: ["CMD", "curl", "-f", "http://localhost:8083/"] |
| 107 | + interval: 30s |
| 108 | + timeout: 10s |
| 109 | + retries: 5 |
| 110 | + start_period: 60s |
| 111 | + |
| 112 | + restart: unless-stopped |
| 113 | + |
| 114 | + networks: |
| 115 | + - kafka-network |
| 116 | + |
| 117 | +networks: |
| 118 | + kafka-network: |
| 119 | + driver: bridge |
0 commit comments