• 카테고리

    질문 & 답변
  • 세부 분야

    백엔드

  • 해결 여부

    미해결

source-connect 오라클 적용 오류

23.12.06 20:03 작성 조회수 226

0

mariadb가 아닌 oracle로 진행을 해보고 있는데

mariadb의 auto_increment 대신 oracle로 seq를 만들어 자동 증가하게 했습니다. 이렇게 적용을 하니

connector 에서 이런 오류를 주는데 오라클로 할 때는 설정이 많이 다른지 질문드립니다!!!

 

ERROR [my-oracle-connect|task-0] WorkerSourceTask{id=my-oracle-connect-0} Task threw an uncaught and unrecoverable exception. Task is being killed and will not recover until manually restarted (org.apache.kafka.connect.runtime.WorkerTask:196)

org.apache.kafka.connect.errors.ConnectException: Scale of Decimal value for incrementing column must be 0

        at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractDecimalId(TimestampIncrementingCriteria.java:283)

        at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractOffsetIncrementedId(TimestampIncrementingCriteria.java:268)

        at io.confluent.connect.jdbc.source.TimestampIncrementingCriteria.extractValues(TimestampIncrementingCriteria.java:208)

        at io.confluent.connect.jdbc.source.TimestampIncrementingTableQuerier.extractRecord(TimestampIncrementingTableQuerier.java:230)

        at io.confluent.connect.jdbc.source.JdbcSourceTask.poll(JdbcSourceTask.java:418)

        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.poll(AbstractWorkerSourceTask.java:452)

        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.execute(AbstractWorkerSourceTask.java:346)

        at org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:189)

        at org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:244)

        at org.apache.kafka.connect.runtime.AbstractWorkerSourceTask.run(AbstractWorkerSourceTask.java:72)

        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)

        at java.base/java.lang.Thread.run(Thread.java:834)

[2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] Stopping JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:354)

[2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] Closing resources for JDBC source task (io.confluent.connect.jdbc.source.JdbcSourceTask:366)

[2023-12-06 19:56:27,342] INFO [my-oracle-connect|task-0] [Producer clientId=connector-producer-my-oracle-connect-0] Closing the Kafka producer with timeoutMillis = 30000 ms. (org.apache.kafka.clients.producer.KafkaProducer:1297)

[2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Metrics scheduler closed (org.apache.kafka.common.metrics.Metrics:693)

[2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Closing reporter org.apache.kafka.common.metrics.JmxReporter (org.apache.kafka.common.metrics.Metrics:697)

[2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] Metrics reporters closed (org.apache.kafka.common.metrics.Metrics:703)

[2023-12-06 19:56:27,344] INFO [my-oracle-connect|task-0] App info kafka.producer for connector-producer-my-oracle-connect-0 unregistered (org.apache.kafka.common.utils.AppInfoParser:83)

{
    "name": "my-oracle-connect",
    "config" : {
        "connector.class" : "io.confluent.connect.jdbc.JdbcSourceConnector",
        "connection.url":"jdbc:oracle:thin:@localhost:1521:orcl",
        "connection.user":"test",
        "connection.password":"test",
        "mode": "incrementing",
        "incrementing.column.name":"ID",
        "table.whitelist":"USERS",
        "topic.prefix" : "my_oracle_",
        "tasks.max" : "1"
    }
}

답변 1

답변을 작성해보세요.

0

인프런 AI 인턴님의 프로필

인프런 AI 인턴

2023.12.08

안녕하세요, 인프런 AI 인턴입니다.
마리아DB에서 오라클로 전환 시 발생하는 오류와 관련하여 질문 주셨군요. 주신 에러 메시지는 Kafka Connect에서 타임스탬프를 증가시키는 데 사용하는 컬럼의 소수점 자릿수가 0이 아니어야 함을 나타내는 것 같습니다. 오라클에서 시퀀스를 사용하셨다고 하셨는데, Kafka Connect 설정 중 "incrementing.column.name":"ID" 이 부분에서 지정한 ID 컬럼의 타입에 문제가 있을 수 있습니다. Decimal 값에 대한 scale이 0이어야 한다는 점이 중요합니다. 오라클에서 자동 증가하는 필드를 제대로 구현하신 것인지 다시 확인해 보시기 바랍니다.

커넥터의 구성을 확인할 때, 오라클의 자동 증가 값을 처리하는 방식이 커넥터 설정과 호환되는지 확인해야 합니다. 오라클에서는 보통 시퀀스와 트리거를 사용하여 자동 증가 기능을 구현합니다. Kafka Connect의 경우에는 이 ID 필드가 숫자 타입(Number)이어야 하며, 소수를 포함하지 않아야 합니다. incrementing.column.name에 지정된 필드가 이 조건을 충족하지 않는다면, 에러가 발생할 수 있습니다.

추가로 설정이 맞는지 확인하기 위해 Oracle의 SQL Developer나 다른 데이터베이스 관리 툴을 사용하여 USERS 테이블의 ID 컬럼과 시퀀스의 구성을 확인하시고, 필요하다면 데이터 유형을 변경하거나 Kafka Connect 설정을 조정해보시기 바랍니다.

오라클 데이터베이스와 관련하여 더 자세한 내용이 필요하시다면, Spring Boot 및 JDBC 관련 문서를 참고하시길 바랍니다. 예를 들어 Spring Boot 환경에서 DataSource 설정 방법을 알고 싶으시다면, Spring Boot 공식 문서에서 관련 내용을 찾아보실 수 있습니다.
- “DataSource 구성”:

특히 오라클과 같은 SQL 데이터베이스를 사용할 때의 DataSource 설정 방법에 대한 가이드를 제공합니다.

문제 해결에 도움이 되시길 바랍니다.