묻고 답해요
161만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
게이트웨이 오류
안녕하세요 유레카에 랜덤 포트로 first-service 2개 등록을 했습니다. - Postman 이용해서 api를 날려보면 Connection refused가 발생하는데 어디를 고쳐야할까요?게이트웨이의 application.yml은 위와 같습니다.eureka yml은 위와 같습니다.First-service.yml입니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
filter가 작동되지 않습니다.
- 강의에 있는 거 그대로 사용했는데 log가 뜨지를 않습니다. 디버그를 찍어보니 필터를 거치지 않는데 어떻게 해결을 해야될까요??- 요청은 정상적으로 가고 응답도 first-service / second-serivIce에 맞게 잘 가져옵니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
RoutLocatortBuilder
안녕하세요 RouteLocateBuilder에 빨간 줄이 뜨는데무시하고 해도 되는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
zuul 강의에서 gradle로 하시는 분들을 위해 공유합니다
zuul을 사용하기 위해서는 spring boot 버전이 2.4보다 낮아야 한다고 해서 2.3.9.RELEASE를 사용했습니다. (2.4 미만 버전은 RELEASE가 붙더라고요)또한, spring boot 버전이 2.4 미만일 경우 spring cloud 2020.0.0 (2.4.x, 2.5.x 에서만 사용 가능) 버전을 사용할 수 없고 Hoxton 버전을 사용해야 됨을 적용했습니다.아래와 같이 해서 실행 성공했습니다.plugins { id 'java' id 'org.springframework.boot' version '2.3.9.RELEASE' id 'io.spring.dependency-management' version '1.0.11.RELEASE' } group = 'com.example' version = '0.0.1-SNAPSHOT' sourceCompatibility = '11' configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } dependencies { implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' compileOnly 'org.projectlombok:lombok' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:Hoxton.RELEASE" } } tasks.named('test') { useJUnitPlatform() }
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의 PPT 자료는 어디서 다운받을수 있나요?
안녕하세요.강의 PPT 자료를 찾아봤는데 없어서 문의드립니다. 현재 다운받을수 없는건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
비대칭키 jwt 인증 문제
http://localhost:8888/ecommerce/default 에서는 {name: "ecommerce",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\ecommerce.yml",source: {token.expiration_time: 864000000,gateway.ip: "172.30.1.33",token.secret: "userToken_token"}}]}http://localhost:8888/user-service/default 에서는{name: "user-service",profiles: ["default"],label: null,version: "f45bf692a6cb54252ea12041f0aa92a71964a5f7",state: null,propertySources: [{name: "file:///C:\\Users\\ydj90\\Downloads\\git/file:C:\Users\ydj90\Downloads\git\user-service.yml",source: {spring.datasource.url: "jdbc:h2:mem:testdb",spring.datasource.driver-class-name: "org.h2.Driver",spring.datasource.generate-unique-name: false,token.expiration_time: 864000000,gateway.ip: "172.30.1.33",order_service.url: "http://ORDER-SERVICE/order-service/%s/orders",spring.datasource.username: "sa",token.secret: "userToken_token"}}]} 이와 같이 token.secret이 같은데 왜 subject가 null값이 되는지 이유를 알 수 가 없습니다. login하고 나온 header값을 가지고 bearer에 넣어 인증하는 방식이 아닙니까?이유를 잘 모르겠습니다. JWT token is not valid이게 왜 뜨는지subject = Jwts.parser().setSigningKey(env.getProperty("token.secret")) .parseClaimsJws(jwt).getBody() .getSubject(); 여기서 왜 null값으로 값을 반환하는지 이해를 할 수가 없습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
MSA 에서 연관관계
안녕하세요 강의를 보던 도중 질문이 생겼습니다. 보통 JPA 서비스 설계시 모놀로틱한 서비스에서 서로 다른 엔티티를 연관관계를 통해 데이터베이스 JOIN 을 이용하여 서비스 하는것으로 알고 있습니다. 그러나 MSA 환경에서는 데이터베이스 자체가 분리되어 있는 상태여서 해당 방식은 불가능 하다는 것을 이전 여러 질문들을 통해 알게 되었습니다.이러한 점을 해결할 방식을 찾는 도중 DDD를 이용하여 관점을 분리하고 연관된 엔티티들을 묶어 Aggregator 개념으로 묶어서 사용한다는 글들을 알게 되었습니다. 여기서 질문인 점은 Aggregator로 연관된 엔티티를 묶는 다는 의미가하나의 마이크로 서비스에 여러 엔티티를 두어 기존 사용하던 JPA 연관관계처럼 사용한다는 것인지아니면 분리된 두 서비스는 각자 두고 상위 서비스를 다시 선언하여 해당 서비스에서 연관된 두 엔티티를 조회하여 묶어서 사용하는 것인지 궁금합니다. 아니면 제가 아예 Aggregator 라는 개념을 잘못 이해한 것일까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Circuit breaker와 ErrorDecoder 동시 사용
강사님 안녕하세요? 강의 너무 잘 듣고 있습니다. Feign Client 강의에서 ErrorDecoder를 추가하여 try-catch문을 사용하지 않고, HTTP 에러 코드 별 처리 방법을 별도로 분리했었는데요.이번 강의에서처럼 Circuit breaker를 사용하면 API 호출 시 발생하는 모든 오류 상황에 대해 fallback 값이 전달되기 때문에 ErrorDecoder는 별도로 필요하지 않을 것 같습니다. 외부 API 호출하는 모든 케이스에서 circuit breaker를 사용한다면 ErrorDecoder는 불필요한 것이 맞나요?circuit breaker와 error decoder가 둘 다 필요하다고 한다면, error decoder은 어떤 역할을 할 수 있나요? 항상 감사드립니다.
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
@LoadBalanced 관련 질문입니다.
@LoadBalanced 를 사용할시에 apigateway를 거치지 않고 user -> order 로 가는것을 확인했는데 제가 궁금한것은 보통 client 단에서 첫 요청이 들어왔을 시에만 api gateway를 거치고 그 이후 비지니스 로직을 처리하기 위해서 ms간에 소통하는것은 api gateway를 거치지 않는것이 일반적인 건가요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
각 애플리케이션에 랜덤포트를 부여하는 이유
안녕하세요!!! 랜덤포트를 부여하는 이점에 대해서 아직도 이해가 잘 안갑니다.ㅜㅜ 마이크로서비스 애플리케이션의 확장성과 랜덤포트를 부여하는게 얼마나 깊은 관계가있나요?? 저는 정해두고 쓰는게 더 편하다고 생각했거든요. 그리고 실무에서도 정말 이렇게 랜덤포트로 사용하나요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
cannot resolve property
application.yml 파일에서 글로벌 필터의 속성 ( baseMessage, preLogger, postLogger) 는 인식하는데 로깅 필터의 속성은 인식하지 못해 cannot resolve property 에러가 납니다. 왜인지 이유를 알 수 없어 질문드립니다.LoggingFilter.java 파일입니다.package com.todaypills.apigatewayservice.Filter; import lombok.Data; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.gateway.filter.GatewayFilter; import org.springframework.cloud.gateway.filter.OrderedGatewayFilter; import org.springframework.cloud.gateway.filter.factory.AbstractGatewayFilterFactory; import org.springframework.core.Ordered; import org.springframework.http.server.reactive.ServerHttpRequest; import org.springframework.http.server.reactive.ServerHttpResponse; import org.springframework.stereotype.Component; import reactor.core.publisher.Mono; @Slf4j //for print log @Component /**커스텀 필터의 일종임, 단지 로그를 찍기 위한 필터이므로 이름을 Logging 이라고 지은 것*/ public class LoggingFilter extends AbstractGatewayFilterFactory<LoggingFilter.Config> { public LoggingFilter() { super(Config.class); } @Override public GatewayFilter apply(Config config) { /** * 위쪽 주석부분은 람다 표현식으로 바로 리턴한 것이고 이것은 람다를 사용하지 않고 리턴한 것임, * 따라서 인스턴스부터 만들어주어야 하고 GatewayFilter는 인터페이스이기 때문에 직접 인스턴스를 생성할 수는 없고, OrderedGatewayFilter() 를 이용하여 인스턴스를 만들어주어야함 * */ GatewayFilter filter = new OrderedGatewayFilter(((exchange, chain) -> { /** exchange: request와 response 객체를 얻기 위함 */ ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("logging filter: request id -> {}", config.getBaseMessage()); if(config.isPreLogger()){ log.info("logging pre filter start: request id -> {}", request.getId()); } return chain.filter(exchange).then(Mono.fromRunnable(() -> { if(config.isPostLogger()){ //Mono 객체: 웹플럭스(스프링5)에서 지원하는 기능으로 비동기방식의 서버에서 단일값을 전달할 때 모노타입으로 전달 log.info("logging post filter end: response code -> {}", response.getStatusCode()); } })); }), Ordered.HIGHEST_PRECEDENCE); //HIGHEST_PRECEDENCE 는 적용할 필터가 여러개일 때 어느것이 먼저 실행될지 우선순위를 부여함 return filter; } @Data // setter getter 함수 생성 (isPreLogger(), isPostLogger() 등) public static class Config{ // 여기에 configuration 이 있다면 삽입 private String baseMessage; private boolean preLogger; private boolean postLogger; } } application.yml 파일입니다.server: port: 8000 eureka: client: register-with-eureka: true fetch-registry: true service-url: defaultZone: http://localhost:8761/eureka spring: application: name: apigateway-service cloud: gateway: default-filters: - name: GlobalFilter args: # 우리가 정의한 변수 baseMessage: 게이트웨이 글로벌 필터입니다. preLogger: true #prefilter의 유무 postLogger: true routes: #FilterConfig의 라우팅 정보를 yml 파일로도 설정할 수 있음 - id: nutrients-service uri: http://localhost:8081/ predicates: - Path=/nutrients-service/** filters: # - AddRequestHeader=nutrients-request, nutrients-request-heaer-value # - AddResponseHeader=nutrients-response, nutrients-response-header-value - name: CustomFilter - name: LoggingFilter args: baseMessage: 커스텀 로깅 필터입니다. preLogger: true postLogger: true
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka sink connector를 통해서 단일 데이터베이스 저장을 했을 때 장점?
안녕하세요.Kafka Connect 를 활용한 단일 데이터베이스를 사용 파트를 듣고 있는데요.Multiple Order Service가 같은 DB URL을 가지고, JPA를 통해서 데이터 저장을 하면 될 것 같은데, 굳이 Kafka Sink Connector를 통해서 데이터 저장을 하는 이유가 따로 있을까요?JPA를 쓰면 Persistence Manager가 제공하는 여러 장점을 이용할 수 있을 것 같은데, Kafka sink connector는 그런 장점을 이용할 수 없을 것 같아서요.. 실제 현업에서 많이 사용되는 테크닉인지 궁금하고, 만약 사용한다면 장점은 무엇인지 궁금합니다!
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Filter 람다식 관련 질문드립니다.
안녕하세요!Custim Filter 강의 중 아래 코드 부분에서 GatewayFilter의 생성자가 exchange와 chain이기 때문에 return (exchange, chain) -> { .. 이 되는 것 까지는 이해를 하였습니다.그런데 이 때 exchange와 chain 변수가 어디에서 정의되어서 여기서 사용되는 건지 잘 모르겠습니다 ㅠㅠ return (exchange, chain) -> {// GatewayFilter의 생성자 Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain);
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
2개 이상의 마이크로 서비스가 결합됐을 때는 테스트코드는 어떻게 작성하는지 궁금합니다.
UserService API 를 호출할때 RestTemplate 를 통해 OrderService 의 API 를 추가로 호출하는 방법을 보고 각 마이크로 서비스들이 엔티티 단위로 모듈화 되어 설계되어있다면 이런식으로 하는구나~ 배울 수 있었습니다. 그런데 이렇게 두개 이상의 마이크로서비스가 호출되는 API 는 테스트 코드를 어떻게 작성해야 하는지 감이 잡히지 않습니다. Web Layer(Controller) 를 테스트할때는 Service 객체를 Mocking 해서 해결할 수 있을것 같은데, Service layer(Service 클래스) 를 테스트할때는 어떻게 해야할까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
innodb 관련 에러
안녕하세요!뒤늦게 강의를 수강하고 있습니다.현재 mariadb docker build 후에 docker run을 하게 되면 아래와 같은 에러가 발생합니다.구글링을 해도 방법을 찾을 수가 없어요 ㅜㅜ[Dockerfile][Docker logs mariadb]어떻게 해결해야 할까요?...
-
해결됨Microservice 이해 (with MSA패턴)
학습중에 몇가지 질문이 있습니다.
안녕하세요, MSA패턴1- 인프라 섹션의 컨테이너 오케스트레이션 챕터에서 몇가지 질문이 있습니다. 먼저, node 와 pod 의 관계가 헷갈립니다.주신 자료의 k8s 아키텍처 이미지를 보면 각 worker node 는 여러개의 pod 를 가질 수 있는 것 같은데 보통 한개의 node 에 여러개의 pod 를 설정하는 경우가 흔한가요?Scale out 을 진행 할 때 실제로 Scale out 되는 주체는 worker node 가 맞는건가요? (worker node 에 하나 이상의 Pod 가 존재 한다는 가정하에)보통 실무에서는 pod 수를 늘려주세요 라는 요청을 많이 들어봤는데요, 결국 node 를 늘리므로써 pod 가 늘려지는게 맞는건지 아니면 특정 node 안에서 pod 수 만 늘리는 건지 궁금합니다.보통 이런 요청은 Scale out 의 목적으로 pod 수를 늘려달라는 요청인데, 특정 node 안에서 pod 수만 늘어난다면 이게 Scale out 맞는건가 라는 생각이 들어서요. 그 다음은 worker node 에 관한 질문입니다. master node 는 연결된 worker node 들을 API 를 통해 관리하는 목적으로만 쓰이는것이 맞을까요? 인그레스는 master node 에서 관리하는 설정이 맞는지 궁금합니다.
-
해결됨Microservice 이해 (with MSA패턴)
1강 강의내용에 대한 2가지 질문이 있습니다.
SOA 와 MSA 를 명확하게 구분지을 수 있는 요소가 각각의 서비스에 대한 오토스케일링 (수평확장) 가능 여부 라고 이해해도 될까요? 클라우드 환경에서 수평 확장을 위한 가장 효율적인 시스템유형이 Cloud Native Application 이다 라고 설명 해주셨는데요, 클라우드 환경에서 수직 확장은 효율적이지 못한건가요? (잘 쓰이질 않는건가요?)강의 내용중에 수평 확장을 해놓고 그 상태에서 수직 확장을 하는 방식으로 적용을 한다. 라는 설명을 해주셨는데, 이 맥락과 연관이 있는지 궁금합니다!아직 실습을 해보지 않은 상황에서 단순하게 생각해보면, 수직확장은 반영에 시간이 걸린다 라고 설명해주셨는데 그렇다면 수직확장 부터 미리 반영시켜 놓고 서비스 운영 중에 자동으로 수평 확장이 될 수 있도록 오토스케일링 설정을 해놓아야 하는게 아닌가 라는 생각이 듭니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
다수의 개발자가 같이 협업할 때에 궁금한 점이 있습니다.
안녕하세요!먼저 강의 너무너무 잘 보고 있습니다!공부를 하다가 갑자기 궁금한게 생겼는데,여러 개발자와 협업해야하는 환경이 될 때같은 서비스를 개발 할 시 개발 환경이 어찌 되는지 알고 싶습니다.Q1. 같은 서비스 개발 할 때에 디스커버리 서버와 APIGateway를 각자 개발자가 켜놓고 연관 된 서비스들도 다 실행 한 뒤에 개발을 하는지..Q2. 아니라면 APIGateway를 공용으로 사용시 따로 환경세팅이 있을까요?APIGateway를 공유하고 같은 서비스를 켜놓고 개발을 진행시 프론트에서 서비스 API등 호출 할 때에 제가 아닌 다른분의 서비스에 들어가면 어쩌지? 하는의문에서 시작되었습니다.너무너무 궁금합니다..강의는 너무 잘 보고 있고 다음강의도 기대하겠습니다!감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
단일 DB 연결을 위한 Kafka 사용 이유 질문
안녕하세요 강사님, 너무 좋은 강의 잘 수강하고 있어 감사합니다. kafka 강의를 듣던 중 질문이 생겼는데요, 서로 다른 DB를 사용하는 각각의 마이크로서비스에서 데이터 동기화 문제를 해결하기 위해 Kafka를 사용한다는 것은 잘 알겠습니다. 그런데 동일한 DB를 사용하는 같은 마이크로서비스에서는 각각의 마이크로서비스에 서로다른 h2 DB가 연결되도록 하지 않고 동일한 mariadb로 설정해둔다면 데이터 동기화 문제는 없을 것 같은데 굳이 동일 마이크로서비스 내에서 서로 다른 인스턴스 사이의 데이터 동기화를 위해 kafka를 사용하는 이유가 무엇인지 잘 궁금해서 질문드립니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Source Connector 오류
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. Postman 으로 데이터값 { "name": "my-source-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "1234", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1" } } 을 Post 방식으로 보냈고 (h2 console 창에서 연결 확인했습니다 ) 다시 Get 방식으로 보냈을때 my-source-connect 확인했습니다. 그 후 connect 콘솔 창에 뜬 로그 입니다. [2022-08-08 23:05:06,233] INFO JdbcSourceConnectorConfig values: batch.max.rows = 100 catalog.pattern = null connection.attempts = 3 connection.backoff.ms = 10000 connection.password = [hidden] connection.url = jdbc:mariadb://localhost:3306/mydb connection.user = root db.timezone = UTC dialect.name = incrementing.column.name = id mode = incrementing numeric.mapping = null numeric.precision.mapping = false poll.interval.ms = 5000 query = query.retry.attempts = -1 query.suffix = quote.sql.identifiers = ALWAYS schema.pattern = null table.blacklist = [] table.monitoring.startup.polling.limit.ms = 10000 table.poll.interval.ms = 60000 table.types = [TABLE] table.whitelist = [users] timestamp.column.name = [] timestamp.delay.interval.ms = 0 timestamp.granularity = connect_logical timestamp.initial = null topic.prefix = my_topic_ transaction.isolation.mode = DEFAULT validate.non.null = true (io.confluent.connect.jdbc.source.JdbcSourceConnectorConfig:361) [2022-08-08 23:05:06,241] INFO AbstractConfig values: (org.apache.kafka.common.config.AbstractConfig:361) [2022-08-08 23:05:06,270] INFO [Worker clientId=connect-1, groupId=connect-cluster] Connector my-source-connect config updated (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1534) [2022-08-08 23:05:06,275] INFO [Worker clientId=connect-1, groupId=connect-cluster] Rebalance started (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:225) [2022-08-08 23:05:06,275] INFO [Worker clientId=connect-1, groupId=connect-cluster] (Re-)joining group (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:540) [2022-08-08 23:05:06,280] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully joined group with generation Generation{generationId=48, memberId='connect-1-74e3b810-49fe-4cd5-90cf-0c9408ba73ab', protocol='sessioned'} (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:596) [2022-08-08 23:05:06,297] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully synced group in generation Generation{generationId=48, memberId='connect-1-74e3b810-49fe-4cd5-90cf-0c9408ba73ab', protocol='sessioned'} (org.apache.kafka.clients.consumer.internals.AbstractCoordinator:756) [2022-08-08 23:05:06,298] INFO [Worker clientId=connect-1, groupId=connect-cluster] Joined group at generation 48 with protocol version 2 and got assignment: Assignment{error=0, leader='connect-1-74e3b810-49fe-4cd5-90cf-0c9408ba73ab', leaderUrl='http://127.0.0.1:8083/', offset=44, connectorIds=[my-source-connect], taskIds=[], revokedConnectorIds=[], revokedTaskIds=[], delay=0} with rebalance delay: 0 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1689) [2022-08-08 23:05:06,303] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connectors and tasks using config offset 44 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1216) [2022-08-08 23:05:06,308] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connector my-source-connect (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1299) [2022-08-08 23:05:06,313] INFO Creating connector my-source-connect of type io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:274) [2022-08-08 23:05:06,316] INFO SourceConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none header.converter = null key.converter = null name = my-source-connect predicates = [] tasks.max = 1 topic.creation.groups = [] transforms = [] value.converter = null (org.apache.kafka.connect.runtime.SourceConnectorConfig:361) [2022-08-08 23:05:06,317] INFO EnrichedConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none header.converter = null key.converter = null name = my-source-connect predicates = [] tasks.max = 1 topic.creation.groups = [] transforms = [] value.converter = null (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:361) [2022-08-08 23:05:06,339] INFO Instantiated connector my-source-connect with version 10.5.1 of type class io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:284) [2022-08-08 23:05:06,339] INFO Finished creating connector my-source-connect (org.apache.kafka.connect.runtime.Worker:310) [2022-08-08 23:05:06,341] INFO Starting JDBC Source Connector (io.confluent.connect.jdbc.JdbcSourceConnector:71) [2022-08-08 23:05:06,344] INFO [Worker clientId=connect-1, groupId=connect-cluster] Finished starting connectors and tasks (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1244) [2022-08-08 23:05:06,358] INFO JdbcSourceConnectorConfig values: batch.max.rows = 100 catalog.pattern = null connection.attempts = 3 connection.backoff.ms = 10000 connection.password = [hidden] connection.url = jdbc:mariadb://localhost:3306/mydb connection.user = root db.timezone = UTC dialect.name = incrementing.column.name = id mode = incrementing numeric.mapping = null numeric.precision.mapping = false poll.interval.ms = 5000 query = query.retry.attempts = -1 query.suffix = quote.sql.identifiers = ALWAYS schema.pattern = null table.blacklist = [] table.monitoring.startup.polling.limit.ms = 10000 table.poll.interval.ms = 60000 table.types = [TABLE] table.whitelist = [users] timestamp.column.name = [] timestamp.delay.interval.ms = 0 timestamp.granularity = connect_logical timestamp.initial = null topic.prefix = my_topic_ transaction.isolation.mode = DEFAULT validate.non.null = true (io.confluent.connect.jdbc.source.JdbcSourceConnectorConfig:361) [2022-08-08 23:05:06,369] INFO Attempting to open connection #1 to MySql (io.confluent.connect.jdbc.util.CachedConnectionProvider:79) [2022-08-08 23:05:06,446] INFO Starting thread to monitor tables. (io.confluent.connect.jdbc.source.TableMonitorThread:82) [2022-08-08 23:05:06,494] INFO SourceConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none header.converter = null key.converter = null name = my-source-connect predicates = [] tasks.max = 1 topic.creation.groups = [] transforms = [] value.converter = null (org.apache.kafka.connect.runtime.SourceConnectorConfig:361) [2022-08-08 23:05:06,498] INFO EnrichedConnectorConfig values: config.action.reload = restart connector.class = io.confluent.connect.jdbc.JdbcSourceConnector errors.log.enable = false errors.log.include.messages = false errors.retry.delay.max.ms = 60000 errors.retry.timeout = 0 errors.tolerance = none header.converter = null key.converter = null name = my-source-connect predicates = [] tasks.max = 1 topic.creation.groups = [] transforms = [] value.converter = null (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:361) [2022-08-08 23:05:06,530] ERROR Encountered an unrecoverable error while reading tables from the database (io.confluent.connect.jdbc.source.TableMonitorThread:224) org.apache.kafka.connect.errors.ConnectException: The connector uses the unqualified table name as the topic name and has detected duplicate unqualified table names. This could lead to mixed data types in the topic and downstream processing errors. To prevent such processing errors, the JDBC Source connector fails to start when it detects duplicate table name configurations. Update the connector's 'table.whitelist' config to include exactly one table in each of the tables listed below. [["mydb"."users", "performance_schema"."users"]] at io.confluent.connect.jdbc.source.TableMonitorThread.tables(TableMonitorThread.java:152) at io.confluent.connect.jdbc.JdbcSourceConnector.taskConfigs(JdbcSourceConnector.java:164) at org.apache.kafka.connect.runtime.Worker.connectorTaskConfigs(Worker.java:359) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnector(DistributedHerder.java:1428) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnectorTasksWithRetry(DistributedHerder.java:1366) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.access$1000(DistributedHerder.java:128) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1318) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1312) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:371) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:295) 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) [2022-08-08 23:05:06,538] ERROR WorkerConnector{id=my-source-connect} Connector raised an error (org.apache.kafka.connect.runtime.WorkerConnector:506) org.apache.kafka.connect.errors.ConnectException: Encountered an unrecoverable error while reading tables from the database at io.confluent.connect.jdbc.source.TableMonitorThread.fail(TableMonitorThread.java:226) at io.confluent.connect.jdbc.source.TableMonitorThread.tables(TableMonitorThread.java:153) at io.confluent.connect.jdbc.JdbcSourceConnector.taskConfigs(JdbcSourceConnector.java:164) at org.apache.kafka.connect.runtime.Worker.connectorTaskConfigs(Worker.java:359) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnector(DistributedHerder.java:1428) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnectorTasksWithRetry(DistributedHerder.java:1366) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.access$1000(DistributedHerder.java:128) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1318) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1312) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:371) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:295) 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) Caused by: org.apache.kafka.connect.errors.ConnectException: The connector uses the unqualified table name as the topic name and has detected duplicate unqualified table names. This could lead to mixed data types in the topic and downstream processing errors. To prevent such processing errors, the JDBC Source connector fails to start when it detects duplicate table name configurations. Update the connector's 'table.whitelist' config to include exactly one table in each of the tables listed below. [["mydb"."users", "performance_schema"."users"]] at io.confluent.connect.jdbc.source.TableMonitorThread.tables(TableMonitorThread.java:152) ... 14 more [2022-08-08 23:05:06,542] ERROR [Worker clientId=connect-1, groupId=connect-cluster] Failed to reconfigure connector's tasks, retrying after backoff: (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1377) org.apache.kafka.connect.errors.ConnectException: Encountered an unrecoverable error while reading tables from the database at io.confluent.connect.jdbc.source.TableMonitorThread.fail(TableMonitorThread.java:226) at io.confluent.connect.jdbc.source.TableMonitorThread.tables(TableMonitorThread.java:153) at io.confluent.connect.jdbc.JdbcSourceConnector.taskConfigs(JdbcSourceConnector.java:164) at org.apache.kafka.connect.runtime.Worker.connectorTaskConfigs(Worker.java:359) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnector(DistributedHerder.java:1428) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.reconfigureConnectorTasksWithRetry(DistributedHerder.java:1366) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.access$1000(DistributedHerder.java:128) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1318) at org.apache.kafka.connect.runtime.distributed.DistributedHerder$12.call(DistributedHerder.java:1312) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.tick(DistributedHerder.java:371) at org.apache.kafka.connect.runtime.distributed.DistributedHerder.run(DistributedHerder.java:295) 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) Caused by: org.apache.kafka.connect.errors.ConnectException: The connector uses the unqualified table name as the topic name and has detected duplicate unqualified table names. This could lead to mixed data types in the topic and downstream processing errors. To prevent such processing errors, the JDBC Source connector fails to start when it detects duplicate table name configurations. Update the connector's 'table.whitelist' config to include exactly one table in each of the tables listed below. [["mydb"."users", "performance_schema"."users"]] at io.confluent.connect.jdbc.source.TableMonitorThread.tables(TableMonitorThread.java:152) ... 14 more [2022-08-08 23:05:06,546] INFO [Worker clientId=connect-1, groupId=connect-cluster] Skipping reconfiguration of connector my-source-connect since it is not running (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1415) [2022-08-08 23:05:06,795] INFO [Worker clientId=connect-1, groupId=connect-cluster] Skipping reconfiguration of connector my-source-connect since it is not running (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1415) 계속 구글링하고 찾아봤는데 뭐가 잘못되었는지 잘모르겠습니다 ㅠ