테스트를 위해 로컬 Apache Kafka 인스턴스 설정

9138 단어 kafkadockertutorial
저는 최근 직장에서 작업 중인 프로젝트를 위해 Apache Kafka를 파헤치기 시작했습니다. 더 많이 조사하기 시작할수록 로컬 Kafka 클러스터를 가져와야 한다는 것을 깨달았습니다. 이 기사는 그 과정을 안내하고 시간을 절약할 수 있기를 바랍니다 😄.

Kafka가 무엇인지 모른다면 Confluent에서.

💡 You can follow along by cloning the repo I have created over here.



바이너리 설치



공식 문서에 빠른 시작guide이 있습니다. 솔직히 말해서 Kafka 인스턴스를 내 개발 환경과 상당히 분리하기 위해 로컬에 아무것도 설치하고 싶지 않았기 때문에 아래에서 찾을 수 있는 Docker 방식을 사용했습니다.

도커 방식



이것은 내가 찾은 것 중 가장 쉽고 많은 시간을 절약해 줍니다. 레포를 복제한 후에는 스핀업만 하면 됩니다!

docker-compose up -d


여기에서 무슨 일이 일어나고 있는지 알고 싶다면 docker-compose.yaml 파일을 살펴보겠습니다.

docker-compose.yaml

---
version: '3'
services:
  zookeeper:
    image: confluentinc/cp-zookeeper:7.0.1
    container_name: zookeeper
    environment:
      ZOOKEEPER_CLIENT_PORT: 2181
      ZOOKEEPER_TICK_TIME: 2000

  broker:
    image: confluentinc/cp-kafka:7.0.1
    container_name: broker
    ports:
    # To learn about configuring Kafka for access across networks see
    # https://www.confluent.io/blog/kafka-client-cannot-connect-to-broker-on-aws-on-docker-etc/
      - "9092:9092"
    depends_on:
      - zookeeper
    environment:
      KAFKA_BROKER_ID: 1
      KAFKA_ZOOKEEPER_CONNECT: 'zookeeper:2181'
      KAFKA_LISTENER_SECURITY_PROTOCOL_MAP: PLAINTEXT:PLAINTEXT,PLAINTEXT_INTERNAL:PLAINTEXT
      KAFKA_ADVERTISED_LISTENERS: PLAINTEXT://localhost:9092,PLAINTEXT_INTERNAL://broker:29092
      KAFKA_OFFSETS_TOPIC_REPLICATION_FACTOR: 1
      KAFKA_TRANSACTION_STATE_LOG_MIN_ISR: 1
      KAFKA_TRANSACTION_STATE_LOG_REPLICATION_FACTOR: 1


  • Docker 네트워크 내에서 내부적으로 포트2181에서 Zookeeper 인스턴스를 가동합니다(즉, 호스트에서 액세스할 수 없음)
  • 다음으로 Zookeeper에 종속된 Kafka 인스턴스인 브로커를 가동합니다. 이는 포트9092에서 노출되며 호스트에서 액세스할 수 있습니다.

  • 다른 모든 것은 기본값으로 설정됩니다. 각 환경 변수가 무엇을 하는지 알아보려면 here으로 이동하십시오. 동일한 docker-compose 파일에서 원하는 경우 여러 브로커(Kafka 인스턴스)를 추가할 수 있습니다.

    이 접근 방식은 이동 중 또는 CI 환경에서도 테스트를 위해 인스턴스를 시작하려는 경우 매우 유용합니다.

    클러스터와 상호 작용



    무엇이든 게시하기 전에 설정이 제대로 작동하는지 확인할 수 있도록 소비자를 가동해 보겠습니다. 그렇게 하려면 CLI에서 다음 명령을 실행하십시오.

    docker exec --interactive --tty broker \
    kafka-console-consumer --bootstrap-server localhost:9092 \
                           --topic example-topic \
                           --from-beginning
    


    이제 몇 가지 메시지를 만들고 작동하는 것을 봅시다!

    docker exec --interactive --tty broker \
    kafka-console-producer --bootstrap-server localhost:9092 \
                           --topic example-topic
    


    터미널에서 보면 이런 모습입니다. 왼쪽에는 producer가 있고 오른쪽에는 consumer가 있습니다.



    아마도 GUI?



    CLI 팬이 아니십니까? 거기에는 많은 도구가 있습니다. 이를 위한 훌륭하고 가벼운 OSS 솔루션을 찾고 싶었습니다. 나는 Tools for Apache Kafka for VS Code으로 진행하기로 결정했습니다.

    일단 이동하면 사이드 바에서 상호 작용할 수 있습니다. Kafka의 로고가 있는 새로운 아이콘이 있을 것입니다!



    다음은 인스턴스를 찾았을 때의 모습입니다.



    producer.kafka

    PRODUCER keyed-message
    topic: example-topic
    key: mykeyq
    record content
    
    ###
    
    PRODUCER non-keyed-json-message
    topic: example-topic
    {
        "type": "my_test_event-{{random.number}}"
    }
    


    consumer.kafka

    CONSUMER consumer-group-id
    topic: example-topic
    partitions: 0
    from: 1
    


    VS Code 내에서 바로 생산자와 소비자를 호출할 수 있습니다. 매우 쉽고 멋집니다!



    결론



    그게 다야! 도커 컨테이너를 세우면 확실히 테스트 목적으로 시간을 절약할 수 있었습니다. 이번 포스팅도 재밌게 봐주시고 다음에 또 만나요👋

    참조


  • https://developer.confluent.io/quickstart/kafka-docker/
  • https://marketplace.visualstudio.com/items?itemName=jeppeandersen.vscode-kafka
  • https://docs.confluent.io/platform/current/kafka/multi-node.html
  • 좋은 웹페이지 즐겨찾기