Skip to content

Instantly share code, notes, and snippets.

@rmoff
Last active January 15, 2019 12:50
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save rmoff/335b234832d6abd85ec47cb79c0fad8f to your computer and use it in GitHub Desktop.
Save rmoff/335b234832d6abd85ec47cb79c0fad8f to your computer and use it in GitHub Desktop.
JDBC Driver installation with Confluent CLI

JDBC Driver installation with Confluent CLI

Install Confluent Platform

  1. Go to https://www.confluent.io/download/ and download 5.1

  2. Move and unpack it:

    $ mv ~/Downloads/confluent-5.1.0-2.11.tar.gz ~/cp/
    $ cd ~/cp
    $ tar -xf confluent-5.1.0-2.11.tar.gz
    $ pwd
    /Users/Robin/cp
    $ ls -l
    total 1049192
    drwxr-xr-x@  8 Robin  staff        256 15 Dec 03:07 confluent-5.1.0
  3. Go to https://dev.mysql.com/downloads/connector/j/ and download the JDBC driver ("Platform Independent" mysql-connector-java-8.0.13.tar.gz)

Option 1 : Put JDBC driver under share/java/kafka-connect-jdbc

Log: connect-worker-trace_in_share.log

  1. Unpack the driver into the correct Kafka Connect folder

    $ cp ~/Downloads/mysql-connector-java-8.0.13.tar.gz /Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc
    $ tar -xf mysql-connector-java-8.0.13.tar.gz
    $ mv mysql-connector-java-8.0.13/mysql-connector-java-8.0.13.jar .
    $ rm mysql-connector-java-8.0.13.tar.gz
    $ rm -rf mysql-connector-java-8.0.13
    $ pwd
    /Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc
    $ ls -l
    total 25112
    -rw-r--r--@ 1 Robin  staff    20437 15 Dec 02:00 audience-annotations-0.5.0.jar
    -rw-r--r--@ 1 Robin  staff    20904 15 Dec 02:00 common-utils-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff    87325 15 Dec 02:00 jline-0.9.94.jar
    -rw-r--r--@ 1 Robin  staff   317816 15 Dec 02:00 jtds-1.3.1.jar
    -rw-r--r--@ 1 Robin  staff   214027 15 Dec 02:00 kafka-connect-jdbc-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff  2132635 27 Sep 10:18 mysql-connector-java-8.0.13.jar
    -rw-r--r--@ 1 Robin  staff  1292696 15 Dec 02:00 netty-3.10.6.Final.jar
    -rw-r--r--@ 1 Robin  staff   658466 15 Dec 02:00 postgresql-9.4-1206-jdbc41.jar
    -rw-r--r--@ 1 Robin  staff    41203 15 Dec 02:00 slf4j-api-1.7.25.jar
    -rw-r--r--@ 1 Robin  staff  7064881 15 Dec 02:00 sqlite-jdbc-3.25.2.jar
    -rw-r--r--@ 1 Robin  staff    74798 15 Dec 02:00 zkclient-0.10.jar
    -rw-r--r--@ 1 Robin  staff   906708 15 Dec 02:00 zookeeper-3.4.13.jar

    Note that mysql-connector-java-8.0.13.jar is there, alongside kafka-connect-jdbc-5.1.0.jar.

  2. Increase Kafka Connect logging to DEBUG. Edit ~/cp/confluent-5.1.0/etc/kafka/connect-log4j.properties and set

    log4j.rootLogger=DEBUG, stdout
  3. Start Kafka Connect and dependencies

    $ cd ~/cp/confluent-5.1.0/
    $ pwd
    /Users/Robin/cp/confluent-5.1.0
    $ ./bin/confluent start connect
    This CLI is intended for development only, not for production
    https://docs.confluent.io/current/cli/index.html
    
    Using CONFLUENT_CURRENT: /var/folders/q9/2tg_lt9j6nx29rvr5r5jn_bw0000gp/T/confluent.tcrfo4zH
    Starting zookeeper
    zookeeper is [UP]
    Starting kafka
    kafka is [UP]
    Starting schema-registry
    schema-registry is [UP]
    Starting connect
    connect is [UP]
  4. View the Connect log and verify that MySQL JAR was loaded:

    $ ./bin/confluent log connect -f -n +0 |grep -i mysql
    …
    [2019-01-15 09:33:50,527] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@15dd5ac2 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:277)
    …
  5. Create the JDBC connector config in /tmp/kafka-connect-jdbc-source.json

    {
            "name": "jdbc_source_mysql_foobar_01",
            "config": {
                    "_comment": "The JDBC connector class. Don't change this if you want to use the JDBC Source.",
                    "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
    
                    "_comment": "How to serialise the value of keys - here use the Confluent Avro serialiser. Note that the JDBC Source Connector always returns null for the key ",
                    "key.converter": "io.confluent.connect.avro.AvroConverter",
    
                    "_comment": "Since we're using Avro serialisation, we need to specify the Confluent schema registry at which the created schema is to be stored. NB Schema Registry and Avro serialiser are both part of Confluent Platform.",
                    "key.converter.schema.registry.url": "http://localhost:8081",
    
                    "_comment": "As above, but for the value of the message. Note that these key/value serialisation settings can be set globally for Connect and thus omitted for individual connector configs to make them shorter and clearer",
                    "value.converter": "io.confluent.connect.avro.AvroConverter",
                    "value.converter.schema.registry.url": "http://localhost:8081",
    
    
                    "_comment": " --- JDBC-specific configuration below here  --- ",
                    "_comment": "JDBC connection URL. This will vary by RDBMS. Consult your manufacturer's handbook for more information",
                    "connection.url": "jdbc:mysql://localhost:3306/demo?user=rmoff&password=pw",
    
                    "_comment": "Which table(s) to include",
                    "table.whitelist": "foobar",
    
                    "_comment": "Pull all rows based on an timestamp column. You can also do bulk or incrementing column-based extracts. For more information, see http://docs.confluent.io/current/connect/connect-jdbc/docs/source_config_options.html#mode",
                    "mode": "timestamp",
    
                    "_comment": "Which column has the timestamp value to use?  ",
                    "timestamp.column.name": "update_ts",
    
                    "_comment": "If the column is not defined as NOT NULL, tell the connector to ignore this  ",
                    "validate.non.null": "false",
    
                    "_comment": "The Kafka topic will be made up of this prefix, plus the table name  ",
                    "topic.prefix": "mysql-"
            }
    }
  6. Load the connector

    $ ./bin/confluent load jdbc_source_mysql_foobar_01 -d /tmp/kafka-connect-jdbc-source.json
    This CLI is intended for development only, not for production
    https://docs.confluent.io/current/cli/index.html
    
    {
      "name": "jdbc_source_mysql_foobar_01",
      "config": {
        "_comment": "The Kafka topic will be made up of this prefix, plus the table name  ",
        "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
        "key.converter": "io.confluent.connect.avro.AvroConverter",
        "key.converter.schema.registry.url": "http://localhost:8081",
        "value.converter": "io.confluent.connect.avro.AvroConverter",
        "value.converter.schema.registry.url": "http://localhost:8081",
        "connection.url": "jdbc:mysql://localhost:3306/demo?user=rmoff&password=pw",
        "table.whitelist": "foobar",
        "mode": "timestamp",
        "timestamp.column.name": "update_ts",
        "validate.non.null": "false",
        "topic.prefix": "mysql-",
        "name": "jdbc_source_mysql_foobar_01"
      },
      "tasks": [],
      "type": null
    }
  7. View its status

    $ ./bin/confluent status jdbc_source_mysql_foobar_01
    This CLI is intended for development only, not for production
    https://docs.confluent.io/current/cli/index.html
    
    {
      "name": "jdbc_source_mysql_foobar_01",
      "connector": {
        "state": "RUNNING",
        "worker_id": "192.168.10.63:8083"
      },
      "tasks": [
        {
          "state": "RUNNING",
          "id": 0,
          "worker_id": "192.168.10.63:8083"
        }
      ],
      "type": "source"
    }
  8. Confirm data has been transferred

    $ ./bin/confluent consume mysql-foobar --from-beginning --value-format avro
    This CLI is intended for development only, not for production
    https://docs.confluent.io/current/cli/index.html
    
    {"c1":{"int":1},"c2":{"string":"foo"},"create_ts":{"long":1547547339000},"update_ts":{"long":1547547339000}}

