로컬에서 kafka 테스트하지 않고 public cloud에서 kafka를 구성하고 싶은 학습자용 글이다. 운영에서의 설정은 훨씬 복잡하고, 보안에도 신경을 많이 써야 하므로, kafka를 단순히 사용해보고 싶은 학습자만 참고하길 바란다.
클라우드는 ms azure를 활용하였고, 기본적인 kafka 설치는 완료되었다고 가정한다.
문제1. 방화벽 이슈
- 클라우드에 배포한 카프카에 로컬 클라이언트가 접근하려면 로컬 ip에 대한 9092 포트 접근을 허용해주어야 한다.
문제2. Rebootstrapping 반복 이슈
- 로컬 클라이언트에서 클라우드 public ip를 bootstrap server ip로 설정하고 테스트를 진행하면, kafka 설치 시 기본 설정을 건드리지 않았다는 가정 하에 다음과 같은 에러 메시지가 나온다.
Connection to node 1 (localhost/127.0.0.1:9092) could not be established.
Rebootstrapping with [/my_public_ip:9092]
- advertised.listeners 설정 변경
- 기존에 다음과 같이 설정되어 있을 것이다.
advertised.listeners=PLAINTEXT://localhost:9092,CONTROLLER://localhost:9093
- 이 설정은 클라이언트(producer/consumer)가 '메타데이터 요청 후 다시 사용할 때 접속할 주소'를 브로커가 알려주는 역할이다. 그런데 localhost로 되어 있으면 다시 접속할 때 클라우드 배포한 kafka가 아닌 로컬 클라이언트가 자기 자신에게 접속 요청하므로 당연히 안된다. 클라우드 public ip로 바꾸어야 한다.
advertised.listeners=PLAINTEXT://my_public_ip:9092,CONTROLLER://localhost:9093
문제3. 클라우드 서버 내 카프카 쉘 timeout 이슈
- 외부 로컬 클라이언트에서는 이제 접속 및 토픽 발행 등 테스트가 되는데, 내부 서버에서 쉘스크립트가 실행이 안되고 timeout 되는 등의 문제가 발생한다.
- 이는 외부 접근용 ip만 listener에 설정해주고, 내부 통신용은 접근을 따로 설정하지 않았기 때문이다.
- config/server.properties 설졍 변경
- controller port를 변경하면 다른 설정도 바꿔줘야 하므로 건드리지 않았고, 내부 통신용 internal port만 19092로 추가하였다.
- inter.broker.listener.name, listeners, advertised.listeners 설정 변경
- inter.broker.listener.name=PLAINTEXT_INTERNAL
- listeners=PLAINTEXT://:9092,PLAINTEXT_INTERNAL://:19092,CONTROLLER://localhost:9093
- advertised.listeners=PLAINTEXT://my_public_ip:9092,PLAINTEXT_INTERNAL://localhost:19092,CONTROLLER://localhost:9093
문제4. 프로토콜 없음 이슈
- 이제 서버를 시작하려고 하는데 서버가 시작이 안될 수 있다. logs/server.log 확인 시 다음과 같은 에러 메시지가 나면 새로운 listener(PLAINTEXT_INTERNAL)에 대한 프로토콜 매핑을 해주지 않아서다.
- 그런데 왜 PLAINTEXT냐? 하면 보안 설정이 적용되지 않은 기본 프로토콜이라 plaintext라 부른다.
- 종류: PLAINTEXT, SSL, SASL_PLAINTEXT, SASL_SSL
- 내부 클러스터용이면 인증+암호화 없이 plaintext로 통신하면 됨
- 인증 필요 시 SASL, 암호화 필요 시 SSL 조합
- config/server.properties 설정 변경listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL
'기타' 카테고리의 다른 글
| [개인기록] gps 기반 출퇴근 시스템 간편 일지(3) (1) | 2024.12.15 |
|---|---|
| [개인기록] gps 기반 출퇴근 시스템 간편 구현 일지(2) (1) | 2024.12.06 |
| [개인기록] gps 기반 출퇴근 시스템 간편 구현 일지(1) (2) | 2024.12.01 |