2017-09-11 3 views
0

현재 Golang 버전에 간단한 Kinesis 클라이언트 라이브러리 (KCL)를 작성 중입니다. 내 간단한 KCL을 위해 원하는 기능 중 하나는 여러 레코드 프로세서와 EC2 인스턴스에 분산 된 샤드를로드하는 것입니다. 예를 들어 별도의 EC2 인스턴스에서 실행되는 두 개의 레코드 프로세서와 네 개의 키네시스 조각이 있습니다. 로드 균형 조정 기능을 사용하면 각 레코드 프로세서가 두 개의 Kinesis 샤드을 처리 할 수 ​​있습니다.여러 레코드 프로세서에서 키네시스 조각을 균형 잡는 방법은 무엇입니까?

나는 자바 KCL이 이것을 구현했지만 라이브러리에서 구현을 찾을 수 없다는 것을 읽었다. 내 질문은 Golang에서이 기능을 어떻게 구현할 것인가? 고맙습니다.

당신이 가지고있는 또 다른 옵션이 있습니다 : 당신이 당신의 자신의 클라이언트를 쓰기 시작하기 전에 이미이 작업을 수행 한 사람들이있는 것처럼

답변

0

KCL은 이미 부하가 당신을 위해 균형 않습니다. 여기

(이 그냥 기본입니다 명심 아마존은 논리 개선에 따라 변경 될 수 있습니다) 오늘을 어떻게 작동하는지에 대한 기본적인 설명입니다 :

  • 을 할 때 근로자 (여러 파편을 처리 할 수 ​​있음) 시작되면 작업자가 소유 한 샤드 (필요한 경우 해당 데이터베이스 작성)에 대한 중앙 DynamoDB 데이터베이스를 검사합니다. 이것은 "리스 테이블"입니다.
    • A "임대"는 노동자와 노동자는 "하트 비트"에 대한 방출하지 않은 경우
    • 근로자는
    • 리스에 대한 만료되지 않은 임대를 소유 파편 기록 만료를 처리 할
    • 파편 사이의 관계입니다 이 만료되기 전에 임대 (일반적으로 몇 초마다이) -이 하트 비트는 본질적으로 DDB가 업데이트를 기록
  • 그것은 파편을 사용할 수있는 운동성 스트림을 확인하고 모든 임대가 만료 된 경우
  • 필요한 경우 테이블을 업데이트, 노동자 리스너의 소유권을 얻으려고합니다. 데이터베이스 레벨에서 샤드드를 키로 사용하고 거기서 일하는 사람을 쓰십시오.
  • 근로자가 시작하고 모든 파편이 이미 촬영 된 경우 "잔액"이 무엇인지 확인합니다. 불균형을 감지하면 (즉, "나는 파편 0 개를 소유하고 다른 일부 노동자는 10 개 파편을 소유하고 있습니다"), 는 "파편을 훔치는"프로토콜 - 오래된 노동자는 그 파편에 대한 처리를 중지하고, 새로운 노동자는

당신은 물론 GitHub의에 KCL의 소스 코드를 검사하는 것이 자유 롭다 시작합니다 https://github.com/awslabs/amazon-kinesis-client - 희망이 설명을 제공합니다 KCL을 이해하고 필요에 맞게 적용하는 방법에 대한 더 많은 컨텍스트.

관련 문제