Kafka는 메세지 브로커이다. 대형 프로젝트의 구조가 Monolithic에서 Microservice으로 바뀌면서 서비스들의 상호작용이 점점 복잡해지고 있다. 그러한 복잡성을 해결하기 위해 메세지 브로커를 사용한다.

Kafka-tutorial code을 Github에서 받은 이후, 실습을 진행하면 된다.
위 실습을 만들면서 헷갈렸던 점들을 적어보려고 한다.
docker-compose.yml에 수많은 설정들이 존재한다. 그중에서 2개의 설정이 헷갈렸다.
KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093,EXTERNAL://:9094
KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://kafka:9092,EXTERNAL://localhost:39094
KAFKA_CFG_LISTENERS는 컨테이너의 몇번 포트에서 서비스를 실행시킬지 설정하는 부분이다. 이때, Kafka controller는 9093 포트에서 실행시키고, client와 연결할 endpoint는 9092, 9094 포트에 있다.
Kafka-client들이 Kafka에 연결하기 위해서는 우선 대표 서버에 메타데이터를 요청한다. Kafka cluster을 사용하면 topic에 따라 서버 주소가 달라질 수 있기 때문이다. 이 메타데이터에서 사용될 Kafka 서버주소가 KAFKA_CFG_ADVERTISED_LISTENERS가 되는것이다.

우리는 위 그림과 같이 아키텍쳐를 설정했다. producer와 consumer가 모두 host machine 상에 존재하기 때문에 Kafka-client들은 모두 localhost:39094 주소를 이용해 Kafka-server에 접근할 수 있다. 따라서 External에 대한 advertising listener는 localhost:39094로 설정하면 되는 것이다.