Kafka, A message broker
최근 웹을 돌아다니다 재밌는 글을 하나 발견했다.
“Unix 철학을 분산 데이터 환경에 적용해보면 어떤 형태로 나타날까?” 라는 주제의 글이었다.
이 글은 Kafka와 Samza라는 오픈소스가 Unix 철학의 아름다움을 그대로 계승한듯한 느낌을 준다. 미니멀리즘을 추구하는 사람이라면 글을 읽으면서 Kafka에 대해 관심이 생기지 않는게 이상할 정도로 Kafka를 굉장히 매력적으로 설명하고 있다. (이 매력은 Unix 철학으로부터 오는 거지만 말이다.)
Unix 철학
글에서 소개한 Unix 철학을 정리해보자.
1. 모든 프로그램들은 하나의 일을 제대로 하도록 만들어라
2. 모든 프로그램의 출력은 아직 알려지지 않은 다른 프로그램의 입력이 될 수 있다고 가정하라
— The Unix philosophy (McIlroy, Pinson & Tague, 1978)
이 짦은 문장에서 우리가 느낄 수 있는 특징은 1인분 하기와 표준화된 입출력 지키기이다.
이 두가지 철학을 지킴으로서 Unix는 다양한 프로그램들을 조합해서 여러가지 문제들을 효과적으로 해결할 수 있다.
글에서 소개한 예를 하나 살펴보자.
— 내 웹서비스의 가장 인기있는 5개의 페이지 보기
각 프로그램들(awk, sort, uniq, head)이 한 가지 일을 제대로 하고 있고, 표준화된 입출력을 통해 다른 프로그램과의 협력을 수행하고 있다.
멋지지 않은가?
Kafka와 Samza
하지만 요즘 웹 환경을 보면 Unix 철학을 적용하는 것이그렇게 쉬운 일만은 아니다. 서비스는 점점 더 거대해지고 그에 따라 많은 인력이 투입되면서, 각 팀들이 만드는 서비스들간의 커뮤니케이션 비용이 증가할 수 밖에 없게 되었다.
그럼에도 Unix 철학을 적용하고자 하는 시도가 있었으니 그게 바로 Kafka와 Samza이다.
그럼 두 오픈소스가 Unix 철학을 어떻게 적용했는지 살펴보자
Kafka는 Pipe와 같은 “Message Broker” 역할을 Samza는 “Stream Processing Jobs” 역학을 담당한다.
이를 통해 Unix 철학을 분산 데이터 환경에 적용할 수 있게 되었다.
실제 서비스에서는 다음과 같은 형태로 살펴볼 수 있다.
역시 멋지지 않은가?
낯선 프로젝트
그런데 개인적으로 분산 데이터 환경에 관심이 있었음에도 불구하고 Kafka와 Samza는 처음 들어봤다.
환경의 문제인지 큰 틀 안에서 작은 부분만을 보고 있었던 건지는 모르겠지만 흥미로운 오픈소스를 새롭게 알게되어 기분이 좋을 뿐이다.
원 글도 10일전에 게시되었는데, 글 저자도 유용함에도 불구하고 주목받지 못하는 Kafka와 Samza가 안타까워서 더 많은 개발자들이 알아주길 바라는 마음에서 글을 쓴 듯하다.
오픈 소스 프로젝트들 중에서 좋은데도 불구하고 빛을 보지 못하는 프로젝트들이 참 많다. 때로는 시장이 수용하기에는 너무 앞서간 기술이어서 빛을 못 본다. 아니면 대중적인 영역에서 사용되지 않아 관련 자료들과 관심이 절대적으로 부족한 상황에 놓여있기도 하다.
개발자 입장에서 시간이 지나면 하나 둘 조금씩 수면위로 올라와서, 좀 더 다양한 기술들로 서비스를 개발하는 즐거움 느낄 수 있지 않을까 기대해본다.