inflearn logo
강의

講義

知識共有

Spring Cloudで開発するマイクロサービスアプリケーション(MSA)

Kafka Source Connectの使用

아래와 같이 실습 도중, No suitable driver found 에러가 나서 질문드립니다.

385

hgene09299496

投稿した質問数 1

0

아래와 같이 실습 도중, No suitable driver found 에러가 나서 질문드립니다.

  1. docker-compose.yml을 통해 zookeeper, kafka broker, kafka connect, mariadb 컨테이너를 실행시켰습니다.

version: '2'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.2.1
    hostname: zookeeper
    container_name: zookeeper
    ports:
      - "2181:2181"
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-server:7.2.1
    hostname: broker
    container_name: broker
    depends_on:
      - zookeeper
    ports:
      - "9092:9092"
      - "9101:9101"
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://broker:29092,PLAINTEXT_HOST://localhost:9092
      KAFKA_METRIC_REPORTERS: io.confluent.metrics.reporter.ConfluentMetricsReporter
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_GROUP_INITIAL_REBALANCE_DELAY_MS: 0
      KAFKA_CONFLUENT_LICENSE_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_CONFLUENT_BALANCER_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1
      KAFKA_JMX_PORT: 9101
      KAFKA_JMX_HOSTNAME: localhost
      KAFKA_CONFLUENT_SCHEMA_REGISTRY_URL: http://schema-registry:8081
      CONFLUENT_METRICS_REPORTER_BOOTSTRAP_SERVERS: broker:29092
      CONFLUENT_METRICS_REPORTER_TOPIC_REPLICAS: 1
      CONFLUENT_METRICS_ENABLE: 'true'
      CONFLUENT_SUPPORT_CUSTOMER_ID: 'anonymous'

  connect:
    image: cnfldemos/cp-server-connect-datagen:0.5.3-7.1.0
    hostname: connect
    container_name: connect
    depends_on:
      - broker
      - mariadb
    ports:
      - "8083:8083"
    volumes:
      - ./kafka-connect-jdbc:/etc/kafka-connect/jars # JDBC 드라이버가 설치된 경로를 마운트
    environment:
      CONNECT_BOOTSTRAP_SERVERS: 'broker:29092'
      CONNECT_REST_ADVERTISED_HOST_NAME: connect
      CONNECT_GROUP_ID: compose-connect-group
      CONNECT_CONFIG_STORAGE_TOPIC: docker-connect-configs
      CONNECT_CONFIG_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_OFFSET_FLUSH_INTERVAL_MS: 10000
      CONNECT_OFFSET_STORAGE_TOPIC: docker-connect-offsets
      CONNECT_OFFSET_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_STATUS_STORAGE_TOPIC: docker-connect-status
      CONNECT_STATUS_STORAGE_REPLICATION_FACTOR: 1
      CONNECT_KEY_CONVERTER: org.apache.kafka.connect.storage.StringConverter
      CONNECT_VALUE_CONVERTER: org.apache.kafka.connect.json.JsonConverter
      CONNECT_VALUE_CONVERTER_SCHEMA_REGISTRY_URL: http://schema-registry:8081
      CLASSPATH: /usr/share/java/monitoring-interceptors/monitoring-interceptors-7.2.1.jar
      CONNECT_PRODUCER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringProducerInterceptor"
      CONNECT_CONSUMER_INTERCEPTOR_CLASSES: "io.confluent.monitoring.clients.interceptor.MonitoringConsumerInterceptor"
      CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/etc/kafka-connect/jars"
      CONNECT_LOG4J_LOGGERS: org.apache.zookeeper=ERROR,org.I0Itec.zkclient=ERROR,org.reflections=ERROR

  mariadb:
    image: mariadb:10.5
    container_name: mariadb
    hostname: mariadb
    environment:
      MYSQL_ROOT_PASSWORD: rootpassword
      MYSQL_DATABASE: testdb
      MYSQL_USER: testuser
      MYSQL_PASSWORD: testpassword
    ports:
      - "3306:3306"
    volumes:
      - ./mariadb_data:/var/lib/mysql
  1. 확인 결과, kafka connect 컨테이너 내부의 /etc/kafka-connect/jars 경로 아래에 kafka-connect-jdbc-10.6.3.jar,  mariadb-java-client-2.7.2.jar 가 잘 위치해있습니다.

  2. mariadb 컨테이너 내부로 접속하여 users 데이터베이스를 잘 생성하였고, 테스트 데이터도 잘 삽입해주었고 결과까지 확인했습니다.

  3. postman으로 아래와 같이 source 생성 요청 결과 201 응답이 정상적으로 잘 도착하였습니다.

    [POST] 127.0.0.1:8083/connectors
    
    {
        "name": "my-source-connector3",
        "config": {
            "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector",
            "connection.url": "jdbc:mysql://mariadb:3306/testdb",
            "connection.user": "testuser",
            "connection.password": "testpassword",
            "mode": "incrementing",
            "incrementing.column.name": "id",
            "table.whitelist": "users",
            "topic.prefix": "my_topic_",
            "tasks.max": "1"
        }
    }

    5. 그러나 127.0.0.1:8083/connectors/my-source-connector/status 으로 요청을 보내면 아래와 같은 오류가 발생합니다.

    {
        "name": "my-source-connector",
        "connector": {
            "state": "FAILED",
            "worker_id": "connect:8083",
            "trace": "org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc:mysql://mariadb:3306/testdb\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:59)\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:94)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:185)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:210)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:349)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:332)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:141)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:118)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\n\tat java.base/java.lang.Thread.run(Thread.java:829)\nCaused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://mariadb:3306/testdb\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:189)\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:80)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:52)\n\t... 12 more\n"
        },
        "tasks": [],
        "type": "source"
    }

