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 감각적신사
,

Orchestration tools

Tools 2017. 2. 1. 22:49

Configuration management and Orchestration tools


원문
참고

  1. Ansible

    • 장점:
      • SSH 기반이므로 원격 노드에 에이전트를 설치할 필요가 없다.
      • YAML 기반의 설정 파일로 학습에 용이하다.
      • 간단 명료한 Playbook 구조이다.
      • 작업을 위해 변수를 등록할 수 있는 기능지원.
      • 훨씬 간소화 된 코드 기반 의 툴이다.
    • 단점:
      • DSL(Domain-Specific Language) 을 통해 로직을 수행하여 학습이 필요하다.
      • 입력, 출력 및 구성 파일의 형식간에 일관성 없다.
      • 기본 기능까지도 변수 등록이 필요하다.
      • Playbook 의 변수의 값을 확인하는 가독성이 떨어진다.
    • 가격:
      • free open source version -
      • web ui 툴인 Ansible Tower 는 100 노드 이상시 $5,000/year 비용 발생
  2. Chef

    • 장점:
      • 풍부한 모듈 및 구성 레시피 모음.
      • 코드 중심 접근 방식을 사용하면 구성에 대한 제어 및 유연성이 향상된다.
      • Git을 중심으로 강력한 버전 제어 기능을 제공한다.
      • ‘Knife’도구 (워크 스테이션에서 에이전트를 배포하기 위해 SSH를 사용함)는 설치 용이하다.
    • 단점:
      • Ruby 및 절차적 코딩 이 필요하여 진입장벽이 있다.
      • 단순한 도구가 아니기 때문에 대규모 코드 기반과 복잡한 환경이 발생한다.
      • 푸시 기능 미지원.
    • 가격:
      • free open source version
      • standard plans: $6/node/month
      • premium plans: $6.75/node/month
  3. Fabric

    • 장점:
      • 모든 언어로 배포가 가능하다. (시스템 아키텍처에 의존하지 않고 오히려 OS 및 패키지 관리자 의존적임)
      • 간단하고 쉽게 배포 가능하다.
      • 스크립트 기반으로 SSH와 광범위하게 통합 가능하다.
    • 단점:
      • 푸시 모델을 사용하므로 연속 배치 모델에 적합하지 않다.
      • Python 을 실행해야하므로 환경에 최소한 Python이 있어야합니다.
    • 가격:
      • 무료
  4. Puppet

    • 장점:
      • Puppet Labs를 통해 잘 구성된 지원 커뮤니티.
      • 가장 성숙한 인터페이스를 갖추고 거의 모든 OS에서 실행된다.
      • 간단한 설치 및 초기 설정.
      • 강력한 보고 기능.
    • 단점:
      • 고급 작업을 위해서는 Ruby 기반 CLI 사용해야 한다.
      • Puppet의 맞춤형 DSL을 사용을 권장한다. (순수한 Ruby 버전에 대한 지원 축소)
    • 가격:
      • free open source version
      • paid commercial enterprise version: $112/node/year


'Tools' 카테고리의 다른 글

ansible 기초-2 (playbook 작성 및 활용)  (0) 2017.05.02
ansible 기초-1  (0) 2017.04.24
jmeter 설치 및 사용  (0) 2016.08.01
Posted by 감각적신사
,

비트 연산

알고리즘 관련 2017. 1. 13. 08:29

비트 연산


  1. 참고

  2. bit

    • 1자리수의 2진숫자(0 또는 1)를 뜻하는 binary digit의 약어
    • 2진수 1자리수에 상당하는 데이터량을 나타내는 정보의 단위
    • byte 는 비트가 여러 개 모인 것으로, 8 bit 가 1 byte 이다
  3. 비트 연산자

          // 논리곱
         int a = 170, b = 245;
         // a   = 1 0 1 0 1 0 1 0
         // b   = 1 1 1 1 0 1 0 1
         // a&b = 1 0 1 0 0 0 0 0
    
         System.out.print("a&b: ");
         System.out.println(a&b); // a&b: 160
    
         // 논리합
         a = 170; b = 245;
         // a   = 1 0 1 0 1 0 1 0
         // b   = 1 1 1 1 0 1 0 1
         // a|b = 1 1 1 1 1 1 1 1
    
         System.out.print("a|b: ");
         System.out.println(a|b); // a|b: 255
    
         // 배타적 논리합
         a = 170; b = 245;
         // a   = 1 0 1 0 1 0 1 0
         // b   = 1 1 1 1 0 1 0 1
         // a^b = 0 1 0 1 1 1 1 1
    
         System.out.print("a^b: ");
         System.out.println(a^b); // a^b: 95
    
         // 1의 보수 표현
         a = 170;
         // a   = 1 0 1 0 1 0 1 0
         // ~a  = 0 1 0 1 0 1 0 1
         System.out.print("~a: ");
         System.out.println(~a); // ~a: -171
    
  4. 시프트 연산자

         // 왼쪽 시프트 연산자 <<
         /**
          *
          10110010
          1011001000
          11001000
          왼쪽으로 두칸 밀면서, 비게 되는 오른쪽 두칸은 0 으로 채운다.
          그런데, 문제는 왼쪽으로 밀면서 기존의 크기를 넘어서기 때문에 왼쪽으로 넘어선 2개의 비트는 삭제된다.
          따라서, 10110010 을 왼쪽으로 밀면 왼쪽 두개 비트인 10 은 삭제되고, 오른쪽의 2개 비트는 0으로 채워져
          결과값은 11001000 이 된다.
          */
             int c = 178;
             System.out.println("before << : "+ c); // before << : 178
             c = c << 2;
             System.out.println(" after << : "+ c); //  after << : 712
    
         // 오른쪽 시프트 연산자 >>
         /**
          *
          10110010
          1110110010
          11101100
          오른쪽으로 2비트 이동한후, 비게되는 왼쪽의 2개비트는 1로 채워지고, 오른쪽에서 2비트 넘어간 부분은 삭제된다.
          따라서, 10110010 을 오른쪽으로 2비트 시프트하면, 11101100 이 된다.
          그런데, 주의할점은, 오른쪽으로 밀면서 왼쪽에 비게되는 비트부분이 무조건 1 로 채워지는 것이 아니라,
          밀기전의 최초 첫째자리 값과 동일한 값으로 채워진다는 것이다.
          여기에서는 밀기전의 첫째자리값이 1 이었으므로, 1 로 채워진 것이다.
          */
             c = 178;
             System.out.println("before >> : "+ c); // before >> : 178
             c = c >> 2;
             System.out.println(" after >> : "+ c); //  after >> :  44
    
         // 논리 오른쪽 시프트 연산자 >>>
         /**
          *
         10110010
         0010110010
         으로 되는 것으로, 역시 오른쪽으로 밀려난 2개 비트 10 은 삭제되고, 비게되는 왼쪽 2비트는 무조건 0으로 채워진다.
         따라서 10110010 을 오른쪽으로 논리 시프트 하면, 00101100 이 된다.
          */
             c = 178;
             System.out.println("before >>> : "+ c); // before >>> : 178
             c = c >>> 2;
             System.out.println(" after >>> : "+ c); //  after >>> :  44
    
  5. 비트 연산 의 활용

    • G.771 코덱 커스터마이징
    • 대칭형 암호화: ^ 를 두번 연속 사용하면 원래의 값이 나온다 는 성질을 이용


Posted by 감각적신사
,