본문 바로가기
반응형

Delvelopment/Kafka8

[Java] Synchronize (동기화) 방법 3가지 동기화는 여러 개의 쓰레드가 하나의 자원(리소스)에 접근하려 할 때 주어진 순간에는 단 하나의 쓰레드만 접근 가능 하도록 하는 것이다. 둘 이상의 쓰레드가 공동의 자원(파일이나 메모리 블록)을 공유하는 경우, 순서를 잘 맞추어 다른 쓰레드가 자원을 사용하고 있는 동안 한 쓰레드가 절대 자원을 변경할 수 없도록 해야한다. 만약 한 쓰레드가 파일에서 레코드를 수정하는데, 다른 쓰레드가 동시에 같은 레코드를 수정하면 심각한 문제가 발생할 수 있기 때문입니다. 이런 상황을 처리할 수 있는 한 방법은 관련된 쓰레드에 대한 동기화를 하는 것이다. 동기화를 하는 방법 → synchronized함수를 만들어 사용 → synchronized블록 사용. Thread-safe 하기 위한 일이다. Synchronized 키워.. 2022. 2. 20.
[Kafka] 같은메시지를 반복적으로 소비했던 리밸런싱 이슈 해결 (MAX POLL RECORDS CONFIG = "max.poll.record 초기 Kafka 운영 중 이상한 이슈에 직면했다. - 현상 kafka의 소비되어 처리된 메시지가 한 번이계속 반복적으로 수행하고 적게는 몇번 많게는 수십번까지 다시 소비하는 현상 이였다. 내 이론상 kafka 메시지는 리스너에서 처리된 후 kafka에 커밋을 치고 offset값을 올려주면서 다음 메시지를 처리한다고 생각했는데... 즉, 다시 말해서 정말 생각지도 못했던 이슈였던 것이다. 원인을 찾고 해당 증상을 면밀히 조사하여, kafka 리스너 셋팅 몇개를 수정하면서 문제를 해결하긴 했지만 초기에 알지 못했으면 큰 이슈로 연결 될뻔 했다. - 원인 Consumer가 메시지를 처리하는 도중 Timeout이 발생했고 그로 인해 파티션 리밸런싱 과정이 일어났다. Consumer는 (MAX_POLL_RECOR.. 2020. 11. 30.
[Kafka] Topic 메세지 보관주기 설정 (MSK) AWS 에서 제공하는 MSK 의 다큐먼트먼저 공유한다. https://docs.aws.amazon.com/ko_kr/msk/latest/developerguide/msk-configuration-properties.html 사용자 지정 MSK 구성 - Amazon Managed Streaming for Apache Kafka advertised.listeners 속성은 설정할 수 있지만 listeners 속성은 설정할 수 없습니다. docs.aws.amazon.com 카프카를 운영하면서 메시지를 언제까지 보관해야할지 고민에 빠졌다. 기본값인 1주일 정도를 보관하자니 너무 무거워서 부담이되고. 짧으면 너무 메세지를 짧게 가지고있어서 확인을 못할 것 같고, 라는 고민에 빠졋다. 결국 1~3일 정도가 적당하다.. 2020. 10. 12.
[kafka Connect] 주기적으로 수행되는 무거운 쿼리 ALL_OBJECTS (table.poll.interval.ms) Kafka Connect 를 운영하던 중 1분에 몇번씩 아래와 같은 무거운 쿼리가 수행하는 것을 파악할 수 있었다. SELECT NULL AS table_cat, o.owner AS table_schem, o.object_name AS table_name, o.object_type AS table_type, NULL AS remarks FROM all_objects o WHERE o.owner LIKE :1 ESCAPE '/' AND o.object_name LIKE :2 ESCAPE '/' AND o.object_type IN ('xxx', 'TABLE') ORDER BY table_type, table_schem, table_name DB 자원의 큰 리소스를 차지하고 있었고. 해당 쿼리는 DB의 테이.. 2020. 10. 12.
MQ (Message queue)란? 사내에서 Kafka 도입에 대한 발표가 있어서.. 정리차 한글자씩 적어보려한다. MQ 란? → Producer, Consumer가 존재하며 Producer는 메시지를 큐에 전송하고 Consumer가 큐의 메시지를 처리하는 방식이다. → MQ를 사용하면 비동기로 요청을 처리하고 queue에 저장하여 consumer에게 병목을 줄여줄 수 있는데 장단점은 존재한다. 왜 쓸까? → 일반적으로 Server-Client 구조에서는 사용자가 요청을 하면 Server에서는 Request에 대한 처리를 한 후 Response 한다. 이런 간단한 구조는 MQ와 같은 미들웨어를 사용할 필요가 없다. → MQ의 종류에도 RabbitMQ, Kafka, ActiveMQ 등 여러가지 MQ들이 존재한다. 각 시스템 목적에 맞춰 사용.. 2020. 8. 21.
[Spring Boot, kafka] 스프링 프로젝트에 kafka 리스너 적용기. Kafka와 zookeeper 설치와 실행이 완료됬다면 spring 프로젝트에서 접근이 가능하다. kafka가 로컬에 실행하였다면 간단하게 토픽이 생성되는 것 까지 볼수있다. 1. gradle Kafka 추가. bulid.gradle implementation 'org.springframework.kafka:spring-kafka' 2. yml (properties) 셋팅 application.yml 3. Consumer 셋팅 @Slf4j @EnableKafka @EnableRetry @Configuration public class KafkaConsumerConfig { @Value("${spring.kafka.bootstrap-servers}") private String bootstrapServer.. 2020. 6. 29.
반응형