spring-boot jpa 아키텍처 spring-cloud kafka msa rabbitmq

回答 3

0

Dowon Lee

안녕하세요, 이도원입니다.

Kafka-connect의 DB 연동에 대한 문제인 것 같습니다. Source connect 자체를 등록하는데에는 DB 연결을 직접 하는게 아니다 보니, Connector 자체의 등록만 처리되었거, 실제 작업 부분에서 커넥트의 상태를 확인해 봤을 때, DB 연결이 안되었다고 오류가(No suitable driver found) 발생한 부분은 DB 접속을 위한 JDBC 드라이버 인식이 안되었다는 오류인것 같습니다. 말씀하신 docker-compose.yml 파일 형태로 다시한번 구동해 보고, 추가 답변드리도록 하겠습니다.

감사합니다.

0

chocolaggibbiddori

저도 동일하게 docker-compose.yml 파일로 컨테이너들 띄웠는데 동일한 에러가 발생하네요... mariadb든 mysql이든 지지고 볶든말든 jdbc:mariadb://mariadb:3306으로 접속을 못하고 있습니다...

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이현진님의 질문을 면밀히 살펴보았습니다. “No suitable driver found for jdbc:mysql://mariadb:3306/testdb” 오류는 보통 JDBC 드라이버가 적절히 위치하지 않았거나, 연결 URL이 잘못 지정되었을 때 발생합니다.

해당 문제를 해결하는 핵심 포인트는 다음과 같습니다:
- MariaDB를 사용하는 경우, 연결 URL에 사용되는 프로토콜은 jdbc:mariadb://여야 합니다. 그러나 오류 메시지를 보면, jdbc:mysql://로 지정되어 있습니다. 이 부분을 jdbc:mariadb://로 수정해야 할 수 있습니다.
- Kafka Connect 컨테이너 내부에 올바른 JDBC 드라이버(mariadb-java-client-버전.jar)가 존재하고, 이 드라이버가 Kafka Connect의 CLASSPATH에 포함되어 있는지 확인해야 합니다.

