brunch

You can make anything
by writing

C.S.Lewis

by 고승범 Jul 11. 2019

카프카 설치 시 가장 중요한 설정 4가지

카프카 보안과 커버로스(Kerberos)를 이용해 구성하는 방법에 대해 다루는 글을 쓰려다가, 현재 제가 구성한 보안 클러스터 구성환경에 접속할 수도 없고 새로 구성하기도 어려운 상황이라, 평소 주위 분들에게 많은 질문을 받은 “빠르게 카프카 사용하기”라는 주제로 먼저 글을 써봐야겠다는 생각이 들었습니다. 이 내용은 생각보다는 매우 단순하고 쉽습니다. 이 글이 필요한 분들은 다음과 같습니다. 

카프카를 빨리 구성해야 한다. 

카프카를 빨리 업무에 사용해야 한다. 

카프카를 공부할 시간은 없다. 

카프카를 공부하고 싶지도 않다. 

그냥 안정적으로 빨리 잘 사용하고 싶다. 

이 대상에서 해당되지 않고 카프카를 이미 잘 쓰고 있는 분들은 굳이 이 글을 읽지 않으셔도 됩니다. :)


개요

빠르게 카프카를 구성해서 장애 없이 잘 사용하고 싶은데, 그렇다고 카프카를 모두 공부해서 사용할 시간은 부족합니다. 이런 경우 대부분이 일단 카프카에서 제공되는 기본값으로만 설정해서 사용하게 됩니다. 기본값만으로 설정해 쓰더라도 당장에는 아무런 문제가 일어나지 않습니다. 하지만 일정 기간 사용하다 보면 문제가 발생하기 시작합니다. 카프카에 한번 문제가 발생하게 되면, 잘 알지 못하는 상태로 구성했기 때문에 그 문제를 해결하기가 쉽지 않습니다.  

제가 공저한 책 <카프카, 데이터 플랫폼의 최강자> 6장 ‘카프카 운영 가이드’를 보시면 6.6 ‘카프카 운영에 대한 Q&A’라는 절에서 카프카의 문제가 발생했을 때의 대응 방안에 대해 FAQ 형식으로 설명한 내용을 찾을 수 있습니다. 카프카의 기본 옵션 중 일부만 미리 변경하여 사용한다면, 운영하시는 카프카를 보다 안정적이고 손쉽게 카프카를 사용할 수 있습니다. 자 그럼 지금부터 시작하겠습니다. 


기본 옵션 

log.retention.hours=72

retention 옵션은 예전부터 많이 강조했는데, 여전히 기본값으로 많이들 사용하십니다. 이렇게 설정하면 결국 디스크가 full 나서 대응이 되지 않는 경우가 많아, 이에 대한 문의도 많이 받았습니다. 만약 이 옵션만 조금 조정했다면 디스크가 full 되는 경우는 발생하지 않을 것 같습니다. 

해당 옵션은 카프카에서 토픽으로 저장되는 모든 메시지를 해당 시간만큼 보관한다는 의미입니다. 기본값이 168시간으로 7일을 의미합니다. 예제를 위해 계산하기 쉽게 메시지 하나가 1KB라고 가정하고 10,000/sec의 메시지가 카프카로 유입된다고 가정하겠습니다. 여기에 총 7일을 보관한다고 계산해보겠습니다. 

1KB(메시지 사이즈) * 10,000(초당 메시지 수) * 60(1분) * 60(1시간) * 24(1일) * 7(일)입니다. 이게 끝이 아닙니다. 만약 리플리카 3으로 되어 있다면 *3입니다. 게다가 이런 토픽이 하나가 아니라 10개만 되어도 *10입니다. 계산을 해보니 약 168TB라는 숫자가 나오게 됩니다. 어마어마하죠? 하지만 retetion 옵션을 7일이 아닌 3일로 변경했다면, 72TB의 공간만 있으면 됩니다. 필요로 하는 디스크 공간을 많이 줄일 수 있습니다. 대부분 많은 분들이 카프카에 있는 메시지를 실시간으로 가져가고 있기 때문에 7일이나 보관한다는 것이 반드시 필요한 옵션이라고는 생각하지 않습니다. 저는 개인적으로 주말 장애 등을 고려해 3일로 변경하는 것을 추천드리니, 카프카를 사용하시기 전에 해당 옵션에 대해 한번 고민해보시고, 적당하게 줄여서 사용하시기를 권장드립니다. 


