title: How to use the Debezium SQL Server connector with ksqlDB embedded Connect?
body: <p>After a day spent experimenting with various configuration options, I've not been able to get the Debezium SQL Server connector to work with ksqlDB embedded Kafka Connect. There appears to be no clear guidance on either the ksqlDB or Debezium websites on how to set this up.</p>
  <p>What documentation there is suggests that one just needs to install the relevant Kafka Connect plugin into a specified location and everything should work magically out of the box... but unfortunately I've had no such luck and the error messages I'm receiving aren't giving me any feedback to work with.</p>
  <p>My docker-compose.yml looks as follows and I have DEBEZIUM_VERSION=1.3
  and KSQLDB_VERSION=0.11.0 in my .env file:</p>
  <pre><code>version: '3.7'
  services:
    # ***********************
    # * Kafka               *
    # ***********************
    zookeeper:
      image: debezium/zookeeper:${DEBEZIUM_VERSION}
      networks:
        - infrastructure
      ports:
       - 2181:2181
       - 2888:2888
       - 3888:3888
  
    kafka:
      image: debezium/kafka:${DEBEZIUM_VERSION}
      depends_on:
        - zookeeper
      networks:
        - infrastructure
      ports:
       - 9092:9092
       - 19092:19092
      environment:
       - BROKER_ID=1
       - ZOOKEEPER_CONNECT=zookeeper:2181
       - ALLOW_PLAINTEXT_LISTENER=yes
  
    schema-registry:
      image: confluentinc/cp-schema-registry
      depends_on:
        - zookeeper
        - kafka
      networks:
        - infrastructure
      ports:
       - 8181:8181
       - 8081:8081
      environment:
       - SCHEMA_REGISTRY_KAFKASTORE_CONNECTION_URL=zookeeper:2181
       - SCHEMA_REGISTRY_HOST_NAME=schema-registry
       - SCHEMA_REGISTRY_LISTENERS=http://schema-registry:8081
       - SCHEMA_REGISTRY_ACCESS_CONTROL_ALLOW_METHODS=GET,POST,PUT,OPTIONS
       - SCHEMA_REGISTRY_ACCESS_CONTROL_ALLOW_ORIGIN=*
  
    schema-registry-ui:
      image: landoop/schema-registry-ui
      depends_on:
        - schema-registry
      networks:
        - infrastructure
      ports:
       - 8000:8000
      environment:
       - SCHEMAREGISTRY_URL=http://schema-registry:8081
       - PROXY=true
  
    ksqldb-server:
      image: confluentinc/ksqldb-server:${KSQLDB_VERSION}
      build:
        context: ksqldb-sqlserver
        args:
          KSQLDB_VERSION: ${KSQLDB_VERSION}
      hostname: ksqldb-server
      container_name: ksqldb-server
      depends_on:
        - kafka
        - schema-registry
      networks:
        - infrastructure
      ports:
        - &quot;8088:8088&quot;
      #volumes:
      #  - &quot;./confluent-hub-components/:/usr/share/kafka/plugins/&quot;
      environment:
        KSQL_LISTENERS: &quot;http://0.0.0.0:8088&quot;
        KSQL_BOOTSTRAP_SERVERS: &quot;kafka:9092&quot;
        KSQL_KSQL_SCHEMA_REGISTRY_URL: &quot;http://schema-registry:8081&quot;
        KSQL_KSQL_LOGGING_PROCESSING_STREAM_AUTO_CREATE: &quot;true&quot;
        KSQL_KSQL_LOGGING_PROCESSING_TOPIC_AUTO_CREATE: &quot;true&quot;
        KSQL_CONNECT_GROUP_ID: &quot;ksql-connect-cluster&quot;
        KSQL_CONNECT_BOOTSTRAP_SERVERS: &quot;kafka:9092&quot;
        KSQL_CONNECT_KEY_CONVERTER: &quot;io.confluent.connect.avro.AvroConverter&quot;
        KSQL_CONNECT_VALUE_CONVERTER: &quot;io.confluent.connect.avro.AvroConverter&quot;
        KSQL_CONNECT_KEY_CONVERTER_SCHEMA_REGISTRY_URL: &quot;http://schema-registry:8081&quot;
        KSQL_CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: &quot;http://schema-registry:8081&quot;
        KSQL_CONNECT_VALUE_CONVERTER_SCHEMAS_ENABLE: &quot;false&quot;
        KSQL_CONNECT_CONFIG_STORAGE_TOPIC: &quot;ksql-connect-configs&quot;
        KSQL_CONNECT_OFFSET_STORAGE_TOPIC: &quot;ksql-connect-offsets&quot;
        KSQL_CONNECT_STATUS_STORAGE_TOPIC: &quot;ksql-connect-statuses&quot;
        KSQL_CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
        KSQL_CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
        KSQL_CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
        KSQL_CONNECT_PLUGIN_PATH: &quot;/usr/share/confluent-hub-components&quot;
  
    # *-----------------------------*
      # To connect to the DB: 
      #   docker exec -it ksqldb-cli ksql http://ksqldb-server:8088
      # *-----------------------------*  
    ksqldb-cli:
      image: confluentinc/ksqldb-cli:${KSQLDB_VERSION}
      container_name: ksqldb-cli
      depends_on:
        - kafka
        - ksqldb-server
      networks:
        - infrastructure
      entrypoint: /bin/sh
      tty: true
  
  networks:
    infrastructure:
      name: infrastructure
  </code></pre>
  <p>My Dockerfile for the ksqldb-sqlserver service above, which basically just takes the default image and then copies the contents of the Debezium SQL Server connector plugin to /usr/share/confluent-hub-components, looks as follows:</p>
  <pre><code>ARG KSQLDB_VERSION
  
  FROM confluentinc/ksqldb-server:${KSQLDB_VERSION}
  
  ARG DEBEZIUM_VERSION=1.3.0.Beta2
  
  ENV PLUGINS_DIR=/usr/share/confluent-hub-components/
  ENV CONNECT_PLUGIN_PATH=&quot;/usr/share/confluent-hub-components&quot;
  USER root
  RUN mkdir -p $PLUGINS_DIR &amp;&amp; chown -R appuser: $PLUGINS_DIR
  USER appuser
  RUN cd $PLUGINS_DIR \
      &amp;&amp; curl -sO https://repo1.maven.org/maven2/io/debezium/debezium-connector-sqlserver/$DEBEZIUM_VERSION/debezium-connector-sqlserver-$DEBEZIUM_VERSION-plugin.tar.gz \
      &amp;&amp; tar -xzf debezium-connector-sqlserver-$DEBEZIUM_VERSION-plugin.tar.gz \
      &amp;&amp; rm debezium-connector-sqlserver-$DEBEZIUM_VERSION-plugin.tar.gz
  </code></pre>
  <p>And finally the statement I use to create the connector in ksqldb-cli is as follows:</p>
  <pre><code>CREATE SOURCE CONNECTOR accounts_reader WITH (
      'connector.class' = 'io.debezium.connector.sqlserver.SqlServerConnector',
      'database.hostname' = 'host.docker.internal',
      'database.port' = '1433',
      'database.user' = '******',
      'database.password' = ''******',
      'database.dbname' = ''******',
      'database.server.name' = ''******',
      'table.whitelist' = ''******',
      'database.history.kafka.bootstrap.servers' = 'kafka:9092',
      'database.history.kafka.topic' = ''******',
      'tasks.max' = '1'
  );
  </code></pre>
  <p>The ksqlDB CLI returns 'HTTP ERROR 500 Request failed' and, on inspecting the Docker logs for ksqldb-server, I see the following cryptic message (which I've had to truncate slightly because of StackOverflow character limits):</p>
  <pre><code>[2020-09-17 21:34:15,983] INFO Received: KsqlRequest{ksql='CREATE SOURCE CONNECTOR accounts_reader WITH (
      'connector.class' = 'io.debezium.connector.sqlserver.SqlServerConnector',
      'database.hostname' = 'host.docker.internal',
      'database.port' = '1433',
      'database.user' = '******',
      'database.password' = '******',
      'database.dbname' = '******',
      'database.server.name' = '******',
      'table.whitelist' = '******',
      'database.history.kafka.bootstrap.servers' = 'kafka:9092',
      'database.history.kafka.topic' = '******',
      'tasks.max' = '1'
  );', configOverrides={}, requestProperties={}, commandSequenceNumber=Optional[-1]} (io.confluent.ksql.rest.server.resources.KsqlResource:223)
  [2020-09-17 21:34:16,156] WARN /connectors (org.eclipse.jetty.server.HttpChannel:600)
  javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: io/debezium/DebeziumException
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)
      at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
      at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
      at org.eclipse.jetty.server.Server.handle(Server.java:501)
      at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
      at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:272)
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
      at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
      at java.base/java.lang.Thread.run(Thread.java:834)
  Caused by: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: io/debezium/DebeziumException
      at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:254)
      at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:236)
      at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
      at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:261)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
      ... 30 more
  ...
  ...
  Caused by: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:254)
      at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:236)
      at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
      at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:261)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
      ... 34 more
  Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at io.debezium.connector.sqlserver.SqlServerConnector.config(SqlServerConnector.java:57)
      at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:366)
      at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326)
      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      ... 1 more
  [2020-09-17 21:34:16,180] WARN unhandled due to prior sendError (org.eclipse.jetty.server.HttpChannelState:768)
  javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)
      at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
      at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
      at org.eclipse.jetty.server.Server.handle(Server.java:501)
      at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
      at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:272)
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
      at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
      at java.base/java.lang.Thread.run(Thread.java:834)
  Caused by: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:254)
      at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:236)
      at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
      at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:261)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
      ... 34 more
  Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at io.debezium.connector.sqlserver.SqlServerConnector.config(SqlServerConnector.java:57)
      at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:366)
      at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326)
      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      ... 1 more
  [2020-09-17 21:34:16,191] WARN /connectors (org.eclipse.jetty.server.HttpChannel:600)
  javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)
      at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
      at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
      at org.eclipse.jetty.server.Server.handle(Server.java:501)
      at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
      at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:272)
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
      at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
      at java.base/java.lang.Thread.run(Thread.java:834)
  ...
  ...
  [2020-09-17 21:34:16,192] WARN unhandled due to prior sendError (org.eclipse.jetty.server.HttpChannelState:768)
  javax.servlet.ServletException: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:410)
      at org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:346)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:366)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:319)
      at org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:205)
      at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:763)
      at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:551)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1610)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:233)
      at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1369)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:188)
      at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:489)
      at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1580)
      at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java:186)
      at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1284)
      at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:141)
      at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:234)
      at org.eclipse.jetty.server.handler.StatisticsHandler.handle(StatisticsHandler.java:173)
      at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:127)
      at org.eclipse.jetty.server.Server.handle(Server.java:501)
      at org.eclipse.jetty.server.HttpChannel.lambda$handle$1(HttpChannel.java:383)
      at org.eclipse.jetty.server.HttpChannel.dispatch(HttpChannel.java:556)
      at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:375)
      at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:272)
      at org.eclipse.jetty.io.AbstractConnection$ReadCallback.succeeded(AbstractConnection.java:311)
      at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)
      at org.eclipse.jetty.io.ChannelEndPoint$1.run(ChannelEndPoint.java:104)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)
      at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.produce(EatWhatYouKill.java:135)
      at org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:806)
      at org.eclipse.jetty.util.thread.QueuedThreadPool$Runner.run(QueuedThreadPool.java:938)
      at java.base/java.lang.Thread.run(Thread.java:834)
  Caused by: org.glassfish.jersey.server.ContainerException: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at org.glassfish.jersey.servlet.internal.ResponseWriter.rethrow(ResponseWriter.java:254)
      at org.glassfish.jersey.servlet.internal.ResponseWriter.failure(ResponseWriter.java:236)
      at org.glassfish.jersey.server.ServerRuntime$Responder.process(ServerRuntime.java:436)
      at org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:261)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:248)
      at org.glassfish.jersey.internal.Errors$1.call(Errors.java:244)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
      at org.glassfish.jersey.internal.Errors.process(Errors.java:244)
      at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:265)
      at org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:232)
      at org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:680)
      at org.glassfish.jersey.servlet.WebComponent.serviceImpl(WebComponent.java:394)
      ... 34 more
  Caused by: java.lang.NoClassDefFoundError: Could not initialize class io.debezium.connector.sqlserver.SqlServerConnectorConfig
      at io.debezium.connector.sqlserver.SqlServerConnector.config(SqlServerConnector.java:57)
      at org.apache.kafka.connect.runtime.AbstractHerder.validateConnectorConfig(AbstractHerder.java:366)
      at org.apache.kafka.connect.runtime.AbstractHerder.lambda$validateConnectorConfig$1(AbstractHerder.java:326)
      at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
      at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
      at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
      at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
      ... 1 more
  [2020-09-17 21:34:16,194] WARN Failed to query connect cluster after 3 attempts. (io.confluent.ksql.services.DefaultConnectClient:278)
  [2020-09-17 21:34:16,195] WARN Did not CREATE connector ACCOUNTS_READER: &lt;html&gt;
  &lt;head&gt;
  &lt;meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html;charset=utf-8&quot;/&gt;
  &lt;title&gt;Error 500 Request failed.&lt;/title&gt;
  &lt;/head&gt;
  &lt;body&gt;&lt;h2&gt;HTTP ERROR 500 Request failed.&lt;/h2&gt;
  &lt;table&gt;
  &lt;tr&gt;&lt;th&gt;URI:&lt;/th&gt;&lt;td&gt;/connectors&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;STATUS:&lt;/th&gt;&lt;td&gt;500&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;MESSAGE:&lt;/th&gt;&lt;td&gt;Request failed.&lt;/td&gt;&lt;/tr&gt;
  &lt;tr&gt;&lt;th&gt;SERVLET:&lt;/th&gt;&lt;td&gt;org.glassfish.jersey.servlet.ServletContainer-7c956dda&lt;/td&gt;&lt;/tr&gt;
  &lt;/table&gt;
  &lt;hr&gt;&lt;a href=&quot;http://eclipse.org/jetty&quot;&gt;Powered by Jetty:// 9.4.30.v20200611&lt;/a&gt;&lt;hr/&gt;
  
  &lt;/body&gt;
  &lt;/html&gt;
   (io.confluent.ksql.services.DefaultConnectClient:115)
  [2020-09-17 21:34:16,196] INFO Processed successfully: KsqlRequest{ksql='CREATE SOURCE CONNECTOR accounts_reader WITH (
      'connector.class' = 'io.debezium.connector.sqlserver.SqlServerConnector',
      'database.hostname' = 'host.docker.internal',
      'database.port' = '1433',
      'database.user' = '******',
      'database.password' = '******',
      'database.dbname' = '******',
      'database.server.name' = '******',
      'table.whitelist' = '******',
      'database.history.kafka.bootstrap.servers' = 'kafka:9092',
      'database.history.kafka.topic' = '******',
      'tasks.max' = '1'
  );', configOverrides={}, requestProperties={}, commandSequenceNumber=Optional[-1]} (io.confluent.ksql.rest.server.resources.KsqlResource:261)
  </code></pre>
  <p>I'm not 100% sure, but I don't think this means that the SqlServerConnectorConfig class is missing, but rather that there was a fundamental error on initialization (probably something more fundamental than some errors in the connector configuration).</p>
  <p>Is anyone able to point out where I have gone wrong or, alternatively, an easy way to set up Debezium source connectors and JDBC sink connectors in ksqlDB embedded Connect?</p>