Kafka는 사실 한 번도 써본 적 없고 이름 정도만 알고 있고 정확히 어떤 용도로 써야 하는지도 잘 몰랐다. 그런데도 현재 회사에서 Kafka를 꽤 쓰고 있는데 인프라 조직에 있다 보니 운영에 대한 책임은 있는데 팀 내에 Kafka 전문가는 없었던 상태라 TF를 조직해서 운영에 대한 노하우를 몇 달 전부터 쌓기 시작하면서 적극적으로 운영에 대응하고 있었다. 그래서 Kafka도 좀 공부해야겠다고 생각하다가 이전에 스터디 하던 사람들과 Kafka 스터디로 얘기가 되어서 그룹 스터디를 시작하면서 이 책을 선택했다. 스터디를 9월 20일에 시작해서 12월 20일에 끝났으니 3달 동안 진행이 되었다.
Kafka처럼 테스트하려면 클러스터 구성의 인프라 설정이 필요하기 때문에 설명하는 입장에서 쉽지 않겠다는 생각은 들었다. 구성에 따라 동작이 다를 수도 있고 너무 테스트용으로 만들면 도움이 안 될 테고프로덕션 급으로 만들려면 설정이 너무 복잡하기 때문이다. 그래서 2장에서 Kafka 환경을 구성할 때 예제 코드로 제공하는 Ansible을 이용해서 EC2에 Zookeeper와 Kafka를 구성하도록 안내하고 있다. 나는 EC2로 테스트했는데 당연히 서버의 보안 구성이나 네트워크 구성 때문에 동작은 약간씩 다를 수 있다.
그래서 Kafka 환경을 구성하면서 AWS의 매니지드 Kafka인 MSK나 Confluent Cloud로 쉽게 구성하고픈 유혹을 느낄 수 있다. 책의 부록에도 MSK와 Confluent Cloud로 Kafka를 구성하는 설명이 나온다. 하지만 좀 힘들더라도 2장에서 안내하는 Ansible을 이용한 Kafka 환경을 구성하기를 강력하게 권한다. 2장 이후 Kafka를 설명하면서 계속 이 환경을 이용하거나 없앴다가 다시 만들기 때문에 실제로 테스트하면서 따라 하려면 2장의 환경 구성이 필수라고 생각한다. 또한 매니지드 Kafka는 대부분 SSH로 브로커에 접속할 수가 없는데 책에서는 동작을 설명하기 위해서 브로커에 들어가서 로그나 관련 파일을 열어보는 경우가 많으므로 제대로 이해하면서 따라 해 보려면 책에서 설명한 환경 구성을 따라 하는 게 좋다고 생각한다.
스터디에서는 매주 진행하는 사람이 달랐기 때문에 모두 똑같은 환경을 구성하고 있지 않아서 뒤로 갈수록 실제 예제를 그대로 따라 하기가 쉽지 않았다.
다른 Kafka 책을 보지 않아서 정확하게 판단하기는 어렵지만 이 책은 Kafka를 사용자로서 사용하기 위한 설명보다는 운영을 위해서 Kafka가 어떻게 동작하는지를 설명하는데 더 초점이 있다. 그래서 프로듀서가 토픽에 데이터를 쌓을 때 어떻게 기록해두는지 브로커가 죽었을 때는 어떻게 복구되는지 컨슈머가 죽었을 때는 어떻게 관리하는 지 등이 나와 있다. 그래서 Kafka를 애플리케이션에서 사용해 본 적이 없어서 프로듀서와 컨슈머를 어떤 기준으로 사용하는지 어떤 목적으로 Kafka를 사용하는지 다 이해를 못 하고 있어서 운영 관점에서 볼 때도 좀 어려웠다. 사용자 입장에서 Kafka를 공부하고 운영에 관해 봐야 했나 하는 생각도 들었다.
책 쓰는 입장에서 보면 이해가 되면서도 공부하는 입장에서는 책이 묘하고 엄청 친절하면서도 궁금한 부분에서는 불친절하게 느껴졌다. 책의 제한된 분량 안에서 설명하다 보니 모든 걸 다 설명할 수는 없겠지만 내부 동작의 설명 과정을 보고 있으면 궁금한 부분이 잘 해소 안 되는 부분이 종종 있었다. 물론 혼자 책을 읽었다면 그냥 넘어갔을 수도 있지만 그룹 스터디로 하다 보니 누가 의문을 가지면 해당 부분이 실제로 어떻게 동작하는지 다양한 추측이 나오긴 하지만 정확하게 이해하기는 어려웠다. 예를 들면 A라는 동작이 나오면 여기서 이 데이터는 Zookeeper에 어떻게 저장되는지가 궁금했지만 정확한 내용은 알기가 어려웠다. 물론 이런 부분은 추가로 공부해야 하는데 하지 못한 잘못이긴 하지만...
엄청 친절하다고 하는 건 설정 파일을 수정하는 것도 vi
로 열어서 어디를 수정해야 하는지 하나하나 다 설명하고 있다. 그래서 서버에 대한 경험이 많지 않은 사람도 책이 설명하는 그대로 따라 하면 그대로 해볼 수 있겠다는 생각은 들지만(물론 실제로 하면 많은 어려움을 겪겠지만...) 서버 조작을 어느 정도는 할 수 있는 사람 입장에서는 너무 친절하다고 느껴지고 궁금한 부분은 다 해소가 안 되는 답답함은 약간 있었다. 물론 Kafka를 운영하려면 Kafka뿐만 아니라 다양한 경험이 필요하기 때문에 책을 읽는 사람이 어디까지 알아야 하는지 가정하기가 어렵기 때문에 최대한 친절할 수 밖에 없다는 생각은 들지만, 운영이라는 타게팅을 생각하면 좀 더 깊은 내용까지 들어가도 좋지 않았을까 하는 생각도 들었다.
현실에서 Kafka를 운영하면 매니지드 Kafka를 운영할 가능성이 아무래도 높기 때문에 어떤 면에서 이 책에서 설명하는 부분을 실제로 다 사용할 가능성은 높지 않다고 생각한다. 그런데도 매니지드 Kafka도 내부 동작은 동일하기 때문에 트러블슈팅을 하려면 이 책에서 설명하는 내용이 도움이 된다고 생각한다. 프로듀서와 컨슈머의 내부 동작도 잘 나와 있고 카프카의 보안이나 스키마 레지스트리를 포함해서 Kafka에서 알아야 할 중요한 키워드는 대부분 설명해 주고 있기 때문에 문제가 생겼을 때 어떤 부분을 봐야 할지 혹은 어떤 키워드로 문제에 접근해야 할지는 알 수 있게 되었다고 생각한다.
뭔가 도움이 되어보려고 Kafka TF에 들어가 있으면서도 Kafka에 대해서는 아무것도 몰랐는데 이 책을 통해서 어느 정도 키워드와 동작은 알게 되었다. 책에도 감사의 말에 나오던데 개인적으로 알고 지내는 이동진 님이 종종 나한테 찾아와서 Kafka 발표의 프리뷰를 연습하시곤 했는데 이젠 각 키워드는 알아들을 수 있게 된 거 같다.(실제로는 또 들어봐야 알겠지만, 스터디 하면서 그때 한 발표가 이거와 관련된 거였구나 하는 생각을 많이 했다.)
Comments