Closed kmg28801 closed 1 year ago
https://haithai91.medium.com/zookeeper-kafka-with-docker-b1d4b33c0d5e
yaml 수정 필요
version: '3'
services:
zookeeper:
image: confluentinc/cp-zookeeper:latest
environment:
ZOOKEEPER_CLIENT_PORT: 2181
ZOOKEEPER_TICK_TIME: 2000
ports:
- 22181:2181
volumes:
- ./pub-technology/zookeeper/data:/data
- ./pub-technology/zookeeper/datalog:/datalog
kafka-server-1:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 29092:29092
environment:
KAFKA_BROKER_ID: 1
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-server-1:9092,PLAINTEXT_HOST://localhost:29092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- ./pub-technology/kafka1/data:/var/lib/kafka/data
kafka-server-2:
image: confluentinc/cp-kafka:latest
depends_on:
- zookeeper
ports:
- 39092:39092
environment:
KAFKA_BROKER_ID: 2
KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://kafka-server-2:9092,PLAINTEXT_HOST://localhost:39092
KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_HOST:PLAINTEXT
KAFKA_INTER_BROKER_LISTENER_NAME: PLAINTEXT
KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
volumes:
- ./pub-technology/kafka2/data:/var/lib/kafka/data
manager:
image: sheepkiller/kafka-manager
ports:
- 9000:9000
environment:
ZK_HOSTS: zookeeper:2181
depends_on:
- zookeeper
필수 카프카 명령어
kafka-topics.sh
토픽 설정 변경 (중요)
7일
kafka-configs.sh
명령어를 사용alter
옵션을 추가하고,entity-type
에topics
를 추가entity-name
에는 토픽의 이름add-config
옵션에 보관주기 1시간을 의미하는retention.ms=3600000
설정잘 적용되었는지 확인하는 명령어
root@18ed8f2bfb8d:/opt/kafka/bin# kafka-topics.sh --zookeeper zookeeper1:2181,zookeeper2:2182,zookeeper3:2183 --topic peter-topic --describe Topic: peter-topic TopicId: twtcaEsNRDCzaIkBvvRsXw PartitionCount: 1 ReplicationFactor: 1 Configs: retention.ms=3600000 Topic: peter-topic Partition: 0 Leader: 1 Replicas: 1 Isr: 1
토픽의 파티션 수 변경
kafka-topics.sh
, 파티션 수 변경을 위해서alter
옵션 추가파티션을 늘리면 메시지 순서에 영향을 끼칠 수 있다는 주의 문구가 나타나고, 파티션 수가 성공적으로 늘어났다는 내용이 위 명령어에 노출
파티션을 늘리면 메시지 순서에 영향을 끼칠 수 있다는 주의 문구에 대한 테스트
스프링 애플리케이션에서 컨슈밍한 결과
파티션 증설
토픽의 리플리케이션 팩터 변경
파티션 정보 확인
리플리케이션 팩터 변경을 위한 Json 생성
컨슈머 그룹 리스트 확인
컨슈머는 오프셋의 저장방식에 따라 오프셋을 주키퍼에 저장하는 방식인 올드 컨슈머, 오프셋을 카프카의 토픽으로 저장하는 뉴 컨슈머 두 가지가 존재
카프카 토픽 기반의 뉴 컨슈머 그룹을 확인하려면 추가 옵션으로
bootstrap-server
와 브로커 리스트 입력 필요컨슈머 그룹 리스트를 보기 위한 명령어는
kafka-consumer-groups.sh
, 추가 옵션으로bootstrap-server
옵션으로 브로커 리스트를 입력하고,list
옵션을 준 다음 실행저는 스프링 부트로 실습을 진행해서 교재와는 달리 컨슈머 그룹이 존재했습니다. (이미 스프링부트로 실습을 전부 진행했기에 파이썬은 무시하였습니다.)
컨슈머 상태와 오프셋 확인은
kafka-consumer-groups.sh
이며 추가 옵션으로는bootstrap-server
옵션으로 브로커 리스트를 입력하고,group
옵션으로 컨슈머 그룹 이름을 준 다음describe
명령어 실행GROUP TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET LAG CONSUMER-ID HOST CLIENT-ID peter-topic peter-topic 0 5 5 0 consumer-peter-topic-1-570089fb-7039-4363-8005-2b22a11f3ce6 /172.19.0.1 consumer-peter-topic-1 peter-topic peter-topic 1 5 5 0 consumer-peter-topic-1-570089fb-7039-4363-8005-2b22a11f3ce6 /172.19.0.1 consumer-peter-topic-1
토픽 생성
카프카 JMX 설정 방법
JMX는 자바로 만든 애플리케이션의 모ㅠ니터링 등을 위한 도구를 제공하는 자바 API로, MBean이라는 객체로 표현
JMX를 사용할 수 있도록 설정하는 방법은, 카프카 실행 파일에 JMX 관련 설정을 추가하는 방법과, systemd를 이용한 환경변수 추가 방법이 있는데 저는 docker-compose에 환경변수 추가로 작업하였습니다.
docker-compose 아래만 수정
kafka1 컨테이너에서 9999 포트가 리슨 상태인지 확인 필요
주요 지표
카프카 매니저