I tried to setup CDC with NATS JetStream. I get the following error:
Error Publishing: 503 No Responders Available For Request
Tell me where did I go wrong?
Debezium full log: https://logpaste.com/6IRk5ixw
NATS log: https://logpaste.com/Yr6OTzqm
To reproduce:
- Install go-task
- Install docker-compose
- Copy
application.properties
toconf/debezium/application.properties
- Copy
inst.sql
tomssql/init.sql
- Exec the following commands.
task init
task debezium
# tack clean # to clean up
My setup and configs.
docker-compose.yaml
services:
nats:
image: nats:${NATS_VERSION}
ports:
- 4222:4222
- 8222:8222
command:
- "--debug"
- "--http_port=8222"
- "--jetstream"
healthcheck:
test: wget --no-verbose --tries=1 --spider http://localhost:8222/healthz || exit 1
interval: 10s
timeout: 5s
retries: 3
mssql:
image: mcr.microsoft.com/mssql/server:${MSSQL_VERSION}
hostname: mssql
ports:
- 1433:1433
environment:
ACCEPT_EULA: Y
MSSQL_PID: Developer
MSSQL_AGENT_ENABLED: True
MSSQL_COLLATION: Cyrillic_General_CI_AS
MSSQL_SA_PASSWORD: ${MSSQL_SA_PASSWORD}
healthcheck:
test: /opt/mssql-tools/bin/sqlcmd -S localhost -U sa -P "${MSSQL_SA_PASSWORD}" -Q "SELECT 1" || exit 1
interval: 10s
timeout: 5s
retries: 3
debezium:
image: debezium/server:${DEBEZIUM_VERSION}
ports:
- 8080:8080
depends_on:
- nats
- mssql
volumes:
- $PWD/conf/debezium/application.properties:/debezium/conf/application.properties
# - $PWD/data:/data/offsets.dat
healthcheck:
test: curl --silent http://localhost:8080/q/health || exit 1
interval: 10s
timeout: 5s
retries: 3
application.properties
:
debezium.source.connector.class=io.debezium.connector.sqlserver.SqlServerConnector
debezium.source.offset.storage.file.filename=data/offsets.dat
debezium.source.offset.flush.interval.ms=0
debezium.source.schema.history.internal=io.debezium.storage.file.history.FileSchemaHistory
debezium.source.schema.history.internal.file.filename=data/schema_history.dat
debezium.source.topic.prefix=mssql
debezium.source.database.hostname=mssql
debezium.source.database.port=1433
debezium.source.database.user=dbz
debezium.source.database.password=pass
debezium.source.database.names=test_db
debezium.source.database.applicatiotnIntent=ReadOnly
debezium.source.database.encrypt=false
debezium.source.table.include.list=dbo.test_1,dbo.test_2
debezium.sink.type=nats-jetstream
debezium.sink.nats-jetstream.url=nats://nats:4222
debezium.sink.nats-jetstream.create-stream=true
debezium.sink.nats-jetstream.subjects=*.*.*
debezium.sink.nats-jetstream.storage=file
quarkus.log.level=DEBUG
quarkus.log.console.json=false
init.sql
:
-- Создаём базу данных
CREATE DATABASE [test_db];
ALTER DATABASE [test_db] SET ALLOW_SNAPSHOT_ISOLATION ON;
GO
USE [test_db];
CREATE LOGIN dbz WITH PASSWORD = 'pass', CHECK_POLICY = OFF;
CREATE USER dbz FOR LOGIN dbz;
-- Включаем стриминг изменений (CDC) для базы даныых
EXEC sys.sp_cdc_enable_db;
-- Выдаём права на схемы
GRANT SELECT ON SCHEMA :: dbo TO dbz;
GRANT SELECT ON SCHEMA :: cdc TO dbz;
-- DROP TABLE [test_1];
CREATE TABLE [test_1] (
id int
);
GRANT SELECT ON dbo.[test_1] TO dbz;
-- Включаем стриминг изменений (CDC) для таблицы
EXEC sys.sp_cdc_enable_table @source_schema = 'dbo', @source_name = 'test_1', @role_name = NULL, @supports_net_changes = 0;
INSERT INTO [test_1] (id) VALUES (1), (2), (3), (4), (5);
GO
Taskfile.yml
:
version: "3"
env:
NATS_VERSION: "2.10-alpine"
DEBEZIUM_VERSION: "2.6.2.Final"
MSSQL_VERSION: "2019-latest"
POSTGRES_VERSION: "16.3"
POSTGRES_USER: user
POSTGRES_PASSWORD: Password*
POSTGRES_DB: test_db
MSSQL_SA_PASSWORD: Password*
MSSQL_DB: test_db
tasks:
up:
run: once
cmds:
- docker-compose up --wait --detach
down:
run: once
cmds:
- docker-compose stop
clean:
deps:
- down
cmds:
- docker-compose rm -f
init:
run: once
cmds:
- docker-compose up --wait --detach nats
- docker-compose up --wait --detach mssql
- task: mssql:init
# - docker-compose up --wait --detach debezium
mssql:init:
env:
SQLCMDUSER: sa
SQLCMDPASSWORD: "{{.MSSQL_SA_PASSWORD}}"
SQLCMDSERVER: localhost
cmds:
- sqlcmd --input-file mssql/init.sql
debezium:
cmds:
- docker-compose up debezium --no-log-prefix