분류 전체보기
-
글또 5기를 마무리하며김김 라이프 2021. 5. 2. 20:29
이직 시기와 함께 시작했던 글또 5기가 벌써 마지막 글 제출을 앞두고 있다. 그 동안 나는 어땠는가 돌아본다. 처음 목표를 달성했는가? 아쉽게도 달성하지 못했다. 패쓰권을 쓰지 않는 것을 목표로 했었지만, 2회차 만에 패쓰권을 썼다. 새로운 직장에서의 적응에 바빴기 때문이다. 게다가 글을 쓰는 것이 쉽지 않아졌다. 이전에는 단순히 기술 문서나 다른 글을 잘 엮어 내 지식인 마냥 정리하는게 주였다. 그래서 글을 쓰기 쉬웠다. 하지만 실제로 내가 경험한 것들은 글자들 아래에서 부비트랩처럼 숨어있었다. 그렇기에 몇번의 폭발을 맞아본 나로썬, 내가 보고 들은 지식들을 어느정도까지 신뢰할 수 있을지 혼란스러웠다. 그래서 글로 정리하기가 더 어려워졌다. 왜 글또 참여 안하세요? 라고 물었던 질문에 대준님이 "글에 ..
-
[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) 커넥터는 사용자가 설정한 명세에 따라 데이터를 생성하여 타겟 토픽에 데이터를 밀어 넣어 주는 커넥터입니다. 그렇기 때문에 토픽을 구독하여 처리하는 컨슈머, 스트림즈, 싱크 커넥..