묻고 답해요
141만명의 커뮤니티!! 함께 토론해봐요.
인프런 TOP Writers
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
예외처리
안녕하세요. 문득 궁금한 점이 생겼는대요..주문이 성공하고나서 카탈로그 쪽에서 장애가 발생해서 롤백을 해야한다고 했을 때는 처리방안이 어떻게 되나요??찾아보니까 사가패턴 ? 이런거 사용하는것으로 보이는대, 다른 방안도 있을까요? (처리가 좀 어렵네요)
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
커넥트를 이용한 데이터 마이그레이션 질문드립니다
안녕하세요, 양질의 강의 항상 감사드립니다!다름이 아니라 현재 실무에서 스프링 배치를 이용해서 데이터를 DB to DB 로 마이그레이션하는 업무가 있는데 이를 강의에서 배운 카프카 커넥트를 활용하면 좋을것 같아서 고민중인데 잘 안풀리는 부분이 있어 질문드립니다 데이터 가공문제DB to DB 로 이관시 가장 좋은것은 커넥트만 써서 코드개발없이 마이그레이션 해버리는 것이 좋을것같은데 막상 실제 마이그레이션 할 때는 source 에서 퍼온 데이터를 sink 시 몇몇 컬럼은 데이터 가공하거나 없어지는 등 가공에 약간 손을 봐야하는 경우가 종종 있어서 이런 케이스에 대해 어떻게 해결을 해야할 지 고민입니다.고민을 해봤을 때 해결방안으로는 streams api 를 껴서 아래와 같은 아키텍쳐로 해결하는 방법이 있을 것 같은데요source -> topic -> kafka stream api 등을 통해 데이터 가공 후 topic 전송 -> sink 커스텀 sink 나 source 커넥터 개발어느 방법이나 결국 추가개발이 필요한건 매한가지라 현재 배치로 개발해놓은 구조를 커넥트를 이용하도록 바꿨을 때 이점이 명확하게 안보여서 좀 고민입니다... 데이터 마이그레이션 후 검증문제실무에서 배치로 마이그레이션 후 원본데이터가 있는 source db 와 마이그레이션 한 sink db 간에 건수비교 등 데이터 이관이 잘 되었는지 대사비교를 진행하는데요, 카프카 커넥트로 전환한다고 해도 이러한 대사비교는 여전히 필요하지 않을까 싶은데 실무에서 카프카 커넥트를 활용할 때 이러한 검증 문제를 어떻게 해결하는지 궁금합니다 카프카 커넥트를 실무에서 활용한 경험이 없다보니.... 강사님이라면 이러한 문제에 직면했을때 어떤 생각을 가지실 지 궁금합니다!감사합니다:)
-
해결됨Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
docker 환경에서 eureka 대시보드 작동
8761:8761 로 포트 바인딩해서 정상 기동했고, docker log 에서도 정상적으로 기동해서 문제없어보이는데, 브라우저로 대시보드 웹페이지 접근하면 "ERR_EMPTY_RESPONSE" 로 나옵니다. 도원님 이미지로 기동해도 똑같은 현상입니다...!
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
cdc 동기화 테스트 환경 초기화
안녕하세요열심히 수강중인 수강생입니다.mysql과 postgresql을 동기화하는 cdc를 테스트중인데무언가 꼬였나봅니다.초기화하는 방법이 궁금합니다.강의의 어느 부분을 참고하면 되는지 답변 부탁드립니다감사합니다.
-
미해결카프카 완벽 가이드 - ksqlDB
ksqlDB 2부 강의의 PDF 문서는 어디서 다운 받을 수 있을까요
ksqlDB 2부 강의의 PDF 문서는 어디서 다운 받을 수 있을까요
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
파티션 1개당 컨슈머 1개가 좋다고 말씀 하셨는데용
강사님께서 컨슈머 개수는 토픽의 파티션 개수보다 같거나 작아야 한다고 하셨는데 토픽이 두개면 컨슈머를 새로 파면 될까요?파티션과 컨슈머가 1:1이여야 베스트라고 이해했는데 꼭 그렇지도 않을수 있나요? 업무와 강의 사이에서 헷갈리네용 ㅎㅎ
-
미해결[아파치 카프카 애플리케이션 프로그래밍] 개념부터 컨슈머, 프로듀서, 커넥트, 스트림즈까지!
commit을 꼭 안해도 되나요?
commit을 꼭 하지 않아도 record가 안전하게 처리되는 방법이 있을까요? 파티션 하나에 토픽 하나로 써비스 하고 있는데 선생님 강의 보며 commit을 해야하겠다 생각했지만,기술팀 분에게 여쭈니 꼭 commit하지 않아도 된다고 파이프라인은 그냥 데이터 보내는거라고 해서 안해도 된다고 하시는데 음..어떻게 이해를 하면 좋을까요?
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka 동기화 문제에 대해 질문이 있습니다.
항상 좋은 강의 감사합니다. 궁금한 점이 있어 질문을 남깁니다. Kafka를 이용해서 멀티 서버에서 하나의 DB를 사용하여 동시성 문제를 해결하는 것을 이해했습니다. 상품 제고가 0이 되면 더 이상 주문을 못하도록 하게 하고 싶습니다. 하지만 Kafka 요청을 통해 비동기로 주문을 하기 때문에 주문을 신청한 순간에는 재고가 있어 주문이 되었지만 Kafka의 모든 처리를 하고 나니 재고가 0이 되어 사실 주문할 수 없는 상황이었습니다. 이런 상황이 발생할 수도 있지 않나요??이럴 때는 어떻게 대처를 해야 하나요??쓰기 작업과 읽기 작업에서 동기화 문제는 어떻게 처리할 수 있나요?
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
connect-distributed.properties 설정
궁금한 사항이 있어서 질문 남깁니다.connect-distributed.properties 설정 관련 내용입니다.3노드 클러스터로 구성했는데 커넥트 기동하기 강의 편에서설정하는 부분이 있습니다.제가 3노드로 구성했는데 # 삭제하고listeners=HTTP://192.168.20.26:8083,HTTP://192.168.20.27:8083,HTTP://192.168.20.28:8083이렇게 구성하는게 맞는건지 궁금합니다.현재 설정은 #으로 주석 처리되어있습니다.감사합니다.
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
ip주소 질문
안녕하세요 강사님!현재 Users Microservice - JPA 부분을 들으면서 user등록까지 잘 해서 테이블에도 잘 나온 상태입니다.저는 client -> api gateway -> 유레카 -> user서비스이렇게 이해하고 있습니다.그리고 현재 집에 같은 와이파이로 연결된 데스크탑으로 (api gateway 역할을 하고 있다고 이해해도 될지 모르겠지만) discovery service를 올려놓았고요.노트북으로 user-service를 만들었습니다.노트북 브라우저로 유레카를 접근하고자 할 때에는 데스크탑 아이피 주소를 입력해서 접근했습니다. 여기까지는 이해가 잘 되었습니다. 그리고 이제 user를 등록하기 위해 postman의 ip주소를 입력하려고 유레카에서 user-service의 포트를 확인하기 위해 클릭하니 노트북 주소와 랜덤 포트가 나오더라고요! 그리고 그 주소로 api를 요청하니 잘 되었습니다. 여기서 질문입니다.모든 서비스는 api gateway를 거치는 것 아닌가요? 그렇다면 api gateway가 동작하고 있는 데스크탑 ip주소를 요청해야하는거 아닌가요? 추가질문으로 환경설정에서 0을 해서 포트가 랜덤으로 설정하게 하시는 이유가 궁금합니다!자세하고 쉽게 설명해주시기 위해 강의 준비해주셔서 감사합니다:)
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
connector의 적정 tasks.max 값은 어떻게 될까요?
s3 sink connector 설정 관련해서 문의드립니다.적절한 tasks.max의 값은 어떻게 될까요?여러 요인이 있겠지만 특히 토픽의 파티션 개수와 관련하여 정해야하는지 문의드립니다.
-
해결됨카프카 완벽 가이드 - 코어편
백그라운드 스레드 Sender에 대한 예외처리도 가능한가요?
KafkaProducer의 send 메소드를 try-catch 하면 아래와 같은 예외는 잡을 수 있는데요 Throws:AuthenticationException – if authentication fails. See the exception for more detailsAuthorizationException – fatal error indicating that the producer is not allowed to writeIllegalStateException – if a transactional.id has been configured and no transaction has been started, or when send is invoked after producer has been closed.InterruptException – If the thread is interrupted while blockedSerializationException – If the key or value are not valid objects given the configured serializersTimeoutException – If the record could not be appended to the send buffer due to memory unavailable or missing metadata within max.block.ms.KafkaException – If a Kafka related error occurs that does not belong to the public API exceptions.Batch 로 레코드를 묶어서 실제로 브로커에게 전송하는 Sender Thread 에서 네트워크 이슈 등으로 실패하면 어떻게 처리해야할지가 궁금합니다.(retries가 아닌 예외로 잡는 방법이 없을까요? ㅠㅠ)
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
random.value사용 질문있습니다.
안녕하세요 좋은강의 항상 감사합니다! 강의 도중 의문이 생겨서 문의드립니다. 혹시 yml설정에eureka: instance: instance-id: ${spring.cloud.client.hostname}:${spring.application.instance_id:${random.value}}${spring.application.instance_id을 포함하지 않고eureka: instance: instance-id: ${spring.cloud.client.hostname}:${random.value}${random.value}만 포함해도 동일한 값으로 인스턴스가 표시되던데 ${spring.application.instance_id를 포함하신 이유가 궁금합니다. 감사합니다!
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
Debezium 문의
Debezium 으로 cdc를 구축하고자 하는데 confluent kafka에서도 지원이 가능한지 문의드립니다.
-
미해결카프카 완벽 가이드 - 커넥트(Connect) 편
문의드림
https://archive.apache.org/dist/kafka/2.8.2/kafka_2.13-2.8.2.tgz 여기서 다운 받는 카푸카랑 confluent kafka랑 다른지 문의드립니다.
-
미해결실습으로 배우는 선착순 이벤트 시스템
Lettuce를 이용해서 구현해보려고 했는데
안녕하세요, 강사님. 교육 잘 들었습니다!다름이 아니오라, 선착순 이벤트를 Lettuce를 이용해서 만들고, Test를 하는데 계속 실패해서 문의드립니다. 여기에 소스코드 첨부하기에는 다소 협소해서 구글드라이브 공유로 주소 남겨봅니다.https://drive.google.com/file/d/102enQDhbWt1ukvXnBFP_w9VZrKngJRn2/view?usp=drive_link LettuceLockCouponFacadeTest.java에서 Test를 하였습니다. 왜 결과가 계속 0인지 잘모르겠습니다
-
미해결Spring Cloud로 개발하는 마이크로서비스 애플리케이션(MSA)
Kafka Connect Sink 사용할 때 LocalDateTime은 어떻게 하나요??
안녕하세요. 강사님의 강의를 듣고 개인 프로젝트에 적용하고 있습니다.LocalDateTime이 없을 때는 잘 수행되었는데 제 개인 프로젝트 엔티티에는 LocalDateTime이 있습니다. 이 부분에서 자꾸 에러가 나와서 어떻게 처리해야 하는지 알려주시면 감사하겠습니다. 다음은 제가 LocalDateTime을 처리하기 위해 따로 만든 엔티티 입니다.package com.dotd.product.kafkaConnectTest; import jdk.jfr.Name; import lombok.AllArgsConstructor; import lombok.Builder; import lombok.Data; import lombok.NoArgsConstructor; import org.springframework.data.annotation.CreatedDate; import org.springframework.data.jpa.domain.support.AuditingEntityListener; import javax.persistence.*; import java.time.LocalDateTime; @Entity @Data @NoArgsConstructor @AllArgsConstructor @Builder @Table(name = "nametest") @EntityListeners(AuditingEntityListener.class) public class NameTest { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Integer id; private String name; @CreatedDate @Column(name = "created_at") private LocalDateTime createdAt; } 또한, Kafka Connect Sink가 한 번 에러가 발생하면 state : FAILED로 바뀌면서 작동을 안 하는 거 같은데 어떻게 정상화 하나요..?? 127.0.0.1:8083/connectors/nametest-sink-connect/status이 요청을 보냈을 때 이렇게 나옵니다. { "name": "nametest-sink-connect", "connector": { "state": "RUNNING", "worker_id": "192.168.0.14:8083" }, "tasks": [ { "id": 0, "state": "FAILED", "worker_id": "192.168.0.14:8083", "trace": "org.apache.kafka.connect.errors.ConnectException: Exiting WorkerSinkTask due to unrecoverable exception.\r\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:611)\r\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.poll(WorkerSinkTask.java:333)\r\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.iteration(WorkerSinkTask.java:234)\r\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.execute(WorkerSinkTask.java:203)\r\n\tat org.apache.kafka.connect.runtime.WorkerTask.doRun(WorkerTask.java:189)\r\n\tat org.apache.kafka.connect.runtime.WorkerTask.run(WorkerTask.java:244)\r\n\tat java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)\r\n\tat java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)\r\n\tat java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)\r\n\tat java.base/java.lang.Thread.run(Thread.java:834)\r\nCaused by: org.apache.kafka.connect.errors.ConnectException: java.sql.SQLException: Exception chain:\r\njava.sql.BatchUpdateException: Column 'created_at' cannot be null\r\n\r\n\tat io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:124)\r\n\tat org.apache.kafka.connect.runtime.WorkerSinkTask.deliverMessages(WorkerSinkTask.java:581)\r\n\t... 10 more\r\nCaused by: java.sql.SQLException: Exception chain:\r\njava.sql.BatchUpdateException: Column 'created_at' cannot be null\r\n\r\n\tat io.confluent.connect.jdbc.sink.JdbcSinkTask.getAllMessagesException(JdbcSinkTask.java:154)\r\n\tat io.confluent.connect.jdbc.sink.JdbcSinkTask.put(JdbcSinkTask.java:104)\r\n\t... 11 more\r\n" } ], "type": "sink" }
-
미해결실습으로 배우는 선착순 이벤트 시스템
예제 프로젝트 상에서의 Kafka 사용시 궁금한점
강의 잘 듣고 있습니다. 질문사항이 두개 있습니다.1.4강의 [문제점] 영상에서 쿠폰생성 10000개 요청으로 인해 mysql이 1분에 100개의 insert가 가능하다고 가정할 시 '주문생성/회원가입요청이 타임아웃 또는 10분뒤에 실행' 된다고 하셨는데요.예제로 사용하신 Kafka 사용 예제에서는 Consumer 프로젝트도 어차피 API프로젝트와 같은 DB를 바라보고 있으므로, 어차피 Kafka를 사용하여도 '주문생성/회원가입요청이 타임아웃 또는 10분뒤에 실행'되지 않나요? 왜 여쭤보냐면, 강의 내에서 Kafka 미사용시 주문생성/회원가입요청의 타임아웃 및 10분뒤 실행에 대한 해결책을 Kafka로 사용하셔서 문의드립니다.2.5강의 [Consumer 사용하기] 영상을 보면 API 프로젝트 Consumer 프로젝트가 별개로 존재합니다.그러므로 API프로젝트의 테스트 케이스가 종료되어도 Consumer 프로젝트는 이미 Kafka로 100개의 데이터가 스트림으로 들어오는 상태이므로, 테스트케이스가 종료되어도(즉, API프로젝트가 종료되어도) Cunsumer 프로젝트는 종료가 되지 않은 상태이므로 100개의 쿠폰이 DB에 생성이 되어야 하는게 아닌지요?왜 여쭤보냐면, 강의 내에서는 API프로젝트가 종료되면 Consumer 프로젝트도 작업이 멈추는 현상이 있어서 문의드립니다.
-
미해결카프카 완벽 가이드 - 코어편
mtputty 설치했는데 connect error가 뜹니다..
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.강의에서 하신대로 ip 할당도 하였고 192.168.56.101로 핑을 날려도 정상적으로 핑 되는거 확인했고 mtputty로 연결하면 connection error가 뜨네요 어떡하죠.?
-
미해결실습으로 배우는 선착순 이벤트 시스템
강사님 궁금한것이 있습니다.
궁금한점이 있습니다. 실패에 대한 처리를 폴링방식으로하면, 고객에게 바로바로 알릴 수 없지 않나요? 만약에 100개 쿠폰을 선착순으로 발급해야하는데,그 중에 51개 쨰에서 발급중 실패가 된다면? 제가 생각된 건 재처리재처리동안은 나머지 사용자는 대기하는가?실패에 대한 처리를 실패 테이블에 인서트나머지 쿠폰 발급그렇다면 발급된 총 쿠폰의 수는 100개 이지만 51번째 고객 처리는? 궁금합니다!