Option 2: Set CLASSPATH and launch Kafka Connect directly

This doesn’t work if invoked as confluent start connect (presumably because the CLASSPATH doesn’t get passed on to the child process)

Log: connect-worker-trace_in_classpath.log

  1. Launch Kafka Connect directly, setting the CLASSPATH directly to the JDBC driver first:

    CLASSPATH=/u01/jdbc-drivers/mysql-connector-java-8.0.13.jar ./bin/connect-distributed ./etc/kafka/connect-distributed.properties
  2. Multiple occurrences in the log of:

    [2019-01-15 10:51:39,192] TRACE Class 'com.mysql.cj.jdbc.Driver' not found. Delegating to parent (org.apache.kafka.connect.runtime.isolation.PluginClassLoader)
    [2019-01-15 10:51:39,197] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@1ca3b418 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
  3. Connector works fine

Option 3: Put JDBC Driver in same location as Kafka Connect JAR, specified with plugin.path

connect-worker-trace_all_in_pluginpath.log

  1. Move JDBC plugin from share/java/ to path outside of CLASSPATH (/u01/connector/)

  2. Place JDBC Driver in plugin folder

    $ ls -lR /u01/connector
    total 0
    drwxr-xr-x@ 14 Robin  staff  448 15 Jan 12:23 kafka-connect-jdbc
    
    /u01/connector/kafka-connect-jdbc:
    total 25112
    -rw-r--r--@ 1 Robin  staff    20437 15 Dec 02:00 audience-annotations-0.5.0.jar
    -rw-r--r--@ 1 Robin  staff    20904 15 Dec 02:00 common-utils-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff    87325 15 Dec 02:00 jline-0.9.94.jar
    -rw-r--r--@ 1 Robin  staff   317816 15 Dec 02:00 jtds-1.3.1.jar
    -rw-r--r--@ 1 Robin  staff   214027 15 Dec 02:00 kafka-connect-jdbc-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff  2132635 15 Jan 12:23 mysql-connector-java-8.0.13.jar
    -rw-r--r--@ 1 Robin  staff  1292696 15 Dec 02:00 netty-3.10.6.Final.jar
    -rw-r--r--@ 1 Robin  staff   658466 15 Dec 02:00 postgresql-9.4-1206-jdbc41.jar
    -rw-r--r--@ 1 Robin  staff    41203 15 Dec 02:00 slf4j-api-1.7.25.jar
    -rw-r--r--@ 1 Robin  staff  7064881 15 Dec 02:00 sqlite-jdbc-3.25.2.jar
    -rw-r--r--@ 1 Robin  staff    74798 15 Dec 02:00 zkclient-0.10.jar
    -rw-r--r--@ 1 Robin  staff   906708 15 Dec 02:00 zookeeper-3.4.13.jar
  3. Set plugin.path=share/java,/u01/connector/

  4. MySQL connector works

