kafka 실습2

oneofakindscene·2021년 8월 1일
0

kafka

목록 보기
3/4

환경구축

$ git clone https://github.com/wurstmeister/kafka-docker
$ cd [git clone한 위치]
# (저장용) 내컴퓨터에서는 cd ~/kafka_practice/kafka-docker 에 위치
$ vim docker-compose-single-broker.yml
$ docker-compose -f docker-compose-single-broker.yml up -d
  • docker-compose-single-broker.yml에서 KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1로 변경
  • 2개 컨테이너(kafka-docker_kafka_1, kafka-docker_zookeeper_1) 띄워진거 확인

(참고) docker-compose-single-broker.yml 최종상태

version: '2'
services:
  zookeeper:
    image: wurstmeister/zookeeper
    ports:
      - "2181:2181"
  kafka:
    build: .
    ports:
      - "9092:9092"
    environment:
      KAFKA_ADVERTISED_HOST_NAME: 127.0.0.1
      KAFKA_CREATE_TOPICS: "test:1:1"
      KAFKA_ZOOKEEPER_CONNECT: zookeeper:2181
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock

프로듀서/컨슈머 simple 테스트

# kafka 깔려있는 곳으로 이동
$ cd ~/kafka_practice/temp/kafka_2.13-2.7.0/bin

# 프로듀서 띄우기
$ ./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
# 컨슈머 띄우기
$ ./kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test

(Practice1) 프로듀서 띄운 상태에서 java파일 simple-kafka-consumer 테스트

# 프로듀서 띄우기
$ ./kafka-console-producer.sh --bootstrap-server localhost:9092 --topic test
  • 인텔리제이로 SimpleConsumer.java 실행
  • 경로 : ~/kafka_practice/practice_dvwy/tacademy-kafka/simple-kafka-consumer
  • 실행되서 레코드 가져오는 모습

(Practice2) kafka-consumer-auto-commit 실습

  • Practice1과 동일한 상태에서 이클립스에서 run해서 실습하면 됨
    • 커맨드쉘에서 띄운 프로듀서에서 데이터 넣고 ⇒ 인텔리제이로 띄운 kafka-consumer-auto-commit 프로듀서에 잘 찍히는지 확인
  • 60초 되기전에 이클립스에서 돌아가고있는 consumer 꺼버리고 재실행시키면 ⇒ commit이 된게 아니기때문에 이클립스 화면에 보냈던 레코드들이 다시 찍히는 것을 확인할 수 있음 ⇒ 이건 중복처리되는거나 마찬가지
  • 그렇다면 중복 or 유실을 방지하기 위해서는 어떤식으로 세팅해야할까?
    • 데이터에 timestamp값을 실어서 보내면 최종 적재단계에서 distinct 하게 넣으면 됨 ⇒ 이렇게 해서 리밸런스(에러 발생시 파티션<>컨슈머 재배치)할때, 유실/중복을 방지해줄 수 있음

(Practice3) kafka-consumer-auto-commit 실습

  • Practice2에서 발생한 중복
  • 인텔리제이로 kafka-consumer-sync-commit 파일 실행키고 ⇒ 커맨드쉘에서 띄운 프로듀서에서 데이터 넣고 ⇒ 다시 끄고 실행했을때 ⇒ 방금 집어넣은 데이터가 print안되면 정상적으로 잘 commit이 된 것을 확인해 볼 수 있음

(Practice4) kafka-consumer-multi-thread 실습

  • 이전 파일과 다르게 ConsumerWithMultiThread, ConsumerWorker 이렇게 파일이 2개 있음
  • 실습할때 아래 스샷처렴 thread-2만 떳는데 partition이 하나밖에 없어서 그랬음
    - 따라서 실습전에 파티션이 3개 맞는지 확인해보고 할 것
profile
oneofakindscene

0개의 댓글