'BigData/Kafka'에 해당되는 글 4건

  1. 2017.05.29 kafka 동작에 필요한 명령어
  2. 2017.03.16 kafka 모니터링 도구
  3. 2017.02.22 Kafka Multi Cluster broker 구성하기
  4. 2017.02.16 Kafka 소개

kafka 동작에 필요한 명령어


  1. 토픽 관련

    • 토픽 리스팅
        $ ./bin/kafka-topics.sh --zookeeper localhost:2181 --list
      
    • 토픽 생성
        $ ./bin/kafka-topics.sh --create --zookeeper localhost:2181 --replication-factor 3 --partitions 10 --topic test
      
    • 토픽 삭제
        $ ./bin/kafka-topics.sh --zookeeper localhost:2181 --delete --topic test
      
    • 토픽 재분배
      • partition 이 클수록 토픽 처리가 좋다?
        • 파티션이 클수록 throughput 이 증가한다
        • 그러나 Open File Handles, Unavailability 도 함께 증가한다
      • partition - replica 계수의 관계
        • 더 나은 로드 밸런싱을 위해, replica 이상의 partition 을 유지해야 한다
        • 복제 매커니즘
          • 브로커 목록과 파티션 목록을 정렬한다.
          • n 개의 브로커가 있는 경우 i 번째 파티션을 (i mod n) 번째 브로커에 할당한다.
          • 이 파티션의 첫 번째 복제본이 할당 된 브로커에 상주하며이 파티션의 기본 복제본(leader)이라고힌다.
          • 브로커가 다운되면 부하가 하나의 브로커가 아닌 모든 살아남은 브로커에게 균등하게 분산되도록 다른 복제본을 배치하려고 한다.
          • 이를 달성하기 위해 브로커 i에 m 개의 파티션이 할당되어 있다고 가정합니다.
          • 파티션 k의 j 번째 복제본은 브로커 (i + j + k) mod n에 할당됩니다.
          • Zookeeper에 ach 파티션에 대한 복제본 할당에 대한 정보를 저장합니다.
      • 명령어
        $ ./bin/kafka-reassign-partitions.sh --zookeeper localhost:2181 --execute --reassignment-json-file b.json
        $ cat b.json
          {
              "version": 1,
              "partitions": [{
                  "topic": "sample-topic",
                  "partition": 1,
                  "replicas": [1,2,3]
              },
              {
                  "topic": "sample-topic",
                  "partition": 2,
                  "replicas": [2,3,4]
              },
              {
                  "topic": "sample-topic",
                  "partition": 3,
                  "replicas": [3,4,5]
              },
              {
                  "topic": "sample-topic",
                  "partition": 4,
                  "replicas": [4,5,1]
              },
              {
                  "topic": "sample-topic",
                  "partition": 5,
                  "replicas": [5,1,2]
              }]
          }
        
    • 파티션 변경
        $ ./bin/kafka-topics.sh --alter --partitions 10 --topic {토픽명} --zookeeper localhost:2181
      
  2. 복제 관련 상태를 확인하기

    • “isr” is the set of “in-sync” replicas
    • isr 복제현황
        $ ./bin/kafka-topics.sh --describe --zookeeper localhost:2181
        Topic:__consumer_offsets        PartitionCount:200      ReplicationFactor:3     Configs:segment.bytes=104857600,cleanup.policy=compact
        Topic: __consumer_offsets       Partition: 0    Leader: 4       Replicas: 4,5,1 Isr: 1,5,4
        Topic: __consumer_offsets       Partition: 1    Leader: 5       Replicas: 5,1,2 Isr: 1,2,5
        Topic: __consumer_offsets       Partition: 2    Leader: 1       Replicas: 1,2,3 Isr: 1,2,3
        Topic: __consumer_offsets       Partition: 3    Leader: 2       Replicas: 2,3,4 Isr: 2,3,4
        Topic: __consumer_offsets       Partition: 4    Leader: 3       Replicas: 3,4,5 Isr: 5,4,3
        Topic: __consumer_offsets       Partition: 5    Leader: 4       Replicas: 4,1,2 Isr: 1,4,2
        Topic: __consumer_offsets       Partition: 6    Leader: 5       Replicas: 5,2,3 Isr: 2,5,3
      
    • 강제 리더 선정
        $ ./bin/kafka-preferred-replica-election.sh --zookeeper localhost:2181
      
  3. consumer 처리 확인

    • consumer group 별 처리량 확인(deprecated 명령어 0.8 대에만 사용가능):

            $ ./bin/kafka-consumer-offset-checker.sh --zookeeper localhost:2181 --group group_name
        Group           Topic                          Pid Offset          logSize         Lag             Owner
        group_name      test_topic                      0   28696375242     28710228588     13853346        group_name_consumer001-1494565379967-138e5755-0
        group_name      test_topic                      1   32507090475     32525260714     18170239        group_name_consumer001-1494565379967-427a12a1-0
        group_name      test_topic                      2   22142323        37202882        15060559        group_name_consumer001-1494565379967-6017c0a1-0
        group_name      test_topic                      3   29872001299     29887377264     15375965        group_name_consumer001-1494565379967-be0b8719-0
        group_name      test_topic                      4   28412645478     28426057279     13411801        group_name_consumer002-1494565379967-fc2942ba-0
        group_name      test_topic                      5   28165720144     28178485586     12765442        group_name_consumer00-1494565918010-3f468782-0
      
        # Offset: 처리된
        # Lag: 남은
        # logSize: total size = Offset + Lag
      
        ex) 토픽 유입량 대비 처리정도를 판단하고 싶을 때
            $ ./bin/kafka-consumer-offset-checker.sh --zookeeper localhost:2181 --group group_name  | grep -v "Group" | awk '{ topic=$2; topicLogSize[topic]+=$5; topicOffSetSum[topic]+=$4}END{for(x in topicLogSize) print x": "topicOffSetSum[x]/topicLogSize[x]*100}'