DOESN’T WORK : Use plugin.path to specify the JDBC JAR

Difference from option 3 is that the Kafka Connect JDBC plugin is being loaded from a different path.

Log: connect-worker-trace_in_pluginpath.log

  1. Edit the Kafka Connect config file used by Confluent CLI /Users/Robin/cp/confluent-5.1.0/etc/schema-registry/connect-avro-distributed.properties and add the folder that contains the JAR

    plugin.path=share/java,/u01/jdbc-drivers
    $ ls -l /u01/jdbc-drivers/
    total 4168
    -rw-r--r--@ 1 Robin  wheel  2132635 15 Jan 09:43 mysql-connector-java-8.0.13.jar
  2. For the purposes of testing, remove the MySQL driver from share/java/kafka-connect-jdbc if present:

    $ pwd
    /Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc
    $ rm mysql-connector-java-8.0.13.jar
    $ ls -l
    total 20944
    -rw-r--r--@ 1 Robin  staff    20437 15 Dec 02:00 audience-annotations-0.5.0.jar
    -rw-r--r--@ 1 Robin  staff    20904 15 Dec 02:00 common-utils-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff    87325 15 Dec 02:00 jline-0.9.94.jar
    -rw-r--r--@ 1 Robin  staff   317816 15 Dec 02:00 jtds-1.3.1.jar
    -rw-r--r--@ 1 Robin  staff   214027 15 Dec 02:00 kafka-connect-jdbc-5.1.0.jar
    -rw-r--r--@ 1 Robin  staff  1292696 15 Dec 02:00 netty-3.10.6.Final.jar
    -rw-r--r--@ 1 Robin  staff   658466 15 Dec 02:00 postgresql-9.4-1206-jdbc41.jar
    -rw-r--r--@ 1 Robin  staff    41203 15 Dec 02:00 slf4j-api-1.7.25.jar
    -rw-r--r--@ 1 Robin  staff  7064881 15 Dec 02:00 sqlite-jdbc-3.25.2.jar
    -rw-r--r--@ 1 Robin  staff    74798 15 Dec 02:00 zkclient-0.10.jar
    -rw-r--r--@ 1 Robin  staff   906708 15 Dec 02:00 zookeeper-3.4.13.jar
  3. Start Kafka Connect and grep the output for message that driver has been loaded

    $ ./bin/confluent start connect; ./bin/confluent log connect -f -n +0 |grep -i mysql
    This CLI is intended for development only, not for production
    https://docs.confluent.io/current/cli/index.html
    
    Using CONFLUENT_CURRENT: /var/folders/q9/2tg_lt9j6nx29rvr5r5jn_bw0000gp/T/confluent.tcrfo4zH
    zookeeper is already running. Try restarting if needed
    kafka is already running. Try restarting if needed
    schema-registry is already running. Try restarting if needed
    Starting connect
    connect is [UP]
    [2019-01-15 09:45:26,861] INFO Loading plugin from: /u01/jdbc-drivers/mysql-connector-java-8.0.13.jar (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:220)
    [2019-01-15 09:45:26,861] DEBUG Loading plugin urls: [file:/u01/jdbc-drivers/mysql-connector-java-8.0.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:227)
    [2019-01-15 09:45:26,946] INFO Registered loader: PluginClassLoader{pluginLocation=file:/u01/jdbc-drivers/mysql-connector-java-8.0.13.jar} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:243)
    [2019-01-15 09:45:26,949] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@37303f12 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader:277)

