로컬 환경에서 개발을 하다보면 항상 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
'빅데이터 > Kafka' 카테고리의 다른 글
카프카에서 데이터 삭제는 어떻게 이루어 지는가> (0) | 2025.02.13 |
---|---|
kafka 4.0부터는 스칼라 2.12가 더 이상 사용되지 않습니다. (0) | 2025.02.13 |
standalone 카프카(kraft모드 in local) 실행 스크립트(1줄) (0) | 2025.02.11 |
KIP-932: Queues for Kafka 조사 (0) | 2025.01.12 |
standalone 카프카(kraft모드 in local) 실행을 위한 준비와 실행 (0) | 2024.06.23 |
카프카 컨슈머의 auto.offset.reset 옵션을 반드시 earliest로 변경해야 하는 이유 (1) | 2024.02.05 |