이와 관련하여 유사한 문제를 경험하고 해결한 다른 학습자의 질문 및 강사님의 답변이 유익할 것 같습니다. 아래 링크의 내용을 참조하시는 것을 권장드립니다:

  • source-connect 등록 시 에러 질문이요
    • 이 질문에서는 Docker 환경에서 MariaDB를 실행하고 Kafka Connect와 연동하는 과정에서 발생한 문제와 그에 대한 해답이 제시되었습니다. 특히, Kafka Connect 설정에서 사용하는 MariaDB의 JDBC 연결 URL이 올바르게 지정되지 않아 발생하는 문제에 대해 설명하고 있습니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

0

hgene09299496

MariaDB를 사용하는 경우, 연결 URL에 사용되는 프로토콜은 jdbc:mariadb://여야 합니다. 그러나 오류 메시지를 보면, jdbc:mysql://로 지정되어 있습니다. 이 부분을 jdbc:mariadb://로 수정해야 할 수 있습니다.

=> 위 답변대로 수정해주어도 동일한 오류가 계속 납니다


- Kafka Connect 컨테이너 내부에 올바른 JDBC 드라이버(mariadb-java-client-버전.jar)가 존재하고, 이 드라이버가 Kafka Connect의 CLASSPATH에 포함되어 있는지 확인해야 합니다.

=> 저는 connect 컨테이너의 환경변수로 CONNECT_PLUGIN_PATH: "/usr/share/java,/usr/share/confluent-hub-components,/etc/kafka-connect/jars"를 추가해주었고, 여기서 외부의 jdbc*.jar 파일 2개가 위치한 경로를 내부에 마운트 해준 경로가 바로 /etc/kafka-connect/jars입니다. 위 질문내용에도 있듯이, 해당 경로 내부에 jdbc*.jar 파일들이 모두 잘 위치하고 있음을 connect 컨테이너 내부에 접속하여 확인완료하였습니다.
=> 환경변수는 내부의 컨테이너에 접속하여 아래와 같이 잘 설정되었음을 확인완료하였습니다.

[appuser@connect ~]$ echo $CONNECT_PLUGIN_PATH
/usr/share/java,/usr/share/confluent-hub-components,/etc/kafka-connect/jars

0

kkkkkk

같은 상황인데 혹시 어떻게 해결 하셨나요 ?

kafka 업데이트 강의 듣고 시포요

0

83

1

강의 교안

0

71

1

마이크로서비스간 통신 시, 인증 처리

0

79

1

api gateway 에서 인증 처리

0

64

1

섹션 19 질문드립니다

0

51

1

강의 자료 업데이트

0

81

1

부하분산 강의 섹션

0

56

1

강의자료는 어디에서?

0

69

1

강의 자료는 어디서 다운 받을 수 있나요?

0

109

1

전체 사용자 조회시 오류

0

57

1

혹시 pk 외 별도의 id 를 부여한 이유가 있을까요 ??

0

109

2

학습 방향

0

94

2

카프카 커넥터 사용 목적 문의

0

85

2

kafka 강의

0

106

2

서비스 디스커버리 종류

0

86

2

강의 자료에 대해서 궁금해요

0

115

2

GlobalFilter, LoggingFilter가 동작하지 않습니다.

0

89

2

Kafka Source Connect 버전 에러

0

83

2

소스커넥터는 사용안한 거 맞죠?

0

81

2

강의자료 업데이트 문의

0

94

2

강의에서 BCryptPasswordEncoder 에 역할(5-2)

0

56

1

강의 업데이트 계획이 궁금합니다.

0

111

2

MSA 애플리케이션에 Spring Web과 Spring Data JPA를 사용하는 것이 바람직한지 궁금합니다. (MSA 설계와 관련된 질문입니다)

0

160

2

어떤 것이 업데이트 된 건가요?

0

162

2