AWS MSK 를 테스트 중이다. MSK의 경우 가용 영역 갯수 만큼의 브로커를 만들어야 한다. 테스트하려는 도쿄리전은 3개의 가용 영역으로 구성돼 있으니 최소 사양으로 만들 경우 (kafka실행을 위한 최소 스펙)kafka.m5.large 인스턴스 3개를 실행해야 하므로 상당한 비용이 들어간다. AWS MSK에서 테스트할 kafka 버전은 2.x인데, 2.x는 사용해본적이 없어서 시간이 꽤나 걸릴 것 같은(비용도 그만큼 올라갈 것 같은) 불길한 예감이 들었다.
그래서 로컬 PC에서 테스트를 충분히 한 다음, AWS에서 테스트를 해보기로 했다. 예전 같으면 VirtualBox로 몇 개의 VM을 만들어서 테스트했겠지만 도커가 있는 요즘에는 그런 노가다를 뛸 필요가 없다. 도커를 이용해서 만들어보기로 했다.
kafka 클러스터를 실행하려면 zookeeper도 함께 실행해야 하므로 docker-compose설정이 있는지를 찾아봤다. kafka stack docker compose를 선택했다.
다양한 조합의 docker compose yml 파일들이 있는데, 나는 full-stack.yml 과 zk-multiple-kafka-multiple.yml 두개의 파일을 이용해서 full stack multiple zk & kafka 시스템으로 구성했다. multiple kafka & zookeeper에 kafka & zookeeper 관리 툴들 까지 함께 올려서 완전한 테스트,디버깅 환경을 만들었다고 보면 되겠다.
Kafka 환경 분석을 위해서 yml 파일의 내용을 출력해봤다.
docker-compose 명령으로 zookeeper & kafka 애플리케이션을 실행하고 정보를 살펴보자.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# docker-compose -f zk-multiple-kafka-multiple.yml up
$ docker-compose ps
/home/yundream/.local/lib/python2.7/site-packages/requests/__init__.py:91: RequestsDependencyWarning: urllib3 (1.24.1) or chardet (3.0.4) doesn't match a supported version!
첫 번째 컨슈머는 2,3 두 번째 컨슈머는 0,1 파티션을 분산해서 처리하는 걸 확인 할 수 있다. 이렇게 파티션을 구성하는 것으로 메시지를 분산처리 할 수 있다. 아래 테스트 동영상이다.
컨슈머가 추가될 때마다 파티션에 대한 리밸런싱이 이루어지는 걸 확인 할 수 있다. 현재 애플리케이션 실행 구조는 아래와 같이 묘사 할 수 있다.
Docker : VirtualBox를 이용했던 시절에 비해서 테스트가 너무 쉬워졌다. Kafka를 멀티노드로 테스트하려면 최소한 5개 정도의 인스턴스는 필요했는데, 지금은 docker-compose up 명령 하나로 kafka와 zookeeper 풀 셋을 전개 할 수 있다.
Zookeeper : 분산코디네이터. 브로커를 모니터링하고, 토픽, 파티션을 관리한다.
kafka : 스트림 프로세싱 영역에서는 산업표준이라고 할 수 있다. 프로젝트에 도입하고 싶은데, 아직은 마땅한 프로젝트가 없는게 아쉽다.
ksql : Kafka를 위한 streaming SQL 이라고 한다. 현재 ksql 서버도 설치되 있으니 ksql-cli 만 설치하면 테스트해 볼 수 있을 것 같다.
Contents
1. Docker 로 Kafka 테스트 환경 만들기
2. 테스트
2.1. kafkacat
2.2. kafka topic ui
2.3. ZooNavigator
3. kafka 애플리케이션 테스트
3.1. Go
4. 정리
1. Docker 로 Kafka 테스트 환경 만들기
2. 테스트
2.1. kafkacat
2.2. kafka topic ui
2.3. ZooNavigator
3. kafka 애플리케이션 테스트
3.1. Go
4. 정리
Recent Posts
Archive Posts
Tags