Kafka 사용
    • PDF

    Kafka 사용

    • PDF

    Article Summary

    VPC 환경에서 이용 가능합니다.

    Apache Kafka는 높은 성능 및 안정성을 보장하는 분산 메시징 시스템입니다. Kafka는 대량의 데이터를 실시간으로 처리할 때 사용합니다.

    주의

    Kafka 앱을 사용하려면 ZOOKEEPER-3.4.13 타입의 Zookeeper 앱을 먼저 생성해 주십시오.

    참고

    Kafka 앱에 대한 자세한 설명은 Kafka 공식문서를 참조해 주십시오.

    Kafka 앱 상세 정보 확인

    앱 생성이 완료되면 상세 정보를 확인할 수 있습니다. 앱 상세 정보의 StatusStable이면 앱이 정상적으로 구동된 것을 의미합니다.
    앱 상세 정보를 확인하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼의 콘솔에서 Services > Big Data & Analytics > Data Forest 메뉴를 차례대로 클릭해 주십시오.
    2. 좌측의 Data Forest > Apps 메뉴를 클릭해 주십시오.
    3. 앱을 소유한 계정을 선택해 주십시오.
    4. 상세 정보를 확인할 앱을 클릭해 주십시오.
    5. 앱 상세 정보를 확인해 주십시오.
      df-kafka_2-1_ko
      • Quick links
        • AppMaster: 컨테이너 로그를 확인할 수 있는 URL. 앱 생성 시 모든 앱은 YARN 큐에 제출되며, YARN은 각 앱의 상세 정보를 확인할 수 있는 Web UI 제공.
        • kafka-manager: Kafka Manager의 URL
      • Connecting String
        • zookeeper.connect: Kafka 앱 생성 시 지정한 Zookeeper 앙상블 주소
      • 컴포넌트
        • broker: 메시지를 생산하는 프로듀서와 소비하는 컨슈머 사이에서 메시지를 저장, 전달함.
        • kafka-manager: broker 모니터링, 토픽(Topic) 관리, 파티션 재분배 가능

    Kafka 앱 사용 환경 구성

    구동된 Kafka 앱을 사용하거나 개발하려면 먼저 앱 사용 환경을 구성해야 합니다. Dev 앱에서 Kafka 앱의 사용 환경을 구성하는 방법을 예시로 설명합니다.

    1. Kafka 앱의 패키지와 설정을 확인하려면 /home/forest/get-app-env.sh {appname} {install directory}와 같이 작성해 주십시오.

      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ mkdir kafka
      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ /home/forest/get-app-env.sh kafka ./kafka/
      
      [/home/forest/get-app-env.sh] Apptype: KAFKA-2.4.0[/home/forest/get-app-env.sh] Download install-client script for KAFKA-2.4.0
      [/home/forest/get-app-env.sh] Install client on ./kafka/
      current kafka: .yarn/services/kafka/components/v1
      
      --2021-05-12 17:00:14--  http://dist.kr.df.naverncp.com/repos/release/kafka/kafka_2.12-2.4.0.tgz
      Resolving dist.kr.df.naverncp.com (dist.kr.df.naverncp.com)... 10.213.208.69
      Connecting to dist.kr.df.naverncp.com (dist.kr.df.naverncp.com)|10.213.208.69|:80... connected.
      HTTP request sent, awaiting response... 200 OK
      Length: 62283588 (59M) [application/octet-stream]
      Saving to: ‘./kafka//kafka_2.12-2.4.0.tgz’
      
      100%[============================================>] 62,283,588  --.-K/s   in 0.1s
      
      2021-05-12 17:00:14 (459 MB/s) - ‘./kafka//kafka_2.12-2.4.0.tgz’ saved [62283588/62283588]
      
      Kafka Client has been installed on ./kafka//kafka_2.12-2.4.0
      
    2. 설치 경로에서 다음과 같이 producer.properties, consumer.properties 를 확인해 주십시오.

      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ cat ./kafka/kafka_2.12-2.4.0/config/producer.properties
      #Generated by Apache Slider
      #Wed May 12 16:48:59 KST 2021
      bootstrap.servers=broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092
      compression.type=none
      
      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ cat ./kafka/kafka_2.12-2.4.0/config/consumer.properties
      #Generated by Apache Slider
      #Wed May 12 16:48:59 KST 2021
      bootstrap.servers=broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092
      group.id=test-consumer-group
      
    3. kafka-topic.sh을 이용해 'test'라는 토픽을 생성해 주십시오.
      kafka-topics.sh --bootstrap-server {bootstrap servers} --create --topic {topic name} --partitions {number of partitions} 와 같이 작성합니다.

      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ kafka/kafka_2.12-2.4.0/bin/kafka-topics.sh --bootstrap-server broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092 --create --topic test --partitions 6
      [test01@shell-0.dev.test01.kr.df.naverncp.com ~][df]$ kafka/kafka_2.12-2.4.0/bin/kafka-topics.sh --bootstrap-server broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092 --describe --topic test
      Topic: test     PartitionCount: 6       ReplicationFactor: 3    Configs: retention.bytes=50000000000
              Topic: test     Partition: 0    Leader: 1       Replicas: 1,0,2 Isr: 1,0,2
              Topic: test     Partition: 1    Leader: 0       Replicas: 0,2,1 Isr: 0,2,1
              Topic: test     Partition: 2    Leader: 2       Replicas: 2,1,0 Isr: 2,1,0
              Topic: test     Partition: 3    Leader: 1       Replicas: 1,2,0 Isr: 1,2,0
              Topic: test     Partition: 4    Leader: 0       Replicas: 0,1,2 Isr: 0,1,2
              Topic: test     Partition: 5    Leader: 2       Replicas: 2,0,1 Isr: 2,0,1
      
    4. kafka-console-producer.shkafka-console-consumer.sh를 사용해 produce/consume 하는 예시입니다.

      [test01@shell-0.dev-1.test01.kr.df.naverncp.com ~][df]$ ./kafka/kafka_2.12-2.4.0/bin/kafka-console-producer.sh --broker-list broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092 --topic test
      >test1
      >test2
      >test3
      >test4                   
      >>^C
      [test01@shell-0.dev-1.test01.kr.df.naverncp.com ~][df]$ ./kafka/kafka_2.12-2.4.0/bin/kafka-console-consumer.sh --bootstrap-server broker-0.kafka.test01.kr.df.naverncp.com\:9092,broker-1.kafka.test01.kr.df.naverncp.com\:9092,broker-2.kafka.test01.kr.df.naverncp.com\:9092 --topic test --from-beginning 
      test2
      test4
      test3
      test1
      

    Kafka Manager 사용

    Kafka Manager를 이용해 broker 모니터링, 토픽 관리, 파티션 재분배 등을 수행할 수 있습니다.

    Kafka Manager를 사용하는 방법에 대해 설명합니다.

    1. 네이버 클라우드 플랫폼의 콘솔에서 Services > Big Data & Analytics > Data Forest 메뉴를 차례대로 클릭해 주십시오.
    2. 좌측의 Data Forest > Apps 메뉴를 클릭해 주십시오.
    3. 앱을 소유한 계정을 선택하고 앱을 클릭해 주십시오.
    4. 앱 상세 정보에서 Quick linkskafka-manager URL로 접속해 주십시오.
    5. 로그인 화면이 나타나면 사용자 이름(Data Forest 계정)와 비밀번호 (Data Forest 계정)를 입력하여 로그인해 주십시오.
    6. [Add Cluster] 버튼을 클릭해 주십시오.
    7. Kafka 클러스터를 추가해 주십시오.
      • Cluster Name: 앱 이름
      • Cluster Zookeeper Hosts: 콘솔 Kafka 앱 상세 정보 내 zookeeper.connect
    8. 클러스터 정보를 확인해 주십시오.
      df-kafka_05_vpc_ko

    Kafka broker 변경

    하나의 broker가 적은 데이터를 유지하도록 운영하는 것을 권고합니다. 즉, 하나의 Kafka 앱에서 여러 토픽을 다루는 것보다 하나의 Kafka 앱마다 하나의 토픽을 다루는 것이 안정적입니다. 또한 토픽의 데이터가 얼마나 늘어날지 예측이 어렵다면 처음부터 파티션을 잘게 나누고 상황에 따라 broker의 개수를 조절하는 방식으로 운영하는 것이 좋습니다.

    broker의 개수를 변경하는 방법은 다음과 같습니다.

    1. 네이버 클라우드 플랫폼의 콘솔에서 Products & Services > Big Data & Analytics > Data Forest > App 메뉴를 차례대로 클릭해 주십시오.
    2. 계정을 선택하고 앱을 선택한 후 [Flex] 버튼을 클릭해 주십시오.
    3. Flex 변경 창이 나타나면 broker 개수를 수정하고 [수정] 버튼을 클릭해 주십시오.

    df-kafka_brokerC_vpc_ko

    참고
    • broker 개수를 늘린 후에 토픽을 추가하면 증가된 broker를 포함하여 파티션이 분배됩니다. 단, 기존에 존재하는 토픽의 파티션을 자동으로 재할당하지 않으므로 기존의 토픽은 사용자가 직접 kafka-manager에서 파티션을 재할당해야 합니다.
    • broker 개수를 줄일 경우 COMPONENT_ID가 큰 것부터 중지됩니다. broker가 10개인 경우 broker-9, broker-8, broker-7… 순으로 제외됩니다.
    주의

    제외될 broker의 파티션들을 미리 다른 broker에 재할당해야 장애 발생 및 데이터 유실을 막을 수 있습니다.

    Kafka 앱 사용 시 주의 사항

    로컬 디스크 용량 및 운영 방식

    데이터는 Data Forest 클러스터 각 노드의 로컬 디스크에 저장됩니다. 단, 노드 당 디스크의 용량이 300GB 정도로 제한되어 있습니다.
    가능하면 하나의 broker가 적은 데이터를 유지하도록 운영하는 것을 추천합니다. 즉, 하나의 Kafka 앱에서 여러 토픽을 다루는 것보다는 하나의 Kafka 앱마다 하나의 토픽을 다루는 것이 안정적입니다. 또한 어떤 토픽의 데이터가 얼마나 늘어날지 예측이 어렵다면, 처음부터 파티션을 잘게 나누고 상황에 따라 broker의 개수를 조절하는 방식으로 운영하는 것이 좋습니다.

    주의

    대용량이 필요한 경우에는 longlived_localdisk 큐(서비스용)를 사용하거나 대용량의 노드로 구성된 전용 큐를 마련하여 Kafka 앱을 구동해 주십시오.

    노드 장애

    Kafka 앱은 하나의 물리적인 노드에 하나의 broker만 구동합니다. 따라서 replication factor가 3(기본값)인 경우, 한 대 또는 두 대의 노드 장애에도 데이터 유실이 발생하지 않습니다.

    데이터 보존

    Kafka 앱의 데이터는 Data Forest의 로컬 파일 시스템에 저장되며, 사용자가 앱을 중지(stop)하거나 다른 문제로 인해 앱이 종료되더라도 데이터가 삭제되지 않습니다. 중지된 앱을 사용자가 제거(destroy) 하는 경우에만 데이터를 삭제합니다.

    중지된 앱을 다시 시작(start)하면 기존에 구동되었던 노드에 구동되므로 기존 데이터가 복구됩니다. 하지만 해당 노드의 리소스를 다른 작업이 점유하고 있거나 노드가 장애로 제외되는 상황이 있을 수 있습니다. 이런 경우 1시간이 지나면 앱이 기존 노드에서 구동되는 것을 포기하고 다른 노드에 구동됩니다. 따라서 그 시간 동안 구동되지 않는 broker의 데이터는 유실될 수 있습니다.

    Zookeeper 노드 정리

    앱을 삭제(destroy)할 경우 Kafka 앱이 사용하던 Zookeeper 경로 zookeeper.connect는 삭제하는 것을 권고합니다. 만약 삭제하지 않고 동일한 이름의 앱을 다시 생성(create)할 경우 문제가 발생할 수 있습니다.


    이 문서가 도움이 되었습니까?

    What's Next
    Changing your password will log you out immediately. Use the new password to log back in.
    First name must have atleast 2 characters. Numbers and special characters are not allowed.
    Last name must have atleast 1 characters. Numbers and special characters are not allowed.
    Enter a valid email
    Enter a valid password
    Your profile has been successfully updated.