3

MySQL에서 데이터를 추출하고 변환하여 거의 실시간으로 Redshift에로드하는 가장 효율적인 방법을 찾아 내려고합니다. 현재 우리는 하룻밤 ETL 프로세스 (Pentaho 사용)를 가지고 있으며 ~ 40 분이 남았고 거의 실시간 (미니 배치 1-5 분)으로 교체하려고합니다. MySQL에서 Redshift에 가까운 실시간 ETL

나는 AWS Kineses에 커넥터 MySQL의 바이너리 로그 (예 : http://maxwells-daemon.io를)에서 데이터 추출을위한 도구 몇 가지를 발견하고 나는 S3에 그것을 기록 COPY 명령 거기에서 변환 및 아파치 스파크 또는 AWS 람다와 데이터를 결합하고 작성할 계획 Redshift에.

누구든지이 유사 솔루션과 관련하여 제안이나 권장 사항이 있습니까? 미리 감사드립니다.

+0

당신은 redshift에 mysql 테이블의 정확한 사본을 만들고 redshift 안에 etl을 실행하는 것을 고려 했습니까? DMS를 사용하여 mysql-> redshift를 동기화 할 수 있습니다. DMS는 binlog를 사용하므로 효율적이고 최신 상태가 될 수 있습니다. –

답변

1

정말 MySQL로부터 오는 데이터에 어떤 변환이 필요한지, 그리고 여러분의 환경에 가장 적합한 언어와 프레임 워크가 무엇인지에 달려 있습니다. 다음은

는 Redshift에이

내가 고려할 실패에 이

  • 이 경우 데이터로드에서 데이터를 다시 로딩 메커니즘을 고려 S3
  • 내 제안

    1. 예를 들어, MySQL과 Redshift에 사이의 중간 저장을 추가하다 AWS Data Pipeline은 바로 사용할 수있는 템플릿, 재시도 메커니즘 및 내장 된 로깅 및 모니터링 기능을 갖추고 있기 때문에이를위한 것입니다.

      그것은 다음과 같을 수 있습니다 :

      MySQL을 -> S3 -> Redshift에 (준비) -> SQL -> Redshift에 (생산)

      MySQL을 -> S3

      이 데이터 파이프 라인은 "Incremental copy of RDS MySQL to S3"템플릿으로 시작됩니다.

      MySQL의 증분 데이터를 저장하는 S3 경로를 매개 변수화 할 수 있으므로 S3 접두어를 사용하여 시간 경과에 따라 해당 증분을 관리하는 것이 더 쉽습니다. S3의 데이터를 다시 사용하지 않을 경우 S3 Object Lifecycle Management를 사용하여 해당 객체를 정기적으로 삭제할 수 있습니다.

      그러나 S3의 데이터를 사용하면 AWS Athena로 쿼리하거나 QuickSight를 사용하여 시각화하거나 임시 액세스 또는 빙하 스토리지 클래스를 사용하여 저장 비용을 줄이거 나 추후 사용을 위해 보관할 수 있습니다.

      S3 -> Redshift에 사용 사례에 대한 (준비) 물론

      는, 그것은 Redshift에 가야한다, 그래서 AWS Redshift에 로더 람다하는 것이 좋습니다. 설정은 조금 복잡하지만 성공적으로 완료되면 0 번 행정에 매우 가깝습니다. this

      AWS Redshift Loader를 사용하면 데이터가 정의 된 S3 접두어에 도착할 때마다 Redshift 클러스터 (하나 이상)에로드되고 SNS에서 사용자 또는 일부 로깅 시스템에 알리도록 구성 할 수 있습니다. 로드하기 전에 x 파일을 기다리거나 y 분마다로드하는 등의 다른 옵션이 있습니다.

      또한 S3의 데이터 중 일부만을 테스트 또는 개발 환경으로 Redshift로로드해야 할 수도 있습니다. AWS Redshift Loader를 사용하면 특정 S3 프리픽스 만 정의 할 수 있습니다./data/2017/11을 사용하여 Redshift에로드하십시오.

      Redshift Loader를 사용하면 데이터를 비동기 적으로로드하므로 사소한 작업을 더 어렵게 만들고 프로세스를 제어하기가 더 쉽습니다. 이것은 귀하의 사건에 대한 문제 일 수 있습니다.

      Redshift에 대한 데이터로드가 실패하면 Redshfit Loader 명령 줄 도구를 사용하여 특정 개체를 Redshfit으로 다시로드합니다.

      Redshift에 (준비) -> Redshift에 (생산) Redshift에 당신이 Redshift에 테이블에 중복 행을 삽입 방지하는 메커니즘을 가지고해야 의미, 예를 고유 키에 대한 참조 무결성을 적용하지 않는

      주 . 중복에 대해 걱정하지 않는다면 이는 중요하지 않습니다. 데이터가 이미 Redshift에 있습니다.

      왜 중요한가요? 소스, 즉 MySQL에서 검색된 데이터가 이미 Redshift에있는 경우 취해야하는 조치를 알아야합니다. 그것을 덮어 쓰거나 그냥 무시하십시오.

      Redshift 자체에서 수행하면 고유 한 열을 사용하여 새 행과 기존 행을 비교하고 삭제 및 삽입 또는 업데이트 만하는 것이 쉽습니다. Redshfit 외부에서 작업하는 것은 아마도 이미 Redshift에서 사용할 수있는 고유 한 키를 추적하여 비교하는 것입니다. 어디에? 언제 업데이트할까요? 방법? 어쩌면 당신은 이미 그것을위한 해결책을 가지고있을 것입니다.

      이전 단계에서 Redshift (준비)에 데이터를 삽입합니다. 프로덕션 테이블로 이동할 때 데이터 무결성을 보장하기 위해 병합을 수행해야합니다. AWS에서는 following 기술을 사용하여 Redsift에서 데이터를 병합하는 것이 좋습니다.

      그렇다면 SQL을 사용하여 변환을 수행하면 관리 할 구성 요소가 줄어들지 않으십니까?

      SQL을 사용하여 변환 작업을 정의하고 해당 SQL 스크립트를 S3에 저장하고 데이터 병합 스크립트와 함께 Redsshift 클러스터에서 실행하기 위해 SQLActivity에서 참조 할 수 있습니다.

      AWS Kinesis는 S3 기능에 대한 변환 및 저장을 고려하여 적합 할 수도 있습니다. 위에서 제기 한 요점 중 일부는 Kinesis 사용에도 적용됩니다.