이름은 Apache Kafka
LinkedIn에서 분산 메시징 시스템으로써 오픈소스로 공개했다.
대용량의 실시간 로그처리에 특화되었다.
producer가 생성하고 consumer가 소비하는 메세지
topic
안에서 여러 개의 partition으로 나누어져 있다. partition
의 한 칸을 뜻한다.존재하는 이유?
topic의 partition >= consumer group의 consumer 이어야 한다.
partition에 대한 읽기와 쓰기는 모두 leader에서 이루어진다.
Download에서 다운로드한다.
$ tar -zxf kafka_2.13-2.7.0.tgz
$ cd kafka_2.13-2.7.0
terminal(1) zookeeper 서비스를 시작한다.
$ bin/zookeeper-server-start.sh config/zookeeper.properties
terminal(2) kafka broker 서비스를 시작한다.
$ bin/kafka-server-start.sh config/server.properties
모두 성공하였다면 기본 Kafka 환경이 실행되고 있고 사용할 준비가 된 것이다.
이벤트는 records, messages 라고도 불린다.
Kafka는 event streaming platform이기 때문에 다양한 기종에서 이벤트를 읽기, 쓰기, 저장하기, 프로세싱이 가능하다.
이벤트들은 토픽에 저장된다. 아주 간단하게 말하자면 토픽은 파일 시스템의 폴더와 유사하고, 이벤트는 폴터 안의 파일이다.
이벤트를 쓰기 전에, 토픽을 생성해야 한다.
terminal(3) 토픽 생성
$ bin/kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092
Kafka의 커맨드 라인 툴은 모두 추가 옵션을 가지고 있다. 예를 들어 새로운 토픽의 디테일을 보여주는 밑 예제
$ bin/kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
Kafka 클라이언트는 이벤트를 쓰거나 읽기 위해 네트워크를 통해서 borker와 소통한다.
이벤트를 한 번 받으면 borker는 내구성이 좋은 방식으로 이벤트를 저장한다.
console(3) producer 생성하기
$ bin/kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092
> Hello world
console(4) consumer 생성하기
$ bin/kafka-console-consumer.sh --topic quickstart-events --from-beginnig --bootstrap-server localhost:9092
Hello world
데이터를 kafka의 이벤트로 저장을 하게 되면, Java/Scala로 kafka streams 클라이언트 라이브러리로 데이터를 처리할 수 있다. 라이브러리는 정확히 한 번, 상태 저장 작업 및 집계, 윈도우 설정, 조인, 이벤트 시간에 따른 처리 등을 지원한다.
kafka 환경의 이벤트를 포함한 모든 데이터를 지우고 싶을 때
$ rm -rf /tmp/kafka-logs /tmp/zookeeper