Ubuntu 14.04에 Apache Kafka를 설치하는 방법
소개
Apache Kafka는 대량의 실시간 데이터를 효율적으로 처리하도록 설계된 널리 사용되는 분산 메시지 브로커입니다. Kafka 클러스터는 확장성이 뛰어나고 내결함성이 있을 뿐만 아니라 ActiveMQ 및 RabbitMQ와 같은 다른 메시지 브로커에 비해 처리량이 훨씬 높습니다. 일반적으로 게시/구독 메시징 시스템으로 사용되지만 게시된 메시지에 대한 영구 저장소를 제공하기 때문에 많은 조직에서 로그 집계에도 사용합니다.
이 튜토리얼에서는 Ubuntu 14.04에 Apache Kafka 0.8.2.1을 설치하고 사용하는 방법을 배웁니다.
전제 조건
따라 하려면 다음이 필요합니다.
- 우분투 14.04 물방울
- 최소 4GB의 스왑 공간
1단계 - Kafka용 사용자 생성
Kafka는 네트워크를 통해 요청을 처리할 수 있으므로 전용 사용자를 생성해야 합니다. 이렇게 하면 Kafka 서버가 구성될 경우 Ubuntu 시스템의 손상이 최소화됩니다.
참고: Apache Kafka를 설정한 후 이 서버에서 다른 작업을 수행하려면 루트가 아닌 다른 사용자를 생성하는 것이 좋습니다.
루트로 useradd
명령을 사용하여 kafka라는 사용자를 만듭니다.
- useradd kafka -m
passwd
를 사용하여 암호를 설정합니다.
- passwd kafka
Kafka의 종속성을 설치하는 데 필요한 권한을 갖도록 sudo
그룹에 추가합니다. 이것은 adduser
명령을 사용하여 수행할 수 있습니다.
- adduser kafka sudo
이제 Kafka 사용자가 준비되었습니다. su
를 사용하여 로그인합니다.
- su - kafka
2단계 - 자바 설치
추가 패키지를 설치하기 전에 저장소에서 사용 가능한 최신 버전을 설치하도록 사용 가능한 패키지 목록을 업데이트하십시오.
- sudo apt-get update
Apache Kafka에는 Java 런타임 환경이 필요하므로 apt-get
을 사용하여 default-jre
패키지를 설치합니다.
- sudo apt-get install default-jre
3단계 - ZooKeeper 설치
Apache ZooKeeper는 분산 시스템에 속한 노드의 구성 정보를 조정하고 동기화하기 위해 구축된 오픈 소스 서비스입니다. Kafka 클러스터는 무엇보다도 실패한 노드 감지 및 리더 선출과 같은 작업을 수행하기 위해 ZooKeeper에 의존합니다.
ZooKeeper 패키지는 Ubuntu의 기본 리포지토리에서 사용할 수 있으므로 apt-get
을 사용하여 설치합니다.
- sudo apt-get install zookeeperd
설치가 완료되면 ZooKeeper가 자동으로 데몬으로 시작됩니다. 기본적으로 포트 2181에서 수신 대기합니다.
작동하는지 확인하려면 Telnet을 통해 연결하십시오.
- telnet localhost 2181
Telnet 프롬프트에서 ruok
를 입력하고 ENTER
를 누릅니다.
모든 것이 정상이면 ZooKeeper는 imok
라고 말하고 텔넷 세션을 종료합니다.
4단계 - Kafka 바이너리 다운로드 및 추출
이제 Java와 ZooKeeper가 설치되었으므로 Kafka를 다운로드하고 추출할 차례입니다.
시작하려면 모든 다운로드를 저장할 Downloads
라는 디렉터리를 만듭니다.
- mkdir -p ~/Downloads
wget
을 사용하여 Kafka 바이너리를 다운로드합니다.
- wget "http://mirror.cc.columbia.edu/pub/software/apache/kafka/0.8.2.1/kafka_2.11-0.8.2.1.tgz" -O ~/Downloads/kafka.tgz
kafka
라는 디렉터리를 만들고 이 디렉터리로 변경합니다. 이것은 Kafka 설치의 기본 디렉토리가 됩니다.
- mkdir -p ~/kafka && cd ~/kafka
tar
명령을 사용하여 다운로드한 아카이브를 추출하십시오.
- tar -xvzf ~/Downloads/kafka.tgz --strip 1
5단계 - Kafka 서버 구성
다음 단계는 Kakfa 서버를 구성하는 것입니다.
vi
를 사용하여 server.properties
를 엽니다.
- vi ~/kafka/config/server.properties
기본적으로 Kafka는 주제 삭제를 허용하지 않습니다. 주제를 삭제할 수 있으려면 파일 끝에 다음 행을 추가하십시오.
delete.topic.enable = true
파일을 저장하고 vi
를 종료합니다.
6단계 - Kafka 서버 시작
nohup
을 사용하여 kafka-server-start.sh
스크립트를 실행하여 Kafka 서버(Kafka 브로커라고도 함)를 셸 세션과 독립적인 백그라운드 프로세스로 시작합니다.
- nohup ~/kafka/bin/kafka-server-start.sh ~/kafka/config/server.properties > ~/kafka/kafka.log 2>&1 &
시작할 때까지 몇 초 동안 기다리십시오. ~/kafka/kafka.log
에 다음 메시지가 표시되면 서버가 성공적으로 시작된 것입니다.
...
[2015-07-29 06:02:41,736] INFO New leader is 0 (kafka.server.ZookeeperLeaderElector$LeaderChangeListener)
[2015-07-29 06:02:41,776] INFO [Kafka Server 0], started (kafka.server.KafkaServer)
이제 포트 9092에서 수신 대기 중인 Kafka 서버가 있습니다.
7단계 - 설치 테스트
이제 Kafka 서버가 올바르게 작동하는지 확인하기 위해 "Hello World\ 메시지를 게시하고 사용하겠습니다.
메시지를 게시하려면 Kafka 프로듀서를 만들어야 합니다. kafka-console-producer.sh
스크립트를 사용하여 명령줄에서 쉽게 생성할 수 있습니다. 카프카 서버의 호스트 이름과 포트, 주제 이름을 인수로 예상합니다.
다음을 입력하여 TutorialTopic이라는 주제에 문자열 "Hello, World\를 게시합니다.
- echo "Hello, World" | ~/kafka/bin/kafka-console-producer.sh --broker-list localhost:9092 --topic TutorialTopic > /dev/null
주제가 존재하지 않기 때문에 Kafka가 자동으로 생성합니다.
메시지를 사용하려면 kafka-console-consumer.sh
스크립트를 사용하여 Kafka 소비자를 만들 수 있습니다. 주제 이름과 함께 ZooKeeper 서버의 호스트 이름 및 포트를 인수로 예상합니다.
다음 명령은 게시한 주제의 메시지를 사용합니다. 소비자가 시작되기 전에 게시된 메시지를 소비하려고 하기 때문에 존재하는 --from-beginning
플래그 사용에 유의하십시오.
- ~/kafka/bin/kafka-console-consumer.sh --zookeeper localhost:2181 --topic TutorialTopic --from-beginning
구성 문제가 없으면 이제 출력에 Hello, World
가 표시되어야 합니다.
스크립트는 계속 실행되며 더 많은 메시지가 주제에 게시될 때까지 기다립니다. 자유롭게 새 터미널을 열고 생산자를 시작하여 몇 가지 메시지를 더 게시하십시오. 소비자의 출력에서 즉시 모두 볼 수 있어야 합니다.
테스트를 마치면 CTRL+C를 눌러 소비자 스크립트를 중지합니다.
8단계 - KafkaT 설치(선택 사항)
KafkaT는 Kafka 클러스터에 대한 세부 정보를 보다 쉽게 확인하고 명령줄에서 몇 가지 관리 작업을 수행할 수 있도록 하는 Airbnb의 편리한 작은 도구입니다. Ruby gem이므로 사용하려면 Ruby가 필요합니다. 의존하는 다른 gem을 빌드하려면 build-essential
패키지도 필요합니다. apt-get
을 사용하여 설치하십시오.
- sudo apt-get install ruby ruby-dev build-essential
이제 gem
명령을 사용하여 KafkaT를 설치할 수 있습니다.
- sudo gem install kafkat --source https://rubygems.org --no-ri --no-rdoc
vi
를 사용하여 .kafkatcfg
라는 새 파일을 만듭니다.
- vi ~/.kafkatcfg
이것은 KafkaT가 Kafka 서버의 설치 및 로그 디렉토리를 결정하는 데 사용하는 구성 파일입니다. 또한 KafkaT가 ZooKeeper 인스턴스를 가리켜야 합니다. 따라서 다음 줄을 추가하십시오.
{
"kafka_path": "~/kafka",
"log_path": "/tmp/kafka-logs",
"zk_path": "localhost:2181"
}
이제 KafkaT를 사용할 준비가 되었습니다. 먼저 모든 Kafka 파티션에 대한 세부 정보를 보는 데 사용하는 방법은 다음과 같습니다.
- kafkat partitions
다음 출력이 표시되어야 합니다.
Topic Partition Leader Replicas ISRs
TutorialTopic 0 0 [0] [0]
KafkaT에 대한 자세한 내용은 GitHub 리포지토리를 참조하십시오.
9단계 - 다중 노드 클러스터 설정(선택 사항)
더 많은 Ubuntu 14.04 시스템을 사용하여 다중 브로커 클러스터를 생성하려면 각 새 시스템에서 1단계, 3단계, 4단계 및 5단계를 반복해야 합니다. 또한 각각의 server.properties
파일에서 다음과 같이 변경해야 합니다.
broker.id
속성의 값은 클러스터 전체에서 고유하도록 변경되어야 합니다.- 모든 노드가 동일한 ZooKeeper 인스턴스를 가리키도록
zookeeper.connect
속성 값을 변경해야 합니다.
클러스터에 대해 여러 ZooKeeper 인스턴스를 사용하려는 경우 각 노드의 zookeeper.connect
속성 값은 모든 ZooKeeper의 IP 주소와 포트 번호를 나열하는 쉼표로 구분된 동일한 문자열이어야 합니다. 인스턴스.
10단계 - Kafka 사용자 제한
모든 설치가 완료되었으므로 kafka
사용자의 관리자 권한을 제거할 수 있습니다. 그렇게 하기 전에 루트가 아닌 다른 sudo 사용자로 로그아웃했다가 다시 로그인하십시오. 이 자습서를 시작한 것과 동일한 셸 세션을 계속 실행 중인 경우 exit
를 입력하면 됩니다.
kafka
사용자의 관리자 권한을 제거하려면 sudo
그룹에서 제거하십시오.
- sudo deluser kafka sudo
Kafka 서버의 보안을 더욱 강화하려면 passwd
명령을 사용하여 kafka
사용자의 암호를 잠급니다. 이렇게 하면 아무도 직접 로그인할 수 없습니다.
- sudo passwd kafka -l
이 시점에서 루트 또는 sudo 사용자만 다음 명령을 입력하여 kafka
로 로그인할 수 있습니다.
- sudo su - kafka
나중에 잠금을 해제하려면 -u
옵션과 함께 passwd
를 사용하십시오.
- sudo passwd kafka -u
결론
이제 Ubuntu 서버에서 실행되는 안전한 Apache Kafka가 있습니다. 문서를 사용하여 Kafka 생산자 및 소비자를 생성하여 프로젝트에서 쉽게 사용할 수 있습니다.