- 질문
- Partition Key의 용도는 무엇인가?
- Shard란 무엇인가?
- SequenceNumber는 무엇인가?
기본 지식
- 실시간 분석 패턴
- 스트림 처리 (실시간)
- 마이크로-배치 (준 실시간)
- 일정 시간 데이터를 모아서 분석 (부정행위 식별 등)
Kinesis Streams
기본 지식
- SQS와 비슷하나 SQS와 달리 파티션키를 이용해 순서를 보장하고 샤드 확장을 통해 스케일링 가능함.
구성 요소 및 관계
- 생산자 (Producer)
- Kinesis Streams
- AWS 엔드포인트
- 가용 영역
- 샤드
- 소비자 (Consumer)
- 집계, 중복제거, 통계지표 추출, 슬라이딩 윈도우 분석, 머신러닝, ...
보존 기간
- 기본 24시간 데이터 저장
- 최대 7일까지 연장 가능
- 보존 기간 내에서는 여러번 재생 가능
파티션 키 선택
- 랜덤 키
- 단순 데이터 저장 관리용
- 소비자 쪽에서 알아서 처리해야 함.
- 직접 키 지정
- 핫샤드에 활용?
- 랜덤 키
- PutRecords
- 입력값
- Data
- PartitionKey
- StreamName
- 500개 레코드 지원
- 레코드당 1M, 전체 데이터에 대해 5M 제한
- 순서 보장 안됨
- 실패 시 재전송 처리는?
- 입력값
KPL
- 자동적으로 레코드 모아 전송
- 실패 레코드 재전송
- CloudWatch 메트릭 자동 제출
Kiness Agent
- 스탠드얼론 Java 어플리케이션임
- Flume, FLuntD
log4j appender
KCL?
- getRecords, getShardIterator
- 각 샤드마다 KCL로 작성된 Worker 동작
- Apache Spark, Storm 통합
- AWS Lambda 통합
-Kinesis Agent
- Kinesis 에이전트는 사전 구축된 Java 애플리케이션으로서, 데이터를 수집하여 전송 스트림으로 전송하는 간편한 방법을 제공합니다. 에이전트는 웹 서버, 로그 서버, 데이터베이스 서버 등과 같은 Linux 기반 서버 환경에 설치할 수 있습니다. 에이전트에서는 특정 파일을 모니터링하고 데이터를 전송 스트림으로 지속적으로 전송합니다. 자세한 내용은 에이전트로 작성하기를 참조하십시오.
-단일 전송 스트림은 현재 1개의 Amazon Redshift 클러스터 및 1개의 테이블로만 데이터를 전송할 수 있습니다. 여러 Redshift 클러스터 또는 테이블로 데이터를 전송하려면 여러 개의 전송 스트림을 생성하면 됩니다.
Amazon S3 버킷으로 데이터를 전송하는 데 실패하면, Amazon Kinesis Firehose에서 5초 간격으로 최대 24시간 동안 데이터 전송을 재시도합니다. 24시간의 최대 보존 기간이 지나도 문제가 지속되면, Amazon Kinesis Firehose에서 데이터를 취소합니다.
Redshift 클러스터로 데이터를 전송하는 데 실패하면, Amazon Kinesis Firehose에서 5분 간격으로 최대 60분 동안 데이터 전송을 재시도합니다. 60분이 지나면, Amazon Kinesis Firehose는 복사할 준비가 된 현재 S3 객체 배치를 건너뛰고 다음 배치로 진행합니다. 건너뛴 객체에 대한 정보는 오류 폴더에 매니페스트 파일로서 S3 버킷에 전송되고, 수동 백필에 사용할 수 있습니다. 매니페스트 파일을 사용해 데이터를 수동으로 복사하는 방법에 대한 정보는 Using a Manifest to Specify Data Files를 참조하십시오.
Kinesis Firehose에서는 데이터 전송에 최소 한 번이라는 의미 체계를 사용합니다. 드문 경우지만 예를 들어 데이터 전송 시도 중에 요청 제한 시간이 초과하는 경우, Firehose에서 전송을 재시도하고 이전 요청도 결국 수행되면, 데이터 중복이 발생합니다.
Kinesis Firehose
- 기능
- Buffering
- Transformation
- Compression
- Encryption
Destination
- S3
- Redshift
- Firehose uses the above COPY command to load data from your S3 bucket to your Redshift cluster.
- Elasticsearch
Redshift 연동
- JSON을 사용하려면 반드시 COPY 옵션을 추가해야한다.
- https://forums.aws.amazon.com/thread.jspa?threadID=217468
- format JSON 'auto' STATUPDATE OFF TRUNCATECOLUMNS TIMEFORMAT AS 'epochmillisecs'
- timeformat 'YYYY-MM-DD HH:MI:SS.SSS'
- format JSON 'auto' timeformat 'YYYY-MM-DD HH:MI:SS'
- 컬럼명과 json 항목명이 동일해야한다.
- Redshift는 컬럼명이 모두 소문자이다.
- 따라서 JSON 속성명이 카멜케이스면 매칭을 못 한다.
- JSON을 사용하려면 반드시 COPY 옵션을 추가해야한다.
Kinesis Analytics
- ANSI 2008 SQL 표준 구현
Tips
- 스트리밍 SQL에서 열 이름은 따옴표로 지정되어 대/소문자를 구분한다.
메모
CREATE OR REPLACE STREAM "TEMPSTREAM" ("timestamp" BIGINT NOT NULL, "currency" VARCHAR(64), "value" VARCHAR(64), "seq" VARCHAR(128)); CREATE OR REPLACE PUMP "SAMPLEPUMP" AS INSERT INTO "TEMPSTREAM" ("timestamp", "currency", "value", "seq") SELECT STREAM "time_at", "curr", "val", "SEQUENCE_NUMBER" FROM "SOURCE_SQL_STREAM_001" where "val" = '2';