개발자 라이프
-
[Kafka] kafka api - LeaderAndIsr 에 관하여개발자 라이프/카프카 2021. 4. 23. 17:22
들어가며 카프카 클러스터의 브로커들 중에는 파티션 레플리카들의 리더와 팔로워 상태를 관리하는 컨트롤러 브로커가 있습니다. 컨트롤러 브로커는 브로커들의 partition reassign 등으로 리더-팔로워 상태가 변경된 경우, 변경된 상태를 클러스터의 브로커들에게 전달하여 적용할 수 있도록 합니다. 이번 글은 컨트롤러 브로커가 다른 브로커에 레플리카 정보를 전달하는 과정에 대해 알아봅니다. LeaderAndIsr 카프카는 브로커 간 통신에 관한 protocol과 api 스펙을 정의해서 사용합니다. 그중 파티션의 리더-팔로워 역할 정보와 ISR(In Sync Replicas) 정보를 통신하기 위해 LeaderAndIsr 스펙(api key)를 사용합니다. LeaderAndIsr Request LeaderAn..
-
[Kafka Connect] Confluent S3 Sink Connector 의 설정과 Heap memory개발자 라이프/카프카 2021. 4. 5. 18:24
들어가며 앞선 Confluent S3 Sink Connector는 왜 OOM에 취약한가?를 통해 Confluent S3 Sink Connector(이하 s3 커넥터)가 OOM에 취약한 이유에 대해 알아봤습니다. 그렇다면 s3 커넥터를 배포 함에 있어 OOM이 안나기 위해 어떤 설정들을 고려해야 하는지, 또 그 설정들에 따라 어떤 케이스가 발생할 수 있는지 이번 글을 통해 알아봅니다. S3 Sink Connector 가 메모리를 점유하는 흐름 S3 커넥터가 어떤 설정을 통해 Heap memory가 결정되는지 알아보기 전에, 먼저 S3 커넥터가 주로 Heap memory를 점유하는 흐름을 알아봅니다. 위 그림은 하나의 S3SinkTask가 특정 Topic에서 레코드를 컨슘 한 뒤 S3로 적재하는 과정을 나타..
-
[Kafka 운영] 컨슈머 그룹 정보는 언제 사라질까?개발자 라이프/카프카 2021. 3. 29. 01:21
들어가며 카프카를 운영하다 보면 다양한 컨슈머가 붙었다(active) 떨어지곤(inactive) 합니다. 특히, 운영 과정에서 자주 사용하는 콘솔 컨슈머의 경우, 사용할 때마다 새로운 컨슈머 그룹 정보를 생성하게 됩니다. 그런데 운영하다 보면 어느샌가 이전에 사용했던 컨슈머 그룹 정보가 남아있지 않다는 것을 볼 수 있습니다. 그렇다면 카프카는 컨슈머 그룹 정보를 언제 청소(clean up)하게 될까요? 이번 글은 로그 정보를 이용하여 컨슈머 그룹 정보가 언제 어떤 설정과 연관되어 사라지는지 알아봅니다. __consumer_offsets를 찍어보자 각 컨슈머 그룹은 컨슈밍 하는 토픽 파티션에 대하여 어디까지 컨슈밍 했는지를 __consumer_offsets 토픽에 저장합니다. 그렇다면 컨슈머 그룹은 이 토..
-
[Kafka Connect] Confluent S3 Sink Connector는 왜 OOM에 취약한가?개발자 라이프/카프카 2021. 3. 21. 23:35
들어가며 카프카 커넥터는 카프카와 데이터 소스 사이의 파이프라인을 몇 가지 설정이 포함된 HTTP 요청으로 만들어집니다(참고). 그 중 S3 Sink Connector(이하 S3 싱크 커넥터)는 카프카의 토픽에 적재된 메시지들을 AWS S3 버켓에 저장해주는 커넥터입니다. S3는 데이터 백업, 영구 저장 등으로 자주 사용되므로, S3 싱크 커넥터는 메시지를 영구 저장하지 않는 카프카 입장에선 쉽게 고려됩니다. 하지만 S3 싱크 커넥터를 적용하는 과정에서 Out Of Memory Error가 종종 발생하는 것을 볼 수 있습니다. 이 글은 S3 싱크 커넥터가 메시지를 카프카로부터 가져와서 S3OutputStream을 통해 저장하기까지의 과정을 살펴보면서 S3 싱크 커넥터가 왜 OOM에 취약한 이유를 살펴봅니..
-
[기술부채] trust relationship? assume role?개발자 라이프 2021. 3. 7. 23:49
기술 부채 개요 부채 발생 상황 팀원들이 배포 관련된 작업 중 trust relationship와 assume role라는 단어를 언급하며 이야기하는데, 이해할 수 없었다. 사내 메신저에서도 같은 단어들을 몇 번 본 것 같았다. AWS 환경에서의 권한과 관련된 경험이 없었다. 부채 해소 방법 AWS 환경에서 권한과 관련된 개념을 정리한다. trust relationship 과 assume role 이 어떤 단어인지 알아보고 정리한다. 실제로 위 단어들이 어떻게 사용될지 그림으로 그린다. 부채 해소 AWS 환경에서 권한과 관련된 개념을 정리한다. Role Role은 AWS IAM 의 자격 증명으로써 리소스에 대한 접근할 수 있는 특정한 권한 정책을 갖습니다. 이러한 점에서 Role은 User와 유사합니다...
-
CQRS 패턴 알아보기개발자 라이프 2021. 2. 21. 23:50
들어가며 Event Driven Architecture에 대한 경험이 있으시거나, 혹은 그것에 관심이 있으신 분이라면 종종 CQRS라는 단어를 듣게 됩니다. 저 또한 종종 들었습니다. 하지만 정확하게 CQRS가 어떤 것인지 잘 알지 못했고, 이 글을 통해 정리합니다. 혹시 독자분들 중 글을 읽는 중에 "어? 좀 이상한데?"하는 부분이 있다면 언제든지 댓글 부탁드립니다. 저도 공부하면서 정리한 내용이라 부족한 부분이 있을 수 있습니다! :) CQRS CQRS는 Command Query Responsibility Segregation 의 약자로 단어 그대로 해석하면 "명령 조회 책임 분리"입니다. 이는 애플리케이션들을 구성하는 아키텍처에 대한 하나의 패턴입니다. 즉, 애플리케이션을 구현함에 있어 명령과 조회..
-
[Kafka 개발] kafka-connect-datagen 커넥터로 테스트 데이터 생성하기개발자 라이프/카프카 2021. 1. 24. 23:09
0. 들어가며 우리는 카프카 토픽을 컨슘(구독)하여 다양한 처리를 할 수 있습니다. 하지만 초기 개발 과정에는 토픽에 메시지가 적재되어 있지 않을 수도 있고, 또한 일시적으로 적재되어있다고 하더라도 메시지가 retention 기간에 따라 삭제/압축되기 때문에 지속적인 개발/테스트가 어려울 수 있습니다. 이번 글은 이러한 케이스에서 유용하게 사용할 수 있는 kafka-connect-dategen 커넥터에 대해 소개합니다. 1. kafka-connect-datagen 커넥터 kafka-connect-datagen(이하 datagen) 커넥터는 사용자가 설정한 명세에 따라 데이터를 생성하여 타겟 토픽에 데이터를 밀어 넣어 주는 커넥터입니다. 그렇기 때문에 토픽을 구독하여 처리하는 컨슈머, 스트림즈, 싱크 커넥..
-
[Kafka 운영] Request log 살펴보기개발자 라이프/카프카 2020. 11. 29. 23:11
들어가며 카프카는 아키텍처 중앙에 위치하여 다양한 클라이언트들의 요청을 받습니다. 그렇기 때문에 간혹 클라이언트에서 잘못된 요청을 보내는 경우가 발생할 수 있습니다. 예를 들면, 스키마가 정의되지 않은 토픽에 대해 프로듀서가 기존과 다른 임의의 메시지 포맷으로 보내게 된다면 컨슈머는 이 메시지를 처리하지 못하게 됩니다. 이와 같이 잘못된 요청이 발생하게 되면 어떤 클라이언트에서 보낸 요청인지 확인할 필요가 있습니다. 그리고 다행히도 카프카는 브로커가 받는 요청에 대해 별도의 로그 파일로 저장할 수 있습니다. 이번 글은 카프카 브로커가 받은 요청에 대해 저장하는 로그인 request log에 대해 살펴봅니다. 이 글 내용은 카프카 한국 사용자 모임에서 진행한 제4회 버츄얼 밋업 내용에서 영감을 받아 작성했..