[Kafka] 가상머신(VM) 카프카 & Windows 프로듀서 통신

VirtualBox에 띄운 카프카랑 호스트 OS 프로듀서랑 통신하는 테스트를 해보고 싶었다. 위 그림이랑 비슷한 형태이다.
방법
Kafka VM (Linux)
1) 쉘에서 hostname 입력해서 hostname을 알아낸다.
$ hostname
user-VirtualBox
2) 카프카 브로커 설정(server.properties)를 편집한다. kafka.properties라는 이름으로 존재할 수도 있는 것 같다.
listeners=PLAINTEXT://0.0.0.0:9092
advertised.listeners=PLAINTEXT://user-VirtualBox:9092
listeners는 주키퍼에 등록된 카프카 브로커들끼리 통신할 때 사용되는 클러스터 내부 상 IP이다.
이때 클러스터가 클라우드에 올라가서 돌아가는 상황처럼 내부 IP와 외부 IP가 다르다면 클라이언트가 접근할 외부 IP를 advertised.listeners에 지정해준다. 내부 IP와 외부 IP가 다른 상황을 예로 아래처럼 값을 설정해줄 수 있을 거다.
listeners=PLAINTEXT://10.168.4.9:9092 &
advertised.listeners = PLAINTEXT://35.196.212.10:3101
3) 카프카 재구동
Windows OS (host)
1) Windows OS hosts file에서 hostname이 127.0.0.1을 가리키도록 편집한다.
127.0.0.1 user-VirtualBox
2) 호스트 9092 포트를 게스트 9092 포트로 포워딩 해야 한다. VM VirtualBox 설정에서 네트워크로 들어가서 아래처럼 포트 포워딩 규칙을 추가해준다.
3) cmd에서 아래 명령어를 입력해서 통신이 가능한지 확인한다.

telnet user-VirtualBox 9092
나는 파이썬으로 짠 프로듀서에서 브로커로 메세지를 보냈는데 잘 도착한다.
컨슈머는 아래 명령어로 더미 컨슈머 띄워서 도착하는 메세지를 출력해서 확인했다.
$ sh ./bin/kafka-console-consumer.sh --topic TOPICNAME --from-beginning --bootstrap-server localhost:9092
가상머신에서 kafka를 돌리는데 reboot 할 때마다 생성해둔 토픽이 사라지는 문제점이 있었다. kafka-logs가 /tmp 디렉토리에 만들어져 있어서 리부트 할 때마다 제거된다고 한다. config/server.properties로 들어가서 log.dirs=/tmp/kafka-logs를 바꿔주면 해결된다.
[참조]
https://i-sammy.medium.com/what-is-advertised-listeners-in-kafka-9e2a216e070
https://boristyukin.com/connecting-to-kafka-on-virtualbox-from-windows/
https://stackoverflow.com/questions/32437415/kafka-loses-all-topics-on-reboot
[기타]
https://boying-blog.tistory.com/87
https://blog.naver.com/jesuswalks/223127269567