'BigData > Kafka' 카테고리의 다른 글

kafka 모니터링 도구  (0) 2017.03.16
Kafka Multi Cluster broker 구성하기  (0) 2017.02.22
Kafka 소개  (0) 2017.02.16
Posted by 감각적신사
,


kafka 모니터링 도구


  1. Kafka Offset Monitor (오픈소스 기반의 Web UI)

    • 홈페이지
    • 실행:
        $ java -cp KafkaOffsetMonitor-assembly-0.2.1.jar com.quantifind.kafka.offsetapp.OffsetGetterWeb --zk zk-server1,zk-server2 --port 8080 --refresh 10.seconds --retain 2.days
      
    • 모니터링: http://설치호스트IP:설치포트

    • 모니터링 주요항목
      • Consumer 위주의 모니터링
      • topic 에 대한 모니터링
      • zookeeper 의 클러스터링
    • 한계(사견)
      • 시스템 항목에 대한 모니터링 항목의 부재
      • Producer 대응의 부재
      • active consumer list 호출 방식을 찾지 못했다..
  2. Linkedin Kafka-monitor (오픈소스 기반의 Web UI)

    • 홈페이지
    • 실행:
        $ ./bin/single-cluster-monitor.sh --topic test --broker-list localhost:9092 --zookeeper localhost:2181
      
    • 모니터링: http://설치호스트IP:8000/index.html (default port 8000)

    • 모니터링 주요항목
      • Producer 위주의 모니터링
      • 저장된 record 에 대한 replica, partitioning, 지연 등 에 대한 모니터링
    • 한계(사견)
      • 시스템 항목에 대한 모니터링 항목의 부재
      • Consumer 대응의 부재
  3. Datadog (상용서비스 Web UI)

    • 홈페이지
    • 동작:
      • 카프카 인스턴스에 개별 agent 설치
      • agent 가 datadog 으로 정보를 전달해주는 방식으로 위 두개의 open source 와 다르다
    • 모니터링:

    • 모니터링 주요항목
      • kafka.yaml 항목을 통한 대부분의 kafka 정보 처리 가능
      • metric 항목들 metric
    • 한계(사견)
      • 무료로 사용시, 카프카 모니터링 항목이 datadog 에 저장 된다
      • 제한적 환경에서는 많은 방화벽 이슈가 있을 수 있다
  4. JMX 를 이용한 직접 모니터링


※ jmx 를 이용한 직접 모니터링이 가장 좋은 방식으로 생각되었지만 jar 호출과 명령어 호출에 사용되는 시스템 리소스가 있으므로 잘 판단하여 사용해야 할 것 같다

'BigData > Kafka' 카테고리의 다른 글

kafka 동작에 필요한 명령어  (0) 2017.05.29
Kafka Multi Cluster broker 구성하기  (0) 2017.02.22
Kafka 소개  (0) 2017.02.16
Posted by 감각적신사
,