(Note that the two INFO messages here aren’t seen in Option 1)

Connector fails with driver not found:

$ curl -X POST http://localhost:8083/connectors -H "Content-Type: application/json" -d '{
          "name": "jdbc_source_mysql_01",
          "config": {
                  "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
                  "connection.url": "jdbc:mysql://mysql:3306/demo",
                  "connection.user": "connect_user",
                  "connection.password": "asgard",
                  "topic.prefix": "mysql-01-",
                  "mode":"bulk"
                  }
          }'
{"error_code":400,"message":"Connector configuration is invalid and contains the following 2 error(s):\nInvalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://mysql:3306/demo for configuration Couldn't open connection to jdbc:mysql://mysql:3306/demo\nInvalid value java.sql.SQLException: No suitable driver found for jdbc:mysql://mysql:3306/demo for configuration Couldn't open connection to jdbc:mysql://mysql:3306/demo\nYou can also find the above list of errors at the endpoint `/{connectorType}/config/validate`"}⏎                                                                                              [~/c/confluent-5.1.0] Robin@asgard02.moffatt.me

In TRACE log :

[2019-01-15 10:34:47,966] TRACE Class 'com.mysql.cj.jdbc.Driver' not found. Delegating to parent (org.apache.kafka.connect.runtime.isolation.PluginClassLoader)

Appendix : Kafka Connect worker DEBUG log entries

JDBC JAR in share/java/kafka-connect-jdbc

This works.

[2019-01-15 10:30:23,116] DEBUG Loading plugin urls: [file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/audience-annotations-0.5.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/common-utils-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jline-0.9.94.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jtds-1.3.1.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/kafka-connect-jdbc-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/mysql-connector-java-8.0.13.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/netty-3.10.6.Final.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/postgresql-9.4-1206-jdbc41.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/slf4j-api-1.7.25.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/sqlite-jdbc-3.25.2.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zkclient-0.10.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zookeeper-3.4.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

[2019-01-15 10:30:23,264] INFO Registered loader: PluginClassLoader{pluginLocation=file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,264] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSinkConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,264] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,265] DEBUG Registered java.sql.Driver: jTDS 1.3.1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,269] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@7bbbb6a8 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,275] DEBUG Registered java.sql.Driver: org.postgresql.Driver@ea9e141 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:30:23,278] DEBUG Registered java.sql.Driver: org.sqlite.JDBC@236134a1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

JDBC JAR in plugin.path

This doesn’t work.

[2019-01-15 10:34:37,658] DEBUG Loading plugin urls: [file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/audience-annotations-0.5.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/common-utils-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jline-0.9.94.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jtds-1.3.1.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/kafka-connect-jdbc-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/netty-3.10.6.Final.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/postgresql-9.4-1206-jdbc41.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/slf4j-api-1.7.25.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/sqlite-jdbc-3.25.2.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zkclient-0.10.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zookeeper-3.4.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

[2019-01-15 10:34:37,780] INFO Registered loader: PluginClassLoader{pluginLocation=file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:34:37,780] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:34:37,780] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSinkConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:34:37,782] DEBUG Registered java.sql.Driver: jTDS 1.3.1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:34:37,785] DEBUG Registered java.sql.Driver: org.postgresql.Driver@67e28be3 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:34:37,787] DEBUG Registered java.sql.Driver: org.sqlite.JDBC@54aca26f to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

JDBC JAR in CLASSPATH

This works.

