묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
강의자료 주소 좀 알려주세요.
강의자료를 볼 수 있는 github가 있었던 것 같은데아무리 찾아도 없네요.강의자료 다운 혹은 볼 수 있는 주소 좀 알려주세요.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
The request was rejected because the URL contained a potentially malicious String "%0A"
UserServiceImplString orderUrl = String.format(env.getProperty("order_service.url"), userId);user-service.ymlorder_service: url: http://127.0.0.1:8000/order-service/%s/orders The request was rejected because the URL contained a potentially malicious String "%0A"실행 중에 해당 에러가 발생했습니다.springSecurity가 버전업 되어 %s같은 것들을 사용하지 못하게 막은 것 같은데 해결 방안을 알고 싶습니다.정확한 에러는 아래와 같습니다.org.springframework.security.web.firewall.RequestRejectedException: The request was rejected because the URL contained a potentially malicious String "%0A"*spring Security 2.7.12
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
kafka connectors 에러
안녕하세요 강의 잘 듣고 있습니다.!!127.0.0.1:8083/connectors로 POST 요청으로{ "name": "my-source-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "지정한 password", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1" } }201 응답으로 잘 왔습니다.{ "name": "my-source-connect2", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mariadb://localhost:3306/mydb", "connection.user": "root", "connection.password": "지정한 password", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1", "name": "my-source-connect2" }, "tasks": [], "type": "source" }127.0.0.1:8083/connectors/my-source-connect/status를 보니{ "name": "my-source-connect", "connector": { "state": "FAILED", "worker_id": "192.168.200.174:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:62)\n\tat io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143)\n\tat org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121)\n\tat org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181)\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539)\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136)\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635)\n\tat java.base/java.lang.Thread.run(Thread.java:833)\nCaused by: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost:3306/mydb\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706)\n\tat java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190)\n\tat io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84)\n\tat io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54)\n\t... 13 more\n" }, "tasks": [], "type": "source" }터미널에서 확인해보니 127.0.0.1:8083/connectors로 POST 요청으로 보낼 때[2023-08-08 19:11:24,848] 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:376) [2023-08-08 19:11:24,850] INFO AbstractConfig values: (org.apache.kafka.common.config.AbstractConfig:376) [2023-08-08 19:11:24,856] INFO [Worker clientId=connect-1, groupId=connect-cluster] Connector my-source-connect2 config updated (org.apache.kafka.connect.runtime.distributed.DistributedHerder:2092) [2023-08-08 19:11:24,858] INFO [Worker clientId=connect-1, groupId=connect-cluster] Rebalance started (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:231) [2023-08-08 19:11:24,858] INFO [Worker clientId=connect-1, groupId=connect-cluster] (Re-)joining group (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:566) [2023-08-08 19:11:24,860] INFO 127.0.0.1 - - [08/8월/2023:10:11:24 +0000] "POST /connectors HTTP/1.1" 201 400 "-" "PostmanRuntime/7.32.3" 18 (org.apache.kafka.connect.runtime.rest.RestServer:62) [2023-08-08 19:11:24,861] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully joined group with generation Generation{generationId=4, memberId='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', protocol='sessioned'} (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:627) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Successfully synced group in generation Generation{generationId=4, memberId='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', protocol='sessioned'} (org.apache.kafka.connect.runtime.distributed.WorkerCoordinator:802) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Joined group at generation 4 with protocol version 2 and got assignment: Assignment{error=0, leader='connect-1-a7b22fdb-774a-479a-9618-b4e9504e4e95', leaderUrl='http://192.168.200.174:8083/', offset=5, connectorIds=[my-source-connect2, my-source-connect1, my-source-connect], taskIds=[], revokedConnectorIds=[], revokedTaskIds=[], delay=0} with rebalance delay: 0 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:2282) [2023-08-08 19:11:24,866] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connectors and tasks using config offset 5 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1676) [2023-08-08 19:11:24,867] INFO [Worker clientId=connect-1, groupId=connect-cluster] Starting connector my-source-connect2 (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1793) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] Creating connector my-source-connect2 of type io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:293) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] 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 exactly.once.support = requested header.converter = null key.converter = null name = my-source-connect2 offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.SourceConnectorConfig:376) [2023-08-08 19:11:24,867] INFO [my-source-connect2|worker] 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 exactly.once.support = requested header.converter = null key.converter = null name = my-source-connect2 offsets.storage.topic = null predicates = [] tasks.max = 1 topic.creation.groups = [] transaction.boundary = poll transaction.boundary.interval.ms = null transforms = [] value.converter = null (org.apache.kafka.connect.runtime.ConnectorConfig$EnrichedConnectorConfig:376) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Instantiated connector my-source-connect2 with version 10.7.3 of type class io.confluent.connect.jdbc.JdbcSourceConnector (org.apache.kafka.connect.runtime.Worker:315) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Finished creating connector my-source-connect2 (org.apache.kafka.connect.runtime.Worker:336) [2023-08-08 19:11:24,868] INFO [Worker clientId=connect-1, groupId=connect-cluster] Finished starting connectors and tasks (org.apache.kafka.connect.runtime.distributed.DistributedHerder:1704) [2023-08-08 19:11:24,868] INFO [my-source-connect2|worker] Starting JDBC Source Connector (io.confluent.connect.jdbc.JdbcSourceConnector:71) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] 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:376) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validating JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:171) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Validated JDBC URL. (io.confluent.connect.jdbc.dialect.DatabaseDialects:174) [2023-08-08 19:11:24,869] INFO [my-source-connect2|worker] Initial connection attempt with the database. (io.confluent.connect.jdbc.JdbcSourceConnector:94) [2023-08-08 19:11:24,871] INFO [my-source-connect2|worker] Unable to connect to database on attempt 1/3. Will retry in 10000 ms. (io.confluent.connect.jdbc.util.CachedConnectionProvider:90) java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydb at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190) at io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250) at io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84) at io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54) at io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95) at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190) at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343) at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143) at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121) at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833) [2023-08-08 19:11:34,877] INFO [my-source-connect2|worker] Unable to connect to database on attempt 2/3. Will retry in 10000 ms. (io.confluent.connect.jdbc.util.CachedConnectionProvider:90) java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydb at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:706) at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:190) at io.confluent.connect.jdbc.dialect.GenericDatabaseDialect.getConnection(GenericDatabaseDialect.java:250) at io.confluent.connect.jdbc.util.CachedConnectionProvider.newConnection(CachedConnectionProvider.java:84) at io.confluent.connect.jdbc.util.CachedConnectionProvider.getConnection(CachedConnectionProvider.java:54) at io.confluent.connect.jdbc.JdbcSourceConnector.start(JdbcSourceConnector.java:95) at org.apache.kafka.connect.runtime.WorkerConnector.doStart(WorkerConnector.java:190) at org.apache.kafka.connect.runtime.WorkerConnector.start(WorkerConnector.java:215) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:360) at org.apache.kafka.connect.runtime.WorkerConnector.doTransitionTo(WorkerConnector.java:343) at org.apache.kafka.connect.runtime.WorkerConnector.doRun(WorkerConnector.java:143) at org.apache.kafka.connect.runtime.WorkerConnector.run(WorkerConnector.java:121) at org.apache.kafka.connect.runtime.isolation.Plugins.lambda$withClassLoader$1(Plugins.java:181) at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:539) at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) at java.base/java.lang.Thread.run(Thread.java:833)으로 발생합니다. 에러를 보니 java.sql.SQLException: No suitable driver found for jdbc:mariadb://localhost:3306/mydbKafka Connect 런타임에서 MariaDB의 JDBC 드라이버를 찾지 못한거 같았습니다.~/confluent-7.4.0/etc/kafka/connectdistributed.properties 경로에plugin.path=/Users/ryu/kafka/confluentinc-kafka-connect-jdbc-10.7.3/lib잘 지정해준거 같았고 문제가 예상되는 부분은 현재 gradle을 사용해서 예제를 따라하고 있었습니다. ...Maven Local Repository에 라이브러리 배포하는 식으로해서plugins { id 'java-library' id 'maven-publish' id 'org.springframework.boot' version '2.7.14' id 'io.spring.dependency-management' version '1.0.15.RELEASE' } group = 'com.spring' version = '0.0.1-SNAPSHOT' java { sourceCompatibility = '17' } configurations { compileOnly { extendsFrom annotationProcessor } } repositories { mavenCentral() } ext { set('springCloudVersion', "2021.0.8") } dependencies { implementation 'org.springframework.boot:spring-boot-starter-data-jpa' implementation 'org.springframework.boot:spring-boot-starter-web' implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client' implementation 'org.modelmapper:modelmapper:2.4.5' implementation 'org.mariadb.jdbc:mariadb-java-client:2.7.2' compileOnly 'org.projectlombok:lombok' developmentOnly 'org.springframework.boot:spring-boot-devtools' runtimeOnly 'com.h2database:h2:1.3.176' annotationProcessor 'org.projectlombok:lombok' testImplementation 'org.springframework.boot:spring-boot-starter-test' } dependencyManagement { imports { mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}" } } tasks.named('test') { useJUnitPlatform() } publishing { publications { maven(MavenPublication) { groupId = 'org.mariadb.jdbc' // groupId artifactId = 'mariadb-java-client' // artifactId version = '2.7.2' // version from components.java } } }publishMavenPublicationToMavenLocal 을 통해서 배포해버리고...maven의 기본 repository인 .m2에서 확인했을 때.jar 파일이 mariadb-java-client-3.1.4-plain.jar 밖에 없어 사용했는데 혹시 gradle을 이용하면서 해결할 수 있는 방법이 있을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
window11 / 23.08.08 기준 설정
Eralang 최신버전 다운 가정 하에환경변수 ERLANG_HOME : C:\Program Files\Erlang OTP 추가기존의 path 변수에 %ERLANG_HOME%\bin 추가그 후 rabbitmq command prompt 여신 후 rabbitmq-server -detachedrabbitmq-plugins enable rabbitmq_management 순서대로 입력만약 안될 시에 rabbitmq-service.bat removerabbitmq-service.bat installrabbitmq-server -detachedrabbitmq-plugins enable rabbitmq_management 순서로 입력
-
미해결카프카 완벽 가이드 - 코어편
빅데이터 관리에 관해서
안녕하세요 강사님 강의 잘 듣고 있습니다.강의중간에 잠깐 언급하고 넘어가신 부분중에 궁금한게 있어서 질문드립니다.현업에서 실제로 하루에 10기가 혹은 20기가로 엄청난 양의 데이터가 나올때이 데이터를 실제로 어떻게 처리하는지 궁금합니다.감사합니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
안녕하세요 강사님 Redis Template에 관한 질문입니다.
사놓고 안 듣다가 이제 제대로 Redis를 학습해보려고 합니다.Redis Template를 사용하는 방식과그냥 Repository를 사용하는 방식이 있다고 들었습니다.Redis Template 말고 interface RedisRepository extends CrudRepository<>쿠폰 발급을 이렇게 정의해서 사용할 수 있나요?
-
미해결실습으로 배우는 선착순 이벤트 시스템
Kafka 처리량 조절 관련 문의드립니다
며칠전 수강시작했구요. 첫 완강한 인프런 유료강의가 되었네요.앞으로도 이러한 스타일 (주제중심, 적당한 총 길이)의 강의를 더 만들어주시면 감사하겠습니다.업무환경에서 다양한 기술스택을 경험하기 어려운 개발자들도 경험하면 좋을 기술스택도 좀 포함되면 더할나위 없이 좋을것 같구요. 제 경우엔 이 강의 덕분에 아주 오래전 살짝 경험해본 Redis 를 복습하게 되었고, Kafka 에 대해서도 입문하게 되었습니다.질문드립니다.이 강의에서 Kafka 이용의 장점은 처리량 조절이라고 말씀주셨습니다.처리량 조절의 구체적인 방안은구성방식, 요건등 상황에 따라 다양한 안이 있긴 하겠지만혹시 알려주실만한 방안이 있을까요? 개인적으로 찾아본것은 컨슈머 옵션중fetch.max.wait.ms 또는 fetch.max.bytes같은 옵션을 이용하면 괜찮겠다라는 생각이 들긴 했습니다.(쓰면서 생각드는건데.... 만약 두개 동시에 이용시 OR 조건으로 동작해야 될텐데.. 라는 생각이...) 경험하신 사례이든, 참고할만한 링크이든 혹시 알려주실수 있다면 감사하겠습니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
homebrew와 m1 맥북으로 설치했다면 아래 명령어로 경로 확인 가능
mysql 접속 후 아래 명령어 2가지를 통해 알 수 있음.show variables like 'datadir';select @@datadir;
-
미해결카프카 완벽 가이드 - ksqlDB
drop stream delete topic 관련 오류
안녕하세요 강사님. 처음 stream 생성 후 삭제시에 토픽삭제 까지하는 명령어를 쳤을때 명령어실행후 ~was dropped. 라고 성공적으로 메시지도 뜨고 show streams; 했을때 stream 목록까지 안보이는데 console로 list확인했을떄 topic이 남아있는데 어떤 문제가 있어서 이러는걸까요?
-
미해결카프카 완벽 가이드 - 코어편
레인지 방식
서로 다른 토픽에 같은 컨슈머로 받을 때, 토픽 A에 orderId가 들어오고, 토픽 B에 orderId를 키로 가진 orderItem이 들어왔을 때, 어그리게이트를 하려면 같은 시점에 들어와야하지 않나요? 이해가 잘 안가서 질문드립니다.
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
브로커에 장애가 발생한 경우
예를 들어, 가용한 브로커개수가 3개고 특정 토픽의 복제 개수가 2로 운영하는 경우라고 가정하겠습니다.이때 이 토픽을 포함하고 있던 두 대중, 한대가 죽으면이 토픽은 그 브로커가 다시 살아날 때까지 복제개수가 한개가 되는건가요? 아니면 원래는 이 토픽을 갖고있지않던 다른 브로에 이 토픽이 추가되어 운영되나요 ? 복제개수가 2ㅇ,ㄴ
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
my_topic_users 가 자동으로 생성되지 않을때
아.. 설정 뭔가 잘 안되어서 계속 빠꾸를 했었네요 ^^;;; 혹시라도 저처럼 db insert 시 자동으로 topic이 생성 되지 않으시는분들은{ "name": "my-source-connect", "config": { "connector.class": "io.confluent.connect.jdbc.JdbcSourceConnector", "connection.url": "jdbc:mysql://localhost:3306/mydb", "connection.user": "root", "connection.password": "passw0rd", "mode": "incrementing", "incrementing.column.name": "id", "table.whitelist": "users", "topic.prefix": "my_topic_", "tasks.max": "1", "poll.interval.ms" : 10000, "topic.creation.default.replication.factor":1, "topic.creation.default.partitions" : 1 } } 해당 두줄을 넣어 주시면 자동으로 생성이 됩니다 ^^;; "topic.creation.default.replication.factor":1, "topic.creation.default.partitions" : 1
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
encrypt.key-store.location 경로 에러 질문
Apple M1 Ventura 13.4.1 (컴퓨터)IntelliJ IDEA 2022.2.3 (개발환경)Spring Boot 2.7.13Spring Cloud 2021.0.7java 11 왜 인지는 모르겠는데 location 경로를 아래와 같이 적어야 성공이 됩니다.그리고 아래와 같이 'file:/' 로 적으면 실패하게 됩니다.IllegalStateException : Invalid keystore location 이라고 jks 파일 경로를 못찾는다는 에러가 뜹니다.아무리 구글링해도 이러한 설명은 찾지 못해서 스택오버플로우의 다양한 사례를 보다가 저렇게 경로를 적은 분이 있어서 저도 '/' 를 제거하여 'file:' 로 작성하니 바로 인식이 되어 성공했습니다. 어떻게 된 일인지 너무 궁금합니다. 여기 공식문서에서는 prefix로는 'file:' 을 적으라고 되어있고 윈도우 환경의 절대경로에서는 '/'를 추가하라고 적혀있습니다. 그 외의 글을 읽어도 이해를 못하겠습니다. 강사님께서도 맥북인데 "file:/"로 잘 사용하는 것으로 보아 스프링 버전업이 되면서 뭔가 달라진것인지 질문을 남깁니다.
-
미해결15일간의 빅데이터 파일럿 프로젝트
zookeeper 관련 문의드립니다.
실습에서는 server01에 zookeeper 설치하고, server02에서 zookeeper-client 실행시 문제가 없는데 제환경에서는 Server01에 설치하여 server01에서만 클라이언트 실행되고, server02에서는 오류가 나는데요 정상일까요
-
미해결실습으로 배우는 선착순 이벤트 시스템
이벤트 처리를 위한 여러가지 방식
안녕하세요 강사님! 강의 너무 잘 들었습니다. 강의를 다 듣고 몇가지 질문이 있어 이렇게 질문 드립니다.카프카에 대해서 명확히 이해하지 못해서 그러는데 Consumer에서도 결국 토픽에서 가져와서 MySQL DB에 저장을 하는 방식인데, MySQL의 처리속도가 1분에 100개라고 한다면 100분이 걸리는 것은 동일한거 아닌가? 하는 궁금증이 들었습니다! 카프카를 사용하는 이유는 단순히 수많은 요청이 왔을 때 처리량을 조절해 DB가 다운되지 않도록 함인가요?유명 연예인의 티켓팅 서비스 같은 경우처럼 좌석번호마다 다른 티켓으로 보는 경우는 어떤 방식을 사용하는게 맞는것인지 문득 궁금해졌습니다! 이전 동시성 강의처럼 Lock을 거는 방식을 사용하는 방식이 옳을지 아니면 이번 강의에서 Redis의 Set을 사용하여 좌석번호마다 좌석이 찼는지를 구별하는것이 옳을지, 아니면 또 다른 방법을 사용하는지 궁금합니다!마지막에서 쿠폰을 발급하다가 에러가 발생하면 여러가지 방식이 있다고 하셨는데 또 어떤 방식이 있는지, 또한 그 방식이 현재 강사님께서 설명해주신 FailedEvent와 무슨 장단점 차이가 있는지가 궁금합니다!
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
새로운 마이크로서비스가 추가된 경우 클라이언트 배포 여부
1분경, 새로운 마이크로서비스가 배포된 경우에도 API 게이트웨이를 두면 클라이언트는 API게이트웨이만 상대하면 된다고 하셨는데,새로운 마이크로서비스가 생기면 클라이언트는 배포를 하지 않아도 된다는 뜻으로 이해를 했는데,새로운 마이크로서비스와 연결하기 위해서는 클라이언트에도 연결을 위한 코드가 추가될텐데 클라이언트도 배포를 해야 하는 것은 아닌지 문의 드립니다 !감사합니다.
-
미해결카프카 완벽 가이드 - 코어편
auto.offset.reset은 첫구독일때만 의미가 있는건가요?
__consumer_offsets 토픽에 오프셋 데이터 적재 이후로는의미가 없는 설정값인게 맞을까요?
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
애플리케이션 개발 실습간 레코드 미등록 사항
안녕하십니까 애플리케이션 실습 중인데 레코드가 등록 되지 않아서 이런경우는 어떤것을 확인하면 되는지 알려주시면 감사하겠습니다. 이클립스에서 git에 올려주신 코드를 그대로 실행하였습니다. 그래서 아래와 같이 로그가 떴고아래와 같이 해당 토픽을 조회하였지만 아무 레코드가 조회되지 않았습니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
MySql Lock을 사용하지 않는 이유
강의에서 설명해주시기로는 쿠폰 개수를 가져오는 것부터 쿠폰 생성까지 lock을 걸어야 한다고 설명 주셨는데 이전 강의인 재고 관리 이슈와는 다르게 row가 아닌 table에 lock을 걸기 때문에 성능 이슈가 발생한다고 보면 될까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Filter우선순위 질문
안녕하세요! MSA강의 섹션2 Logging Filter관련 부분 듣다가 필터 우선순위와 관련된 궁금증이 생겨서 질문 남깁니다! GatewayFilter filter = new OrderedGatewayFilter((exchange, chain) -> { ServerHttpRequest request = exchange.getRequest(); ServerHttpResponse response = exchange.getResponse(); log.info("Logging Filter base message: {}",config.getBaseMessage()); if(config.isPreLogger()){ log.info("Logging Filter Start: request uri -> {}",request.getURI()); } //Custom Post Filter return chain.filter(exchange).then(Mono.fromRunnable(()->{ if(config.isPostLogger()){ log.info("Logging Filter End: response Code -> {}",response.getStatusCode()); } })); }, Ordered.HIGHEST_PRECEDENCE); return filter;위와 같은 방식으로 OrderedGatewayFilter를 사용해 filter를 생성했는데 이때 두번째 인자로 Ordered.HIGHEST_PRECEDENCE를 사용할 때와 Ordered.LOWEST_PRECEDENCE를 사용할 때 등장하는 filter 우선순위와 관련된 궁금증이 생겼습니다.HIGHEST를 사용할때는 우선순위가 높은 필터가 먼저 나와서 강의에서도 그렇고 코드 실행결과LoggingFIlter -> GlobalFilter -> CustomFilter의 순서로 Filter 가 등장했는데 그렇다면, 반대로 우선순위가 낮은 경우인 LOWEST를 사용할 때는 CustomFilter -> GlobalFilter -> LoggingFIlter의 순서로 filter가 등장해야한다고 생각하는데 결과가 그렇지 않아서 우선순위에 어떠한 개념이 있는지, 제가 어떤 개념을 놓치고 있는지 의문이 들어 질문글 남깁니다!