본문 바로가기

빅데이터/Kafka

[local macOS 환경] apache kafka(3.5.0기준) + redpanda/console 로 편하게 테스트 하기

로컬 환경에서 개발을 하다보면 항상 shell script로 사용하지만 좀 불편할때가 많습니다. redpanda에서는 console을 통해 apache kafka와 연동하는 웹 콘솔을 오픈소스로 제공하고 있습니다.

 

 https://github.com/redpanda-data/console

 

GitHub - redpanda-data/console: Redpanda Console is a developer-friendly UI for managing your Kafka/Redpanda workloads. Console

Redpanda Console is a developer-friendly UI for managing your Kafka/Redpanda workloads. Console gives you a simple, interactive approach for gaining visibility into your topics, masking data, manag...

github.com

 

이를 사용하여 로컬에서 테스트하기 용이하도록 설정하는 방법을 알아보겠습니다.

 

1) Apache kafka binary setting & start

config/kraft/server.properties

# 소켓 서버가 수신할 주소와 포트를 설정합니다.
# 여기서 Kafka 브로커는 세 가지 리스너(INTERNAL, EXTERNAL, CONTROLLER)를 통해 외부와 내부의 연결 요청을 받게 됩니다.
# - INTERNAL: 내부 통신용으로, 모든 네트워크 인터페이스(0.0.0.0)에서 포트 9092로 수신합니다.
# - EXTERNAL: 외부 접속용으로, 모든 네트워크 인터페이스(0.0.0.0)에서 포트 9091로 수신합니다.
# - CONTROLLER: Kafka 클러스터의 컨트롤러 전용 리스너로, 주로 KRaft 모드에서 사용하며 포트 9093으로 수신합니다.
listeners=INTERNAL://0.0.0.0:9092,EXTERNAL://0.0.0.0:9091,CONTROLLER://:9093

# 브로커 간 통신에 사용할 리스너의 이름을 지정합니다.
# 이 설정은 Kafka 브로커들끼리 데이터 복제나 메타데이터 교환 등 내부 통신에 사용됩니다.
# 위의 예제에서는 INTERNAL 리스너를 사용하도록 지정되어 있습니다.
inter.broker.listener.name=INTERNAL

# 클라이언트에게 브로커의 접속 정보를 알릴 때 사용할 리스너 이름, 호스트명 및 포트를 지정합니다.
# 만약 이 설정을 지정하지 않으면, 기본적으로 listeners에 설정된 값이 사용됩니다.
# 예제에서는 다음과 같이 설정되어 있습니다:
# - INTERNAL 리스너는 127.0.0.1:9092로 광고되어 로컬 클라이언트(예: 로컬 셸 스크립트)에서 사용됩니다.
# - EXTERNAL 리스너는 host.docker.internal:9091로 광고되어 Docker 등 외부 환경에서 사용됩니다.
advertised.listeners=INTERNAL://127.0.0.1:9092,EXTERNAL://host.docker.internal:9091

# 리스너 이름과 보안 프로토콜 간의 매핑을 설정합니다.
# 각 리스너는 지정된 보안 프로토콜(예: PLAINTEXT, SSL 등)을 사용하게 되며,
# 이 설정을 통해 리스너별로 사용할 프로토콜을 명시할 수 있습니다.
# 위 예제에서는 다음과 같이 설정되어 있습니다:
# - CONTROLLER, INTERNAL, EXTERNAL 리스너는 모두 PLAINTEXT(암호화 없이 평문 통신)로 사용됩니다.
# - 그 외 SSL, SASL_PLAINTEXT, SASL_SSL 등 다른 프로토콜에 대한 매핑도 포함되어 있습니다.
listener.security.protocol.map=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT,SSL:SSL,SASL_PLAINTEXT:SASL_PLAINTEXT,SASL_SSL:SASL_SSL,INTERNAL:PLAINTEXT,EXTERNAL:PLAINTEXT

 

기본설정과 다르게 추가로 INTERNAL, EXTERNAL 이라는 리스너를 별도로 선언했고, 각각 PLAINTEXT의 특징을 가진다. 그리고 advertised.listeners를 통해 외부 환경에서 접근을 하게 되면 통신이 가능하도록 설정하였다.

 

이후 다음 스크립트를 통해 시작한다.

$ bin/kafka-server-start.sh config/kraft/server.properties

 

접근가능한 포트를 살펴보면 다음과 같다.

$ sudo lsof -iTCP -sTCP:LISTEN -n -P | grep java

java       1935 cory  114u  IPv6 0xb5d56fea76ceb187      0t0  TCP *:50654 (LISTEN)
java       1935 cory  138u  IPv6 0x120b860a979e4dc8      0t0  TCP *:9093 (LISTEN)
java       1935 cory  179u  IPv6 0x694fc65154f5a4d6      0t0  TCP *:9091 (LISTEN)
java       1935 cory  180u  IPv6 0xbaf49a6f1b8ea763      0t0  TCP *:9092 (LISTEN)

 

쉘스크립트로 접근 가능한지 확인 한다.

$ bin/kafka-topics.sh --bootstrap-server localhost:9092 --list

2) Redpanda console start

$ docker run -p 8080:8080 -e KAFKA_BROKERS=host.docker.internal:9091 docker.redpanda.com/redpandadata/console:latest

 

3) Result

 

반응형