jvm.classpath = /u01/jdbc-drivers/mysql-connector-java-8.0.13.jar:…
[2019-01-15 10:51:51,869] DEBUG Loading plugin urls: [file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/audience-annotations-0.5.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/common-utils-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jline-0.9.94.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/jtds-1.3.1.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/kafka-connect-jdbc-5.1.0.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/netty-3.10.6.Final.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/postgresql-9.4-1206-jdbc41.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/slf4j-api-1.7.25.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/sqlite-jdbc-3.25.2.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zkclient-0.10.jar, file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/zookeeper-3.4.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

[2019-01-15 10:51:51,951] INFO Registered loader: PluginClassLoader{pluginLocation=file:/Users/Robin/cp/confluent-5.1.0/share/java/kafka-connect-jdbc/} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:51:51,951] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:51:51,951] TRACE Class 'com.mysql.cj.jdbc.Driver' not found. Delegating to parent (org.apache.kafka.connect.runtime.isolation.PluginClassLoader)
[2019-01-15 10:51:51,951] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@66e8997c to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:51:51,953] DEBUG Registered java.sql.Driver: jTDS 1.3.1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:51:51,955] DEBUG Registered java.sql.Driver: org.postgresql.Driver@971e903 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 10:51:51,957] DEBUG Registered java.sql.Driver: org.sqlite.JDBC@191a709b to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

Kafka Connect JDBC plugin + JDBC Driver in same folder in plugin.path

This works.

[2019-01-15 12:24:36,360] DEBUG Loading plugin urls: [file:/u01/connector/kafka-connect-jdbc/audience-annotations-0.5.0.jar, file:/u01/connector/kafka-connect-jdbc/common-utils-5.1.0.jar, file:/u01/connector/kafka-connect-jdbc/jline-0.9.94.jar, file:/u01/connector/kafka-connect-jdbc/jtds-1.3.1.jar, file:/u01/connector/kafka-connect-jdbc/kafka-connect-jdbc-5.1.0.jar, file:/u01/connector/kafka-connect-jdbc/mysql-connector-java-8.0.13.jar, file:/u01/connector/kafka-connect-jdbc/netty-3.10.6.Final.jar, file:/u01/connector/kafka-connect-jdbc/postgresql-9.4-1206-jdbc41.jar, file:/u01/connector/kafka-connect-jdbc/slf4j-api-1.7.25.jar, file:/u01/connector/kafka-connect-jdbc/sqlite-jdbc-3.25.2.jar, file:/u01/connector/kafka-connect-jdbc/zkclient-0.10.jar, file:/u01/connector/kafka-connect-jdbc/zookeeper-3.4.13.jar] (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

[2019-01-15 12:24:36,487] INFO Registered loader: PluginClassLoader{pluginLocation=file:/u01/connector/kafka-connect-jdbc/} (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,487] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSourceConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,487] INFO Added plugin 'io.confluent.connect.jdbc.JdbcSinkConnector' (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,489] DEBUG Registered java.sql.Driver: jTDS 1.3.1 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,491] DEBUG Registered java.sql.Driver: com.mysql.cj.jdbc.Driver@1e530163 to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,494] DEBUG Registered java.sql.Driver: org.postgresql.Driver@5833f5cd to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)
[2019-01-15 12:24:36,496] DEBUG Registered java.sql.Driver: org.sqlite.JDBC@7a34f66a to java.sql.DriverManager (org.apache.kafka.connect.runtime.isolation.DelegatingClassLoader)

Appendix : MySQL setup

mysql> use demo;
mysql> create user 'rmoff'@'localhost' IDENTIFIED BY 'pw';
Query OK, 0 rows affected (0.01 sec)
mysql> GRANT ALL PRIVILEGES ON *.* TO 'rmoff'@'localhost';
Query OK, 0 rows affected (0.04 sec)
mysql> create table foobar (c1 int, c2 varchar(255),create_ts timestamp DEFAULT CURRENT_TIMESTAMP , update_ts timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP );
Query OK, 0 rows affected (0.02 sec)
mysql>
mysql> insert into foobar (c1,c2) values(1,'foo');
Query OK, 1 row affected (0.17 sec)

$ mysql -urmoff -ppw
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 11
Server version: 8.0.13 Homebrew

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use demo;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from foobar;
+------+------+---------------------+---------------------+
| c1   | c2   | create_ts           | update_ts           |
+------+------+---------------------+---------------------+
|    1 | foo  | 2019-01-15 10:15:39 | 2019-01-15 10:15:39 |
+------+------+---------------------+---------------------+
1 row in set (0.00 sec)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment