티스토리 뷰

Apache Kafka Install on Linux

개요

  •  
  • 분산 애플리케이션 관리를 위한 안정적 코디네이션 애플리케이션
  • 각 애플리케이션의 정보를 중앙에 집중하고 구성 관리, 그룹 관리 네이밍, 동기화 등의 서비스 제공
  • 직접 개발하기보다 안정적이라고 검증된 주키퍼를 많이 사용
  • 카프카, 스톰, hbase, Nifi 등에서 사용됨
  • znode : 데이터를 저장하기 위한 공간 이름, 폴더 개념
  • 주키퍼 데이터는 메모리에 저장되어 처리량이 매우 크고 속도 또한 빠름
  • 앙상블(클러스터)라는 호스트 세트를 구성해 살아있는 노드 수가 과반수 이상 유지되면 지속적 서비스가 가능
    • 과반수 방식으로 운영되어 홀수로 서버를 구성
    • 3대 : 최대 초당 약 80,000 request 처리
    • 5대 : 최대 초당 약 140,000 request 처리
  • 로그
    • 로그는 별도의 디렉토리에 저장
    • znode에 변경사항이 발생하면 트랜잭션 로그에 추가됨
    • 로그가 어느정도 커지면 모든 znode의 상태 스냅샷이 파일시스템에 저장
  • myid
    • 주키퍼 노드를 구분하기 위한 ID
    • 각 클러스터에 다른 값 설정
  • 환경설정

설치

Docker로 카프카 서버 띄우기

Docker Engine 설치

Docker Engine 설치는 인터넷에 자료가 많으므로 생략한다.

Docker Compose 설치

카프카는 카프카 클러스터 + zookeeper가 설치되어야 하므로 docker-compose를 통해 docker 컨테이너간의 연계가 필요하다. 이부분을 docker-compose가 쉽게 해결해주므로 이 툴을 이용하기로 한다. docker-compose는 docker가 설치된 상태에서 아래의 방법으로 설치가 가능하다.

 

$ curl -L "https://github.com/docker/compose/releases/download/1.11.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose 
$ chmod +x /usr/local/bin/docker-compose

kafka-docker 레파지토리 클론

카프카를 docker-compose로 띄우는 잘 정리된 github 레파지토리가 있어 이를 이용하였다.

 

$ git clone https://github.com/wurstmeister/kafka-docker

docker-compose-single-broker.yml 수정

클론 받은 레파지토리 내용 중 값 하나를 수정한다.

로컬에서 실행할 것이기 때문에 KAFKA_ADVERTISED_HOST_NAME값을 127.0.0.1로 수정한다. 해당값을 로컬 호스트 IP로 바꾸는 것은 multi 브로커 환경에서 문제가 생길수 있기 때문에 지양하라고 kafka-docker 운영자는 얘기하지만 필자는 로컬에서 1대의 브로커만 띄우는 것이 목적이므로 아래와 같이 설정하였다.

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

docker-compose 시작

준비가 다 되었으면 아래의 명령어로 zookeeper 1대, 카프카 클러스터 1대를 시작한다. docker-compose.yml에 정의된 대로 docker-compose를 통해 서버를 실행한다.

 

$ cd /opt/kafka-docker
$ docker-compose -f docker-compose-single-broker.yml up

docker-compose 종료

docker-compose로 실행한 서버는 아래의 명령어로 중지 시킬 수 있다.

 

$ docker-compose stop

카프카 테스트 해보기

 

카프카가 docker-compose를 통해 zookeeper 1 대, 클러스터 1대가 제대로 구동중인지 확인을 해보자.

확인하는 방법은 kafka quickstart에 나온 방법대로 카프카 토픽을 만들고 producer, consumer를 실행해 메세지가 옮겨가는지 확인해 보는 것이다.

Kafka 다운로드

카프카가 제대로 설치되었는지 테스트 하기 위해 공식 홈페이지에서 docker-compose로 구동한 카프카와 동일한 버전의 바이너리를 다운로드 한다. 우리가 클론해서 사용하는 kafka-docker의 Dockerfile에 명시된 버전이 스칼라 2.12버전, 카프카 버전 0.10.2.0이니까 해당 버전의 바이너리를 다운로드 한다.

$ wget https://apache.mirror.cdnetworks.com/kafka/2.5.0/kafka_2.12-2.5.0.tgz
$ tar xzvf kafka_2.12-2.5.0.tgz
$ cd /opt/kafka-docker/kafka_2.12-2.5.0/

Dockerfile은 마스터 브랜치 기준이기 때문에 변경될 여지가 있다. 따라서 이부분은 유의하자.

카프카 토픽 생성하기

$ bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 1 --partitions 1 --topic tommypagy123

 

producer/consumer 띄워보기

터미널에서 producer를 시작한다.

 

$ bin/kafka-console-producer.sh --broker-list localhost:9092 --topic tommypagy123

새로운 터미널을 하나 띄워 consumer를 시작한다.

 

$ bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic tommypagy123 --from-beginning

 

이부분은 백문이 불여일견이므로 직접 스크린샷으로 보는것이 이해가 빠를듯 하다. 

화면과 같이 docker-compose로 카프카 클러스터가 시작된 상황에서 터미널을 추가로 열어 producer, consumer를 실행할 준비를 한다.

 

 

## 하기전 해야하는 것
/kafka/config/server.properties 에 들어가서 
delete.topic.enable = True 로 설정해주기 

## topic 생성방법!
bin/kafka-topics.sh --create --bootstrap-server localhost:9092 --replication-factor 1 --partitions 1 --topic test

## topic 조회방법!
bin/kafka-topics.sh --list --zookeeper localhost

## test의 producer 내용 확인
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

## test의 consumer 내용 확인
bin/kafka-console-consumer.sh --bootstrap-server localhost:9092 --topic test --from-beginning

## test topic 제거하기
bin/kafka-topics.sh --delete --zookeeper localhost --topic test

## test topic 제거 조회
bin/kafka-topics.sh --list --zookeeper localhost

해당 설정 값을 바꾼 후에는 반드시 kafka 를 재시작 해야 한다.

재시작후

댓글