윈도우(Windows)에서 카프카(Kafka) 클러스터 간단 테스트하기 (fault-tolerant)

지난 번에 구성한 카프카 클러스터(cluster)가 잘 동작하고 있는 지 테스트 하겠습니다. Zookeeper 1, Kafka broker 3이 동작 중이여야 합니다.  

  • PowerShell을 열어서 새로운 토픽을 생성합니다. .\bin\windows\kafka-topics.bat --create --bootstrap-server localhost:9092 --replication-factor 3 --topic test-cluster

* 카프카 브로커 3대가 같은 메세지를 복제해서 가지고 있게 됩니다. (replication-factor 옵션)
  • 토픽이 잘 만들어졌는지 확인합니다. .\bin\windows\kafka-topics.bat --list --bootstrap-server localhost:9092
  • 토픽에 대해 자세한 정보를 보여주는 describe 옵션을 사용해보겠습니다.   .\bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9092
  • 예전에 생성한 test 토픽과 오늘 생성한 test-cluster 토픽을 비교해보면 replication-factor차이를 바로 아실 수 있습니다. 
test
test-cluster
* test 토픽은 브로커 1대, test-cluster는 브로커 3대로 구성되어있습니다. 브로커 3대의 broker.id는 0, 1, 2로 설정했었습니다. 그림에서 보이는 0, 1, 2가 바로 브로커 id를 나타냅니다. 심화 학습을 원하시는 분은 Isr도 공부해보시고 leader와 follower 개념도 공부해보시길 바랍니다.
  • test-cluster에 메세지를 넣겠습니다. .\bin\windows\kafka-console-producer.bat --broker-list localhost:9092 --topic test-cluster
  • Ctrl +C로 나온 뒤 메세지를 받아보겠습니다. .\bin\windows\kafka-console-consumer.bat --bootstrap-server localhost:9092 --topic test-cluster --from-beginning
* 혹시 이 부분이 헷갈리시면 예전 포스트들을 참고해 주세요.
  • 0번 브로커를 죽여보겠습니다. server.properties로 실행시킨 창을 찾아서 Ctrl+ C로 종료시킵니다.  그럼 1번, 2번 브로커만 살아있게 됩니다.
  • 다시 토픽을 확인해보겠습니다.  .\bin\windows\kafka-topics.bat --describe --bootstrap-server localhost:9093 --topic test-cluster
* 9092포트를 사용하는 0번 브로커가 다운돼서 9093번이나 9094번 포트로 연결해야합니다. 그림을 보시면 리더가 2번 브로커로 바뀌었고 Isr 리스트에 있던 0번 서버가 사라졌습니다. 
  • 0번 서버를 재기동하고 다시 토픽을 확인하면 0번이 다시 리더는 못되었지만 Isr 리스트에 추가 된 것을 볼 수 있습니다. 리더였던 0번 서버가 죽어도 1번,2번 서버가 데이터를 가지고 있기 때문에 데이터는 사라지지 않습니다. 그리고 0번 서버가 죽었을 때 클러스터에 데이터를 넣어도 0번 서버가 살아나면 그 데이터를 복제해서 가지고 있습니다. 
리더와 ISR 리스트
  • 파워쉘 2개를 나란히 띄우고 producer와 consumer 스크립트를 실행 한 뒤 0번 9092서버에서 실시간 메세지를 보내고 1번 9093서버에서 실시간 받는 것을 확인하고 1번 9093서버에서 보낸 것을 2번 9094서버에서 받게 하는 등의 테스트도 해볼 수 있습니다.
카프카 클러스터 테스트

* 원래는 다른 것을 보여 드리려고 했는데 윈도우라서 그런건지 싱글머신에 3개의 프로세스를 띄어서 그런건지 예전에 리눅스에서 잘 되던게 이 환경에서는 안되네요. 역시 결론은 카프카는 윈도우에서 돌리지 말자입니다ㅠ  향후 리눅스, Docker, Kubernetes에서 카프카를 돌리는 것을 포스팅 할 것입니다. 

Comments