|
| 1 | +FROM --platform=linux/amd64 eclipse-temurin:21 |
| 2 | +ARG KAFKA_VERSION="3.4.0" |
| 3 | +ARG KAFKA_CONNECT_VERSION="${KAFKA_VERSION}" |
| 4 | +ARG KAFKA_SCALA_VERSION="2.13" |
| 5 | +ARG PUBSUB_GROUP_KAFKA_CONNECTOR_VERSION="1.2.0" |
| 6 | +ARG KAFKA_HOME_ROOT="/opt" |
| 7 | +ARG KAFKA_CONFIG_DIR="${KAFKA_HOME}/config" |
| 8 | +ARG KAFKA_RELEASE="kafka_${KAFKA_SCALA_VERSION}-${KAFKA_VERSION}" |
| 9 | +ARG KAFKA_TARBALL="${KAFKA_RELEASE}.tgz" |
| 10 | +ARG KAFKA_DOWNLOAD_URL="https://archive.apache.org/dist/kafka/${KAFKA_VERSION}/${KAFKA_TARBALL}" |
| 11 | +ENV KAFKA_HEAP_OPTS="-Xms2G -Xmx2G" |
| 12 | +ENV KAFKA_HOME="${KAFKA_HOME_ROOT}/kafka" |
| 13 | +ARG KAFKA_PLUGINS_DIR="${KAFKA_HOME}/plugins" |
| 14 | +# The pubsub-group-kafka-connector file needs to be pre-built/downloaded using maven or other similar tool. |
| 15 | +# References: |
| 16 | +# 1) https://github.com/googleapis/java-pubsub-group-kafka-connector/releases/ |
| 17 | +# 2) https://central.sonatype.com/artifact/com.google.cloud/pubsub-group-kafka-connector |
| 18 | +ARG PUBSUB_GROUP_KAFKA_CONNECTOR_JAR="pubsub-group-kafka-connector-${PUBSUB_GROUP_KAFKA_CONNECTOR_VERSION}.jar" |
| 19 | +ARG KAFKA_CONNECT_CONFIGURE_SCRIPT="configure-kafka-connect.sh" |
| 20 | +ARG BUILD_KAFKA_CONNECT_STARTUP_SCRIPT="start-kafka-connect.sh" |
| 21 | +ARG BUILD_PUBSUB_LITE_JOB_STARTUP_SCRIPT="start-pubsub-lite-connector.sh" |
| 22 | +ARG BUILD_KAFKA_CONNECT_CONFIG_FILE="kafka-connect.properties" |
| 23 | +ARG BUILD_PUBSUB_LITE_JOB_FILE="pubsub_lite_job.json" |
| 24 | +ENV JAVA_HOME="/opt/java/openjdk" |
| 25 | +ENV PATH="${KAFKA_HOME}/bin:${JAVA_HOME}/bin:${PATH}" |
| 26 | +ENV KAFKA_CONNECT_STARTUP_SCRIPT="${KAFKA_HOME}/bin/${BUILD_KAFKA_CONNECT_STARTUP_SCRIPT}" |
| 27 | +ENV PUBSUB_LITE_JOB_STARTUP_SCRIPT="${KAFKA_HOME}/bin/${BUILD_PUBSUB_LITE_JOB_STARTUP_SCRIPT}" |
| 28 | +ENV KAFKA_CONNECT_CONFIG_FILE="${KAFKA_CONFIG_DIR}/${BUILD_KAFKA_CONNECT_CONFIG_FILE}" |
| 29 | +ENV PUBSUB_LITE_JOB_FILE="${KAFKA_CONFIG_DIR}/${BUILD_PUBSUB_LITE_JOB_FILE}" |
| 30 | + |
| 31 | +RUN apt-get -y -qq update \ |
| 32 | + && apt-get -y -qq install iproute2 bind9-dnsutils |
| 33 | + |
| 34 | +RUN wget -q ${KAFKA_DOWNLOAD_URL} \ |
| 35 | + && tar -xzf ${KAFKA_TARBALL} -C ${KAFKA_HOME_ROOT} \ |
| 36 | + && ln -s ${KAFKA_HOME_ROOT}/${KAFKA_RELEASE} ${KAFKA_HOME} \ |
| 37 | + && rm -f ${KAFKA_TARBALL} |
| 38 | + |
| 39 | +RUN mkdir -p ${KAFKA_PLUGINS_DIR} |
| 40 | +COPY ${PUBSUB_GROUP_KAFKA_CONNECTOR_JAR} \ |
| 41 | +${KAFKA_PLUGINS_DIR}/${PUBSUB_GROUP_KAFKA_CONNECTOR_JAR} |
| 42 | +COPY ${BUILD_KAFKA_CONNECT_CONFIG_FILE} ${KAFKA_CONNECT_CONFIG_FILE} |
| 43 | +COPY ${BUILD_PUBSUB_LITE_JOB_FILE} ${PUBSUB_LITE_JOB_FILE} |
| 44 | +COPY ${KAFKA_CONNECT_CONFIGURE_SCRIPT} . |
| 45 | +COPY ${BUILD_KAFKA_CONNECT_STARTUP_SCRIPT} ${KAFKA_CONNECT_STARTUP_SCRIPT} |
| 46 | +COPY ${BUILD_PUBSUB_LITE_JOB_STARTUP_SCRIPT} ${PUBSUB_LITE_JOB_STARTUP_SCRIPT} |
| 47 | +RUN chmod +x ${KAFKA_CONNECT_CONFIGURE_SCRIPT} |
| 48 | +RUN chmod +x ${KAFKA_CONNECT_STARTUP_SCRIPT} |
| 49 | +RUN chmod +x ${PUBSUB_LITE_JOB_STARTUP_SCRIPT} |
| 50 | +RUN --mount=type=secret,id=gmk_bootstrap_servers \ |
| 51 | + --mount=type=secret,id=gmk_sasl_service_account \ |
| 52 | + --mount=type=secret,id=gmk_sasl_service_account_key \ |
| 53 | + --mount=type=secret,id=kafka_sink_topic \ |
| 54 | + --mount=type=secret,id=kafka_connect_group_id \ |
| 55 | + --mount=type=secret,id=pubsub_lite_gcp_project \ |
| 56 | + --mount=type=secret,id=pubsub_lite_gcp_location \ |
| 57 | + --mount=type=secret,id=pubsub_lite_gcp_subscription \ |
| 58 | + --mount=type=secret,id=pubsub_lite_job_name \ |
| 59 | + --mount=type=secret,id=kafka_config_storage_topic \ |
| 60 | + --mount=type=secret,id=kafka_offset_storage_topic \ |
| 61 | + --mount=type=secret,id=kafka_status_storage_topic \ |
| 62 | + --mount=type=secret,id=kafka_ssl_truststore_location \ |
| 63 | + --mount=type=secret,id=kafka_ssl_truststore_password \ |
| 64 | + KAFKA_CONNECT_CONFIG_FILE="${KAFKA_CONNECT_CONFIG_FILE}" \ |
| 65 | + KAFKA_BOOTSTRAP_SERVERS="$(cat /run/secrets/gmk_bootstrap_servers)" \ |
| 66 | + KAFKA_SASL_SERVICE_ACCOUNT="$(cat /run/secrets/gmk_sasl_service_account)"\ |
| 67 | + KAFKA_SASL_SERVICE_ACCOUNT_KEY="$(cat /run/secrets/gmk_sasl_service_account_key)" \ |
| 68 | + KAFKA_SINK_TOPIC="$(cat /run/secrets/kafka_sink_topic)" \ |
| 69 | + KAFKA_CONNECT_GROUP_ID="$(cat /run/secrets/kafka_connect_group_id)" \ |
| 70 | + KAFKA_PLUGINS_DIR=${KAFKA_PLUGINS_DIR} \ |
| 71 | + PUBSUB_LITE_GCP_PROJECT="$(cat /run/secrets/pubsub_lite_gcp_project)" \ |
| 72 | + PUBSUB_LITE_GCP_LOCATION="$(cat /run/secrets/pubsub_lite_gcp_location)" \ |
| 73 | + PUBSUB_LITE_GCP_SUBSCRIPTION="$(cat /run/secrets/pubsub_lite_gcp_subscription)" \ |
| 74 | + PUBSUB_LITE_JOB_NAME="$(cat /run/secrets/pubsub_lite_job_name)" \ |
| 75 | + KAFKA_CONFIG_STORAGE_TOPIC="$(cat /run/secrets/kafka_config_storage_topic)" \ |
| 76 | + KAFKA_OFFSET_STORAGE_TOPIC="$(cat /run/secrets/kafka_offset_storage_topic)" \ |
| 77 | + KAFKA_STATUS_STORAGE_TOPIC="$(cat /run/secrets/kafka_status_storage_topic)" \ |
| 78 | + KAFKA_SSL_TRUSTSTORE_LOCATION="$(cat /run/secrets/kafka_ssl_truststore_location)" \ |
| 79 | + KAFKA_SSL_TRUSTSTORE_PASSWORD="$(cat /run/secrets/kafka_ssl_truststore_password)" \ |
| 80 | + ./${KAFKA_CONNECT_CONFIGURE_SCRIPT} \ |
| 81 | + && rm -f ./${KAFKA_CONNECT_CONFIGURE_SCRIPT} |
| 82 | + |
| 83 | +EXPOSE 8083 |
| 84 | +CMD ${KAFKA_CONNECT_STARTUP_SCRIPT} |
0 commit comments