Apache Kafka란?
Apache Kafka는 움직이는 데이터를 처리하는 Data in Motion Platform, 연속적인 Event 데이터를 처리하는 Event Streaming Platform 입니다.
Event는 비즈니스에서 일어나는 모든 일 또는 데이터를 의미합니다. 배달앱에서 음식을 주문하거나 배달이 어디쯤 오고 있는지 위치를 조회하거나 택시의 GPS 좌표를 조회하거나 은행에서 돈을 이체하는 등 이러한 것들을 Event라고 합니다. Event Stream은 이렇게 연속적이고 많은 Event들의 흐름을 의미하고 Apache Kafka는 이런 Event Stream을 처리해주는 역할을 합니다.
Apache Kafka는 링크드인(Linked In)에서 Event Stream 처리를 위해 개발되었고 2011년에 Apache Software Foundation에 기부되어 오픈소스화 되었습니다.
Apache Kafka의 주요 특징으로는 대용량의 Event Stream을 안전하게 전송, Event Stream을 디스크에 저장, Event Stream을 분석 및 처리가 있습니다.
Kafka는 Apache Kafka와 Confluent Kafka 두 종류가 있습니다. Apache Kafka는 오픈 소스이고 Apache 2.0 라이선스를 따르고 있습니다. Confluent는 링크드인(Linked In)에서 Kafka를 최초 개발한 사람(Jay Kreps)들이 만든 회사이고 Apache Kafka에 기능을 더해 부가적인 기능들을 추가해서 Enterprise 서비스를 제공하고 있습니다. 제공하는 기능에 따라 Community 라이선스와 Enterprise 라이선스가 있습니다.
Apache 2.0 라이선스는 수정과 배포가 자유로운 것으로 알고 있는데 Apache 2.0 라이선스를 포함해서 라이선스들의 종류와 내용에 대해서는 더 알아보고 공부하시길 추천드립니다. 저도 대충만 알고 자세히는 모르고 있어서 제대로 사용하기 위해서는 더 공부가 필요합니다. 😭
Apache Kafka 다운로드
여기서는 오픈 소스인 Apache Kafka를 사용하도록 하겠습니다. 아래 링크로 이동해 Apache Kafka 파일을 다운로드 받습니다. 저는 3.1.0 버전의 Binary downloads에서 Scala 2.13 버전을 다운로드 하였습니다. 파일이 다운로드 완료되면 압축 해제를 해줍니다.
Apache Kafka 설치
설치라고 표현했지만 사실 특별한 내용은 없습니다. 위에서 압축 해제한 kafka 폴더를 원하는 위치로 이동만 시켜주면 끝입니다. 앞으로 kafka 사용은 이곳에 위치한 kafka를 사용 할 예정입니다.
Apache Kafka Quick Start
kafka 폴더로 들어가보면 여러개의 폴더가 있는데 우리는 주로 bin과 config 폴더 위주로 사용한다고 보면 됩니다. 모두 아시겠지만 bin 폴더에는 실행 파일, config 폴더에는 설정 파일들이 들어있습니다. bin 폴더에 들어가 보면 windows 폴더가 또 하나 있는데 이건 Windows 운영체제용 파일입니다. 처음에 이거 있는지 몰라서 조금 고생을 했네요..😅
Zookeeper 서비스 시작
Kafka를 사용하기 위해선 Zookeeper가 필요합니다. 조만간 Zookeeper 없이도 쓸 수 있는 버전이 나온다고는 하는데 아직 안 나왔으니 Kafka를 사용하기 위해 아래 명령어를 입력해 Zookeeper 서비스를 시작 시켜줍니다. 경로를 잘 확인해주시기 바랍니다. 관련 설정 파일은 config 폴더에 zookeeper.properties 파일입니다. 필요시 원하는 설정값으로 변경해주시면 되는데 여기서는 변경하지 않고 기본 설정값을 사용하도록 하겠습니다.
$ cd bin
$ cd windows
$ zookeeper-server-start.bat ../../config/zookeeper.properties
이렇게 Zookeeper 서비스가 시작되면 로그를 보고 아래 처럼 Bind가 잘 됐는지도 확인해줍니다. Zookeeper 서비스 창은 닫지 말고 그대로 계속 열어둡니다.
Kafka Broker 서비스 시작
Kafka Broker 서비스를 시작하기 전에 관련 설정 파일인 config 폴더의 server.properties 파일을 열어 listeners 속성의 주석을 해제하고 사용중인 host 이름을 입력 후 파일을 저장합니다. 그 외의 속성은 기본값을 사용하도록 하겠습니다.
새로운 명령 프롬프트 창을 열고 아래와 같이 명령어를 입력하여 Kafka Broker 서비스를 시작합니다. 경로를 잘 확인해주시기 바랍니다.
$ kafka-server-start.bat ../../config/server.properties
로그를 확인하여 Kafka Broker 서비스가 잘 시작됐는지 확인합니다. id가 0인 KafkaServer가 시작됐다는 것을 확인 할 수 있습니다. Kafka Broker 서비스 창도 Zookeeper 서비스 창과 동일하게 창을 닫지 말고 그대로 열어둡니다.
Topic 생성
Kafka는 기본적으로 Topic이라는 논리적인 공간이 있어야 합니다. 새로운 명령 프롬프트 창을 열고 아래 명령어를 입력하여 quickstart-events라는 Topic을 생성해보도록 하겠습니다. 경로를 잘 확인해주시기 바랍니다. Topic명은 최대 길이 249까지 가능하니 길이를 초과하지 않도록 합니다.
$ kafka-topics.bat --create --topic quickstart-events --bootstrap-server localhost:9092
Topic 생성 후 생성이 잘 됐는지 아래 명령어를 입력하여 확인합니다. quickstart-events Topic이 정상적으로 생성된 것을 확인 할 수 있습니다.
$ kafka-topics.bat --list --bootstrap-server localhost:9092
Producer로 Topic에 Event 쓰기
Zookeeper 서비스를 시작하고 Kafka Broker 서비스도 시작하고 Topic도 만들어 기본적인 준비를 마쳤으니 Kafka Producer를 사용하여 Topic에 Event를 write 해보겠습니다.
아래와 같이 명령어를 입력하여 Kafka Producer를 실행시킨 후 Topic에 쓸 Event들을 입력하고 엔터 키를 누르면 Topic에 Event가 write 됩니다.
$ kafka-console-producer.bat --topic quickstart-events --bootstrap-server localhost:9092
# 2개의 Event를 write 해봤습니다.
> My First Event!
> My Second Event!!
Consumer로 Topic의 Event 읽기
Kafka Producer를 사용하여 Topic에 Event들을 write 해놨으니 그것들을 Read 해와야 하겠죠? Kafka Consumer를 사용하여 읽어오도록 하겠습니다. 새로운 명령 프롬프트 창을 열고 아래와 같이 명령어를 입력하여 Kafka Consumer 서비스를 실행시켜 줍니다. 실행과 동시에 Topic에 쌓여있는 Event들을 읽어오는 것을 확인 할 수 있습니다.
--from-beginning 옵션을 사용하면 Topic의 처음 내용부터 읽어오고 사용하지 않으면 현재부터 Topic에 쌓이는 Event들만 가져옵니다.
$ kafka-console-consumer.bat --topic quickstart-events --from-beginning --bootstrap-server localhost:9092
열려있는 Kafka Producer 서비스 창에서 Event를 계속 Topic에 보내면 Kafka Consumer 서비스 창에서 실시간으로 Topic에 쌓여있는 Event들을 가져오는 것을 확인 할 수 있습니다. 한글도 입력해봤는데 Kafka Consumer에서 가져온 결과를 보니 다 깨져있군요. 정상적으로 처리되려면 어디에선가 무엇을 해줘야 하는거 같습니다. 그건 아직 모르니 차차 공부하면서 알아보도록 하겠습니다. 😅
마무리
이것으로 Apache Kafka 설치 및 간단한 테스트를 마치도록 하겠습니다. 더 자세한 내용은 아래 Apache Kafka Quickstart 공식 링크에 가셔서 확인해보시기 바랍니다.