카프카(Kafka) 간단 설치와 실행 - simple Kafka, Zookeeper docker

정현우·2021년 7월 10일
6
post-thumbnail

Apache kafka, 카프카에만 집중하기 위해 도커(도커컴포즈), spring-boot 등에 대한 설명은 최대한 필요한 것 만 포함시켰다.

카프카?

0장을 꼭 먼저 살펴보고 오자

Kafka는 무엇인가?


카프카 설치하기

사전 체크

1. Docker를 활용해서 Kafka이미지를 받고 설정할 것 이다.

  • 너무나 당연하게 도커가 설치되어 있어야 한다. 쉽고 빠르게 설치하기
  • homebrew, curl (with github) 등의 타 방법도 있지만, 위 링크 -> 공홈에서 도커 설치하는 것을 따르자
  • 도커는 설치 후 cli로 진행할 것이다.docker version으로 설치 확인을 한 번 진행하자

2. docker search kafka 로 가장 인기있는 카프카 이미지를 다운로드 받자

3. 위 도커 이미지를 다운받기 전, 사전에 해야할 사항들이 있다.

  • docker-compose version 으로 compose 사용 가능한지 체크 (1을 통해 설치했으면 자동으로 같이 설정된다.)

잠깐, kafka official docker image가 너무 많다.

  • wurstmeister image와 confluentinc 그리고 apache까지,, 오피셜 이미지가 많아졌다.

  • 엄청나게 큰 차이가 있지는 않다. 다만 설정 환경변수값에 대한 설정차이는 존재한다.

  • 그리고 아래와 같은 자료도 볼 수 있었다.

I contribute to both. As well as bitnami/kafka and debezium/kafka

Both are open source. Both are documented (2) (3)

Both work with the entire Confluent Platform.

Confluent's actually work better in Mesos/k8s/Nomad than wurstmeisters, which mostly just work in the Swarm

The Confluent (and Bitnami) ones are actually built and tested nightly, as compared to these, which are done manually, AFAICT

출처: https://github.com/wurstmeister/kafka-docker/issues/587#issuecomment-627975311

컨테이너 실행과 카프카 서버 러닝

1. docker-compose.yml 파일은 공식문서를 한 번 참조해보자.

  • 중요한 점은 사전 사항 안내에 나와 있듯이 KAFKA_ADVERTISED_HOST_NAME는 본인의 docker host ip로 수정해주면 될 것이고, 단일 브로커만 사용할 것이므로 localhost를 작성하면 되겠다.

  • 참고로 directory는 크게 상관이 없다. 카프카 테스트 레포를 만들 곳에서 만들어 보자.

2. docker-compose up -d를 통해 실행하고, 컨테이너 실행 상태를 docker container ls통해 체크하자.

  • docker-compose stop를 통해 멈출 수 있다. 역시 이미지 공식 문서에 나와 있다.

3. 카프카 설치 진행까지 완료 되었으니, kafka 자체가 잘 작동하는지 테스트 해보자! 공식 테스트 문서 를 따를 것이다.

  • 위 도커 이미지를 실행한 컨테이너의 shell에 접근하자. 우리가 접근할 컨테이너는 "wurstmeister/kafka:2.12-2.5.0" 이미지 이다. docker exec -it 95a54 /bin/bash # -it옵션 뒤에 붙는 것은 실행시킨 컨테이너 id 앞 5자리이다. 를 통해 shell에 접근하자.

  • ps) -it 옵션은 STDIN 표준 입출력을 열고 가상 tty (pseudo-TTY) 를 통해 접속하겠다는 의미이다.

  • 그리고 아래 명령어와 결과를 체크해보자!

    $ cd /bin # 원활한 test를 위해 우선 bin 디렉토리로 가자

    $ kafka-topics.sh --create --topic quickstart-events --bootstrap-server localhost:9092

    $ kafka-topics.sh --describe --topic quickstart-events --bootstrap-server localhost:9092
    Topic:quickstart-events  PartitionCount:1    ReplicationFactor:1 Configs:
        Topic: quickstart-events Partition: 0    Leader: 0   Replicas: 0 Isr: 0

--create

  • 새로운 토픽을 만들 때 사용하는 옵션

--topic

  • create, alter, describe, delete 옵션에 사용할 Topic 명. Topic 이름은 큰따옴표(")로 묶고, 정규식 사용이 가능하므로 \로 escape 한다.

--describe

  • 운영상에 필요한 Topic의 상세정보를 보여준다.

--bootstrap-server

  • 연결할 Kafka 서버( host:port )! 이 옵션이 추가되면, 직접 Zookeeper에 연결하지 않아도 된다.

--replication-factor

  • Partition 복제 수. 이 옵션을 사용하지 않으면, 기본 값을 사용한다.
  • 기본 값은 server.properties 파일에서 default.replication.factor 항목으로 설정 가능( 설정되어 있지 않을 경우, 추가 작성 )

--partitions

  • Topic이 생성되거나 변경될 때의 Partition 수. 이 옵션을 사용하지 않으면, 기본 값을 사용한다. 기본 값은 server.properties 파일에서 num.partitions 항목으로 설정 가능.

4. 토픽을 만들고, 만들어진 토픽을 확인했다. 이제 직접 연결할 kafka 서버에 들어가서 토픽에 해당하는 이벤트를 추가해 보자!

    $ kafka-console-producer.sh --topic quickstart-events --bootstrap-server localhost:9092 # 얘를 치면 서버 접속해서 '>' 만 뜨게 되어 있다. 당황하지 말고 추가할 이벤트 추가해보자.
    > This is my first event
	> This is my second event
    # Ctrl + C로 exit 가능하다! 
    
    $ kafka-console-consumer.sh --topic quickstart-events --from-beginning --bootstrap-server localhost:9092 # 얘를 치면 위에서 서버에 접속 해서 보낸 event를 확인할 수 있다. 
    This is my first event
    This is my second event
  • 이벤트가 잘 작동하는지 체크하려면, 위 2개 커멘드를 동시에 실행시켜서 동시에 송-수신이 되는지 체크하면 좋다! 아래 사진과 같이 말이다!


출처

profile
도메인 중심의 개발, 깊이의 가치를 이해하고 “문제 해결” 에 몰두하는 개발자가 되고싶습니다. 그러기 위해 항상 새로운 것에 도전하고 노력하는 개발자가 되고 싶습니다!

0개의 댓글