Apache Kafka는 LinkedIn에서 2011년 오픈 소스로 공개된 메시지 큐 시스템이다.
MQTT처럼 Broker(중개자) 서버를 두고, Producer/Consumer(생산자/소비자) 방식으로 동작한다. 이는 MQTT의 Broker 서버와 Publish/Subscribe 방식과 유사함을 알 수 있다.


 

 

Apache Kafka는 다음과 같이 Zookeeper 연동을 지원하며, Broker 서버를 클러스터로 구성 가능하다. 이를 통하여 메시징 큐의 안정화 및 분산 처리 작업이 가능하며 그 성능 또한 우수하다고 한다.

출처 : http://notes.stephenholiday.com/Kafka.pdf

 

 

 

1. Apache Kafka 설치
​  - Kafka 다운로드 (https://kafka.apache.org/downloads)


 

 

  - Kafka 압축 풀기

$ tar xvf kafka_2.11-0.10.2.1.tgz

 

Apache Kafka 테스트를 위한 네트워크 환경 구성은 아래와 그림과 같은 구조이며, 이를 바탕으로 설정 방법을 설명한다.

 

 

 

2. Zookeeper 설정
  - config/zookeeper.properties 수정

다음과 같이 각 Broker 서버에 설치된 Kafka의 config/zookeeper.properties에 다음과 같이 각 Broker 서버에 설정 정보를 입력 후 저장한다.

 

 

 

또한, 각 서버의 /tmp/zookeeper에 myid 파일을 생성하여, 각각 서버의 고유 ID값을 부여한다. 만약 /tmp/zookeeper 디렉토리가 없다면 생성한다.

 

  - Broker Server 1 (IP : 192.168.0.101)

$ mkdir /tmp/zookeeper
$ echo 1 > /tmp/zookeeper/myid


  - Broker Server 2 (IP : 192.168.0.102)

$ mkdir /tmp/zookeeper
$ echo 2 > /tmp/zookeeper/myid


  - Broker Server 3 (IP : 192.168.0.103)

$ mkdir /tmp/zookeeper
$ echo 3 > /tmp/zookeeper/myid

 

3. Kafka 설정
  - config/server.properties 수정

각 서버의 config/server.properties에 해당 설정 활성화 및 Broker Server 정보를 입력한다.

 

  - Broker Server 1 (IP : 192.168.0.101)

broker.id=1
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.0.101:9092
advertised.host.name=192.168.0.101
advertised.host.name=9092
zookeeper.connect=192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181

 

  - Broker Server 2 (IP : 192.168.0.102)

broker.id=2
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.0.102:9092
advertised.host.name=192.168.0.102
advertised.host.name=9092
zookeeper.connect=192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181

 

  - Broker Server 3 (IP : 192.168.0.103)

broker.id=3
listeners=PLAINTEXT://:9092
advertised.listeners=PLAINTEXT://192.168.0.103:9092
advertised.host.name=192.168.0.103
advertised.host.name=9092
zookeeper.connect=192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181

 

 

4. 서버 구동

$ bin/zookeeper-server-start.sh config/zookeeper.properties
$ bin/kafka-server-start.sh config/server.properties


서버 구동이 완료되면 다음과 이 Kafka 서버가 정상적으로 시작했음을 알 수 있다.


 

 

 

 

5. Topic 생성 및 삭제

  - Topic 생성

$ bin/kafka-topics.sh --create --zookeeper 192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181 --replication-factor 3 --partitions 1 --topic A

 

 

 

replication-factor : 인스턴스 개수
partitions : 병렬 처리를 위한 개수

 

  - Topic 리스트 확인

$ bin/kafka-topics.sh --list --zookeeper 192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181


 

 

  - Topic 삭제

$ bin/kafka-topics.sh --delete --zookeeper 192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181 --topic A

 

 

 

  -  Topic의 partition과 replication-factor에 대한 상세 정보 확인

$ bin/kafka-topics.sh --describe --zookeeper 192.168.0.101:2181, 192.168.0.102:2181, 192.168.0.103:2181

 

 

 

6. Producer/Consumer 테스트
  - Producer 테스트

$ bin/kafka-console-producer.sh --broker-list 192.168.0.101:9092,192.168.0.102:9092,192.168.0.103:9092 --topic A


 

 

  - Consumer 테스트

$ bin/kafka-console-consumer.sh --zookeeper 192.168.0.101:2181,192.168.0.102:2181,192.168.0.103:2181 --topic A --from-beginning


 

 

테스트 환경 : Ubuntu 16.04

+ Recent posts