Docker에 Kafka 설치
ZooKeeper를 사용 안하고 KRaft를 사용하는 이유
- 주요 아키텍처 점검을 통해 배포가 단순화되고 확장성이 향상되었으며 성능이 향상
- KRaft(Kafka Raft metadata) 모드에서 AMQ Streams를 실행하면 Kafka 클러스터는 ZooKeeper 대신 컨트롤러의 내부 쿼럼으로 관리됩니다.
최신버전의 Kafka 기준으로 KRaft를 사용하면은 ZooKeeper를 설치를 안해도 된다.
Apache Kafka KRaft 모드 구성
KRaft 모드는 다음 값을 제공하여 활성화할 수 있습니다.
- `KAFKA_CFG_PROCESS_ROLES`: Kafka KRaft 역할의 쉼표로 구분된 목록입니다. 허용되는 값: `controller,broker`, `controller`, `broker`.
- `KAFKA_CFG_NODE_ID`: Kafka 노드의 고유 ID입니다.
- `KAFKA_CFG_LISTENERS`: Kafka 청취자의 목록입니다. 노드가 역할로 설정된 경우 `controller`리스너가 `CONTROLLER`포함되어야 합니다.
- `KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP`: 각 수신기를 Apache Kafka 보안 프로토콜로 매핑합니다. 노드에 역할이 설정된 경우 에 `controller`대한 보안 프로토콜을 할당하려면 이 설정이 필요합니다 `CONTROLLER LISTENER`. 예: `PLAINTEXT:PLAINTEXT,CONTROLLER:PLAINTEXT`.
KRaft를 사용하기 위해 사용 할 docker-compose를 찾음
# Copyright VMware, Inc.
# SPDX-License-Identifier: APACHE-2.0
version: "2"
services:
kafka:
image: docker.io/bitnami/kafka:3.6
ports:
- "9092:9092"
volumes:
- "kafka_data:/bitnami"
environment:
# KRaft settings
- KAFKA_CFG_NODE_ID=0
- KAFKA_CFG_PROCESS_ROLES=controller,broker
- KAFKA_CFG_CONTROLLER_QUORUM_VOTERS=0@kafka:9093
# Listeners
- KAFKA_CFG_LISTENERS=PLAINTEXT://:9092,CONTROLLER://:9093
- KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092
- KAFKA_CFG_LISTENER_SECURITY_PROTOCOL_MAP=CONTROLLER:PLAINTEXT,PLAINTEXT:PLAINTEXT
- KAFKA_CFG_CONTROLLER_LISTENER_NAMES=CONTROLLER
- KAFKA_CFG_INTER_BROKER_LISTENER_NAME=PLAINTEXT
volumes:
kafka_data:
driver: local
터미널에서 compose 실행
- -f는 파일을 지정, 파일명을 docker-compose.yml로 하면 up만 사용해도 된다.
- -d는 백그라운드에서 실행, up뒤에 작성을 한다.
docker-compose **-f** kafka-docker-compose.yml up **-d**
토픽 생성
/opt/bitnami/kafka/bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
토픽에 이벤트 작성
/opt/bitnami/kafka/bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
토픽 읽기
/opt/bitnami/kafka/bin/kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
카프카 통신 오류
TimeoutException: Timed out waiting for a node assignment. Call: listNodesorg.apache.kafka.common.errors.TimeoutException: Timed out waiting for a node assignment. Call: listNodes
밑의 옵션에서 로컬호스트를 입력하니 연결이 됐다.
KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://:9092 # before
KAFKA_CFG_ADVERTISED_LISTENERS=PLAINTEXT://localhost:9092 # after
해당 오류가 로컬인데 도커에서 아웃바운드가 안돼서 생기는 문제인지 엉뚱한 방향으로 생각을 많이 했다.
단순하게 카프카에서 docker-compose의 설정이 잘못돼서 연결이 안됐던 문제
밑의 제시하는 방법은 EXTERNAL로 외부 접근, PLANTEXT가 내부 접근으로 된다.
참고 : 외부 컴퓨터에서 연결하려면
localhost
위를 호스트의 외부 IP/호스트 이름으로 변경하고 포함하여EXTERNAL://0.0.0.0:9093
원격KAFKA_CFG_LISTENERS
연결을 허용하세요.
참고 사이트
https://romanglushach.medium.com/the-evolution-of-kafka-architecture-from-zookeeper-to-kraft-f42d511ba242
https://access.redhat.com/documentation/ko-kr/red_hat_amq_streams/2.5/html/using_amq_streams_on_rhel/assembly-kraft-mode-str
https://github.com/bitnami/containers/tree/main/bitnami/kafka#apache-kafka-kraft-mode-configuration
https://github.com/bitnami/containers/blob/main/bitnami/kafka/docker-compose.yml
https://www.daleseo.com/docker-compose/
https://kafka.apache.org/quickstart
Pinpoint 설치, 샘플 확인
Docker Compose, Docker가 필요
밑의 명령어로 설치
git clone https://github.com/pinpoint-apm/pinpoint-docker.git
cd pinpoint-docker
docker-compose pull
docker-compose up -d
API를 전송해서 테스트 가능
http://localhost:8085/
quickapp으로 생성이 되어있음
http://localhost:8080/
REAL TIME으로 하면은 USER가 보낸 Request 개수가 실시간으로 바뀌면서 모니터링이 된다.
참고 사이트
https://peterica.tistory.com/398
https://hcnmy.tistory.com/5
https://guide-fin.ncloud-docs.com/docs/pinpoint-pinpoint-1-2#pinpoint-agent-설치-및-적용
'항해99' 카테고리의 다른 글
항해99 실전 프로젝트 (12일차) (0) | 2024.02.08 |
---|---|
항해99 실전 프로젝트 (11일차) (0) | 2024.02.07 |
항해99 실전 프로젝트 (9일차) (0) | 2024.02.05 |
항해99 실전 프로젝트 (8일차) (0) | 2024.02.03 |
항해99 기술면접 (1) | 2024.02.03 |