rwadurian/backend/services/scripts/debezium/register-connectors.sh

119 lines
3.6 KiB
Bash

#!/bin/bash
# =============================================================================
# Debezium Connector Registration Script
# =============================================================================
# Usage: ./register-connectors.sh
#
# This script registers the PostgreSQL connector for identity-service CDC
# It should be run after Debezium Connect is fully started
# =============================================================================
set -e
CONNECT_URL="${DEBEZIUM_CONNECT_URL:-http://localhost:8083}"
MAX_RETRIES=30
RETRY_INTERVAL=5
echo "=== Debezium Connector Registration ==="
echo "Connect URL: $CONNECT_URL"
# Wait for Debezium Connect to be ready
echo "Waiting for Debezium Connect to be ready..."
for i in $(seq 1 $MAX_RETRIES); do
if curl -s "$CONNECT_URL/" > /dev/null 2>&1; then
echo "Debezium Connect is ready!"
break
fi
if [ $i -eq $MAX_RETRIES ]; then
echo "ERROR: Debezium Connect is not ready after $MAX_RETRIES attempts"
exit 1
fi
echo "Attempt $i/$MAX_RETRIES - waiting ${RETRY_INTERVAL}s..."
sleep $RETRY_INTERVAL
done
# Check existing connectors
echo ""
echo "Checking existing connectors..."
EXISTING=$(curl -s "$CONNECT_URL/connectors")
echo "Existing connectors: $EXISTING"
# Register identity-postgres connector
echo ""
echo "Registering identity-postgres-connector..."
CONNECTOR_CONFIG='{
"name": "identity-postgres-connector",
"config": {
"connector.class": "io.debezium.connector.postgresql.PostgresConnector",
"tasks.max": "1",
"database.hostname": "postgres",
"database.port": "5432",
"database.user": "'${POSTGRES_USER:-rwa_user}'",
"database.password": "'${POSTGRES_PASSWORD:-rwa_secure_password}'",
"database.dbname": "rwa_identity",
"database.server.name": "identity",
"topic.prefix": "cdc.identity",
"table.include.list": "public.user_accounts",
"plugin.name": "pgoutput",
"publication.name": "debezium_identity_publication",
"publication.autocreate.mode": "filtered",
"slot.name": "debezium_identity_slot",
"key.converter": "org.apache.kafka.connect.json.JsonConverter",
"key.converter.schemas.enable": "false",
"value.converter": "org.apache.kafka.connect.json.JsonConverter",
"value.converter.schemas.enable": "false",
"transforms": "unwrap",
"transforms.unwrap.type": "io.debezium.transforms.ExtractNewRecordState",
"transforms.unwrap.drop.tombstones": "true",
"transforms.unwrap.delete.handling.mode": "rewrite",
"transforms.unwrap.add.fields": "op,table,source.ts_ms",
"heartbeat.interval.ms": "10000",
"snapshot.mode": "initial",
"decimal.handling.mode": "string",
"time.precision.mode": "connect"
}
}'
# Delete existing connector if exists
if echo "$EXISTING" | grep -q "identity-postgres-connector"; then
echo "Deleting existing identity-postgres-connector..."
curl -s -X DELETE "$CONNECT_URL/connectors/identity-postgres-connector"
sleep 2
fi
# Create connector
RESULT=$(curl -s -X POST \
-H "Content-Type: application/json" \
-d "$CONNECTOR_CONFIG" \
"$CONNECT_URL/connectors")
echo "Result: $RESULT"
# Check connector status
echo ""
echo "Checking connector status..."
sleep 3
STATUS=$(curl -s "$CONNECT_URL/connectors/identity-postgres-connector/status")
echo "Connector status: $STATUS"
echo ""
echo "=== Registration Complete ==="
echo ""
echo "Kafka topics created:"
echo " - cdc.identity.public.user_accounts"
echo ""
echo "To verify:"
echo " curl $CONNECT_URL/connectors"
echo " curl $CONNECT_URL/connectors/identity-postgres-connector/status"