kafka 설치 및 설정


  1. 참고

  2. 다운로드 및 압축 해제

  3. multi broker cluster 설정 및 실행

    • zookeeper.properties

        clientPort=2180   # default
        dataDir=/kafka/zookeeper/data # myid 라는 파일을 생성해주는 경로가 된다 broker.id 값을 입력해야한다
      
        # add here more servers if you want
        # server.1=kafka01:2888:3888
        server.1=0.0.0.0:2888:3888 # 본인 에 대해서는 0.0.0.0 으로 해줘야 한다
        server.2=kafka02:2888:3888
        server.3=kafka03:2888:3888
      
        # 필요하다 근데 왜? 
        initLimit=5
        syncLimit=2
      
    • server.properties
        broker.id=1       # 반드시 0 번 부터 시작할 필요는 없다
        port=9092
        host.name=kafka01 # 각자 본인 host 입력
        num.partitions=3
        zookeeper.connect=kafka01:2180,kafka02:2180,kafka03:2180
      
    • 실행

        # zookeeper 실행
        $ cd $KAFKA_HOME
        $ bin/zookeeper-server-start config/zookeeper.properties &
      
        # kafka 실행
        $ cd $KAFKA_HOME
        $ bin/kafka-server-start.sh config/server.properties &
      
  4. topic 생성과 확인

    • 생성
        $ cd $KAFKA_HOME/bin
        $ ./kafka-topics.sh --create --zookeeper kafka01:2181 --replication-factor 3 --partitions 3 --topic {topic_name}
      


    • 리스트
        $ cd $KAFKA_HOME/bin
        $ ./kafka-topics.sh --list --zookeeper kafka01:2181
      

    • 확인
        $ cd $KAFKA_HOME/bin
        $ ./kafka-topics.sh --describe --zookeeper kafka01:2181 --topic {topic_name}
      


'BigData > Kafka' 카테고리의 다른 글

kafka 동작에 필요한 명령어  (0) 2017.05.29
kafka 모니터링 도구  (0) 2017.03.16
Kafka 소개  (0) 2017.02.16
Posted by 감각적신사
,

Kafka 소개

BigData/Kafka 2017. 2. 16. 23:42


Apache Kafka


참고

  1. 소개

    • 아파치 카프카
    • 분산 메시징 시스템 으로 대용량의 실시간 로그처리 에 용이하다고 한다
  2. 기본 구성 요소 및 동작

    • 발행-구독(publish-subscribe) 모델을 기반으로 동작
    • 확장성, 고가용성을 고려한 Cluster 구성
      • producer: 특정 topic의 메시지를 생성한 뒤 해당 메시지를 broker에 전달
      • broker: Apache ZooKeeper 에 의한 분산처리 를 통해 topic을 기준으로 메시지를 관리
        • broker들이 클러스터로 구성되어 동작하도록 설계
        • broker가 1개 밖에 없을 때에도 클러스터 로써 동작
      • consumer: 해당 topic을 구독하는 consumer들이 메시지를 수집 및 처리
  3. Topic 과 Partition

    • Kafka의 topic은 partition 이라는 단위로 클러스터의 각 서버들에 분산되어 저장
  4. 기존 메시징 시스템과의 차이점

    • 메시지를 파일 시스템에 저장
      • 데이터 영속성 보장(별도의 설정이 필요하지 않음)
      • 많은 메시지가 쌓여있어도 성능 이슈가 적다
      • 실시간 / batch 작업이 각각 용이하다
    • producer - broker
      • AMQP 프로토콜, JMS API 이 아닌 단순 TCP 기반의 프로토콜로 오버헤드 감소
      • 다수의 메시지를 batch형태로 broker에게 한 번에 전달할 수 있다 == TCP/IP 라운드트립 횟수를 줄일 수 있다
    • broker - consumer
      • 기존 방식: broker의 push 에 의한 메시지 전달
      • kafka 방식: consumer 의 pull 에 의한 메시지 전달
      • consumer 의 처리능력에 따라 메시지를 전달 받기 때문에 성능적으로 우수할 수 있다


'BigData > Kafka' 카테고리의 다른 글

kafka 동작에 필요한 명령어  (0) 2017.05.29
kafka 모니터링 도구  (0) 2017.03.16
Kafka Multi Cluster broker 구성하기  (0) 2017.02.22
Posted by 감각적신사
,