mirror of
https://github.com/datahub-project/datahub.git
synced 2025-07-07 17:23:11 +00:00
179 lines
6.1 KiB
YAML
179 lines
6.1 KiB
YAML
---
|
|
services:
|
|
connect:
|
|
image: confluentinc/cp-kafka-connect:7.4.0
|
|
platform: linux/amd64
|
|
env_file: ./../kafka-connect/setup/connect.env
|
|
container_name: test_connect
|
|
hostname: test_connect
|
|
depends_on:
|
|
zookeeper:
|
|
condition: service_healthy
|
|
broker:
|
|
condition: service_healthy
|
|
mysqldb:
|
|
condition: service_healthy
|
|
mongo:
|
|
condition: service_healthy
|
|
ports:
|
|
- "28083:28083"
|
|
restart: on-failure:3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 768M
|
|
reservations:
|
|
memory: 384M
|
|
command:
|
|
- bash
|
|
- -c
|
|
- |
|
|
echo "Installing connectors using confluent-hub"
|
|
|
|
# First verify that confluent-hub exists
|
|
if ! [ -x "$(command -v confluent-hub)" ]; then
|
|
echo "Error: confluent-hub is not installed." >&2
|
|
exit 1
|
|
fi
|
|
|
|
echo "confluent-hub installation verified"
|
|
echo "Installing connectors..."
|
|
|
|
# Install with confluent-hub - ensure all connectors install correctly
|
|
confluent-hub install --no-prompt confluentinc/kafka-connect-jdbc:10.2.5 || { echo "Failed to install JDBC connector"; exit 1; }
|
|
confluent-hub install --no-prompt confluentinc/connect-transforms:1.4.1 || { echo "Failed to install transforms"; exit 1; }
|
|
confluent-hub install --no-prompt confluentinc/kafka-connect-datagen:0.6.0 || { echo "Failed to install datagen"; exit 1; }
|
|
confluent-hub install --no-prompt debezium/debezium-connector-mysql:1.7.0 || { echo "Failed to install Debezium"; exit 1; }
|
|
confluent-hub install --no-prompt wepay/kafka-connect-bigquery:1.6.8 || { echo "Failed to install BigQuery"; exit 1; }
|
|
confluent-hub install --no-prompt mongodb/kafka-connect-mongodb:1.10.1 || { echo "Failed to install MongoDB"; exit 1; }
|
|
confluent-hub install --no-prompt confluentinc/kafka-connect-s3:10.5.1 || { echo "Failed to install S3"; exit 1; }
|
|
|
|
echo "All connectors installed successfully"
|
|
|
|
# Install MySQL JDBC Driver
|
|
mkdir -p /usr/share/confluent-hub-components/confluentinc-kafka-connect-jdbc/lib
|
|
echo "Installing MySQL JDBC Driver..."
|
|
curl -k -SL "https://dev.mysql.com/get/Downloads/Connector-J/mysql-connector-java-8.0.27.tar.gz" \
|
|
| tar -xzf - -C /usr/share/confluent-hub-components/confluentinc-kafka-connect-jdbc/lib \
|
|
--strip-components=1 mysql-connector-java-8.0.27/mysql-connector-java-8.0.27.jar \
|
|
|| { echo "Failed to install MySQL JDBC driver"; exit 1; }
|
|
|
|
# Install EnvVar Config Provider
|
|
echo "Installing EnvVar Config Provider..."
|
|
curl -k -SL "https://repo1.maven.org/maven2/io/strimzi/kafka-env-var-config-provider/0.1.1/kafka-env-var-config-provider-0.1.1.tar.gz" \
|
|
| tar -xzf - -C /usr/share/confluent-hub-components/ \
|
|
|| { echo "Failed to install EnvVar Config Provider"; exit 1; }
|
|
|
|
echo "All components installed successfully, launching Kafka Connect worker..."
|
|
|
|
# Create a flag file to indicate installation is complete for the healthcheck
|
|
# However, this results on a healtcheck not very trustable, as the service startup just after this takes a significant amount of time
|
|
# So client validation is needed; see check_connectors_ready
|
|
touch /tmp/connectors_installed
|
|
|
|
# Launch connect worker and ensure it's in the foreground to catch any startup errors
|
|
exec /etc/confluent/docker/run
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "test -f /tmp/connectors_installed || (echo 'Not all plugins installed yet' && exit 1)"]
|
|
interval: 10s
|
|
timeout: 10s
|
|
retries: 20
|
|
start_period: 60s
|
|
mysqldb:
|
|
image: mysql:8.0
|
|
environment:
|
|
MYSQL_ROOT_PASSWORD: rootpwd
|
|
MYSQL_USER: foo
|
|
MYSQL_PASSWORD: datahub
|
|
MYSQL_DATABASE: librarydb
|
|
container_name: test_mysql
|
|
hostname: test_mysql
|
|
ports:
|
|
- "23306:3306"
|
|
volumes:
|
|
- ./../kafka-connect/setup/conf/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf
|
|
- ./../kafka-connect/setup/mysql-setup.sql:/docker-entrypoint-initdb.d/mysql-setup.sql
|
|
healthcheck:
|
|
test: ["CMD", "mysqladmin", "ping", "-h", "localhost", "-u", "root", "-prootpwd"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 15s
|
|
restart: on-failure:3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
reservations:
|
|
memory: 256M
|
|
|
|
postgresdb:
|
|
image: postgres:alpine
|
|
container_name: "test_postgres"
|
|
environment:
|
|
POSTGRES_PASSWORD: datahub
|
|
volumes:
|
|
- ./../kafka-connect/setup/mysql-setup.sql:/docker-entrypoint-initdb.d/postgres_setup.sql
|
|
ports:
|
|
- "5432:5432"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "pg_isready -U postgres"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 10s
|
|
restart: on-failure:3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 256M
|
|
reservations:
|
|
memory: 128M
|
|
|
|
mongo:
|
|
hostname: mongo
|
|
image: mongo:6.0.7
|
|
container_name: "test_mongo"
|
|
ports:
|
|
- "27017:27017"
|
|
command: --replSet rs0
|
|
environment:
|
|
# Don't set mongo admin user or password to avoid KeyFile authentication
|
|
# which is required when running MongoDB as a replica set
|
|
- MONGO_INITDB_DATABASE=test_db
|
|
volumes:
|
|
- ./../kafka-connect/setup/conf/:/scripts/
|
|
healthcheck:
|
|
test: ["CMD", "mongosh", "--eval", "db.runCommand({ ping: 1 })"]
|
|
interval: 5s
|
|
timeout: 5s
|
|
retries: 5
|
|
start_period: 15s
|
|
restart: on-failure:3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 512M
|
|
reservations:
|
|
memory: 256M
|
|
|
|
s3mock:
|
|
image: adobe/s3mock:2.13.0
|
|
environment:
|
|
- initialBuckets=test-bucket
|
|
ports:
|
|
- "9090:9090"
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "curl -s -f http://localhost:9090/ || exit 1"]
|
|
interval: 5s
|
|
timeout: 3s
|
|
retries: 3
|
|
start_period: 10s
|
|
restart: on-failure:3
|
|
deploy:
|
|
resources:
|
|
limits:
|
|
memory: 256M
|
|
reservations:
|
|
memory: 128M
|