delete.topic.enable=true

이 옵션은 카프카의 토픽 삭제와 관련된 옵션입니다. 만약 허용하지 않는다면 삭제를 하더라도 삭제되지 않고 삭제 표시만 남아 있게 됩니다. 만약 위의 경우처럼 디스크가 가득 차서 빠르게 토픽을 삭제한다는 생각이 들었는데, 해당 옵션이 적용되어있지 않다면 토픽을 삭제할 수 없는 상황이 발생합니다. 진퇴양난이죠. 그래서 해당 옵션을 확인해 토픽을 삭제할 수 있도록 변경하는 것을 추천드립니다. 내가 필요할 때 언제든 토픽을 삭제할 수 있도록 말입니다. 


allow.auto.create.topics=false

해당 옵션은 토픽 자동생성과 관련된 옵션입니다. 예를 들어 peter-topic 토픽으로 메시지를 보내려고 합니다. 토픽을 미리 만들어 두어야 하는데, 만약 관리자가 실수로 카프카에 미리 토픽을 생성하지 않은 상태라면 어떻게 될까요? 해당 옵션이 적용되어 있는 상태에서는 토픽이 미리 생성되어 있지 않더라도 프로듀서가 peter-topic으로 메시지를 보내면 자동으로 peter-topic을 생성하게 하는 설정입니다. 경우에 따라서는 매우 좋기도 하지만, 매우 좋지 않기도 합니다. 분명 필요하지 않은 토픽이라 생각해서 지웠는데, 자꾸 토픽이 생겨나기도 하고, 관리자가 알지 못하는 토픽이 자동으로 막 생겨나기도 합니다. 게다가 토픽의 replication factor 역시 기본값이 1입니다. 결국 이 옵션으로 생성되는 토픽들은 rf1로 설정되어 나중에 문제가 되는 경우를 몇 번 경험했습니다. 이 옵션은 false로 사용하시기를 권장합니다. 


log.dirs=/data

해당 옵션은 각 토픽들의 메시지들이 저장되는 실제 경로입니다. 최근 서버들을 보면 OS 영역은 용량이 적은 정도의 디스크로 사용하고 데이터 디렉터리를 별도의 용량이 큰 디스크를 사용하기도 합니다. 하지만 이 옵션을 통해 용량이 큰 별도의 디스크 경로로 설정해주지 않는다면, 기본값이 /tmp/kafka-logs으로 설정되어 있어 OS 영역의 디스크를 사용하게 되고, 결국 용량이 가득 차는 경우가 발생할 수 있습니다. 해당 옵션을 확인하여 미리 설정한다면 이러한 장애 상황을 미리 방지할 수 있을 것입니다.


마무리 

카프카를 급하게 도입해야 하고, 카프카를 단순 툴로서 신속하게 사용해야 하는 분들은 제가 지금까지 설명한 4가지의 옵션 정도만 변경해서 사용하시더라도 상당히 안정적으로 사용하실 수 있을 것 같습니다. 물론 고급 기능이나 안정적인 상태로 사용하려면 고려해야 할 상황이 많겠지만 이 글은 퀵패스를 원하는 분들을 위해 작성한 것이니 부족한 부분이 있더라도 이점 참고 부탁드립니다. 


“오늘의 교훈: 카프카를 오직 기본값만으로는 사용하지 마세요!!”

브런치는 최신 브라우저에 최적화 되어있습니다. IE chrome safari