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
'Network' 카테고리의 다른 글
RabbitMQ Broker Server Cluster 설치 및 테스트 (1) | 2018.11.06 |
---|---|
DNS 서버 설치 및 테스트 (0) | 2018.10.27 |
Suricata NIDS/IPS 환경 설치 및 테스트 (0) | 2017.05.03 |
MQTT 프로토콜을 활용한 Mosquitto Broker Server 설치 및 테스트 (0) | 2017.05.03 |