Kafka 할당량은 다중 테넌트 Kafka 클러스터에 필수적입니다. 이는 제대로 작동하지 않는 애플리케이션이 클러스터 리소스를 과도하게 소비함으로써 Kafka 클러스터 성능이 부정적인 영향을 받는 것을 방지합니다. 또한 이를 통해 중앙 스트리밍 데이터 플랫폼을 멀티 테넌트 플랫폼으로 운영하고 여러 비즈니스 라인에 걸쳐 다운스트림 및 업스트림 애플리케이션에서 사용할 수 있습니다. Kafka는 두 가지 유형의 할당량을 지원합니다. 네트워크 대역폭 할당량 및 요청 비율 할당량. 네트워크 대역폭 할당량은 초당 바이트 단위로 측정되는 Kafka 클러스터의 각 개별 브로커에서 클라이언트 애플리케이션이 생성하고 소비할 수 있는 데이터 양과 같은 바이트 속도 임계값을 정의합니다. 요청 속도 할당량은 각 개별 브로커가 클라이언트 응용 프로그램 요청을 처리하는 데 소요되는 시간 비율을 제한합니다. 구성에 따라 특정 사용자, 특정 클라이언트 ID 또는 둘 다에 대해 Kafka 할당량을 설정할 수 있습니다.
In 파트 1 두 부분으로 구성된 이 시리즈에서 우리는 Kafka 할당량을 적용하는 방법에 대한 개념을 논의했습니다. Apache Kafka 용 Amazon Managed Streaming (Amazon MSK) 클러스터 사용 중 AWS 자격 증명 및 액세스 관리 (IAM) 액세스 제어.
이 게시물에서는 IAM 액세스 제어를 사용하고 샘플 클라이언트 애플리케이션을 통해 테스트하는 동안 MSK 클러스터에서 Kafka 할당량을 설정하는 단계별 구현을 안내합니다.
솔루션 개요
우리가 처음 소개한 다음 그림은 파트 1에서는 Kafka 클라이언트 애플리케이션(ProducerApp-1
, ConsumerApp-1
및 ConsumerApp-2
) 입장 Topic-B
쓰기 및 읽기 IAM 역할을 가정하여 MSK 클러스터에서 각 생산자 및 소비자 클라이언트 애플리케이션에는 바이트/초 단위로 생성하거나 소비할 수 있는 데이터 양을 결정하는 할당량이 있습니다. 그만큼 ProducerApp-1
할당량을 사용하면 브로커당 최대 1024바이트/초를 생성할 수 있습니다. 마찬가지로, ConsumerApp-1
및 ConsumerApp-2
할당량을 통해 브로커당 각각 초당 5120바이트와 1024바이트를 사용할 수 있습니다. 다음은 아키텍처 다이어그램에 표시된 흐름에 대한 간략한 설명입니다.
- P1 -
ProducerApp-1
(그것을 통해ProducerApp-1-Role
IAM 역할)이Topic-B-Write-Role
메시지를 보낼 IAM 역할Topic-B
- P2 -와
Topic-B-Write-Role
IAM 역할 가정,ProducerApp-1
메시지를 보내기 시작합니다Topic-B
- C1 -
ConsumerApp-1
(그것을 통해ConsumerApp-1-Role
IAM 역할) 및ConsumerApp-2
(그것을 통해ConsumerApp-2-Role
IAM 역할)Topic-B-Read-Role
메시지를 읽을 IAM 역할Topic-B
- C2 -와
Topic-B-Read-Role
IAM 역할 가정,ConsumerApp-1
및ConsumerApp-2
에서 메시지 소비 시작Topic-B
이 게시물에서는 AWS 명령 줄 인터페이스 (AWS CLI), AWS 클라우드 포메이션 템플릿과 AWS 관리 콘솔 AWS 리소스 프로비저닝 및 수정에 대한 비용은 AWS 계정으로 청구됩니다.
대략적인 단계는 다음과 같습니다.
- IAM 액세스 제어를 통해 MSK 클러스터를 프로비저닝하고 아마존 엘라스틱 컴퓨트 클라우드 (Amazon EC2) 클라이언트 애플리케이션용 인스턴스.
- 만들기
Topic-B
MSK 클러스터에서. - 액세스할 클라이언트 애플리케이션에 대한 IAM 역할 생성
Topic-B
. - 할당량을 설정하지 않고 생산자 및 소비자 애플리케이션을 실행합니다.
- 클라이언트 애플리케이션에 대한 생산 및 소비 할당량을 구성합니다.
- 할당량을 설정한 후 애플리케이션을 다시 실행하십시오.
사전 조건
꼭 읽어보시길 추천드립니다 파트 1 계속하기 전에 이 시리즈의 내용을 읽어보세요. 시작하려면 다음이 필요합니다.
- 이 게시물에서 데모 계정으로 지칭할 AWS 계정은 계정 ID가 다음과 같다고 가정합니다.
1111 1111 1111
- 데모 계정에서 AWS 리소스를 생성, 삭제 및 수정할 수 있는 권한
IAM 액세스 제어 및 EC2 인스턴스로 MSK 클러스터 프로비저닝
이 단계에는 데모 계정의 VPC에서 IAM 액세스 제어를 사용하여 MSK 클러스터를 프로비저닝하는 작업이 포함됩니다. 또한 2개의 ECXNUMX 인스턴스를 생성하여 MSK 클러스터와 호스트 생산자 및 소비자 클라이언트 애플리케이션의 구성을 변경합니다.
CloudFormation 스택 배포
- 클론 GitHub 저장소 CloudFormation 템플릿 파일과 샘플 클라이언트 애플리케이션을 다운로드하려면 다음을 수행하세요.
- AWS CloudFormation 콘솔에서 스택 탐색 창에서
- 왼쪽 메뉴에서 스택 생성.
- 럭셔리 템플릿 준비, 고르다 템플릿이 준비되었습니다.
- 럭셔리 템플릿 소스, 고르다 템플릿 파일 업로드.
- 업로드
cfn-msk-stack-1.yaml
에서 파일amazon-msk-kafka-quotas/cfn-templates
디렉터리를 선택한 다음 다음 보기. - 럭셔리 스택 이름, 입력
MSKStack
. - 매개변수를 기본값으로 두고 다음을 선택합니다. 다음 보기.
- 하단으로 스크롤하세요. 스택 옵션 구성 페이지를 선택하고 다음 보기 계속합니다.
- 하단으로 스크롤하세요. 검토 페이지에서 확인란을 선택하세요. CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다., 선택 문의하기.
스택이 완료되는 데 약 30분이 소요됩니다. 스택이 성공적으로 생성되면 다음 리소스가 생성됩니다.
- XNUMX개의 프라이빗 서브넷과 XNUMX개의 퍼블릭 서브넷이 있는 VPC
- IAM 액세스 제어가 활성화된 XNUMX개의 브로커가 있는 MSK 클러스터
- EC2 인스턴스는 다음과 같습니다.
MSKAdminInstance
MSK 클러스터 설정 수정과 AWS 리소스 생성 및 수정 - EC2 인스턴스
ProducerApp-1
,ConsumerApp-1
및ConsumerApp-2
, 각 클라이언트 애플리케이션마다 하나씩 - 아키텍처 다이어그램에 표시된 대로 클라이언트 애플리케이션을 호스팅하는 각 EC2 인스턴스에 대한 별도의 IAM 역할
- 스택에서 출력 탭, 참고하세요
MSKClusterArn
값.
MSK 클러스터에서 주제 생성
만들다 Topic-B
MSK 클러스터에서 다음 단계를 완료합니다.
- Amazon EC2 콘솔에서 실행 중인 EC2 인스턴스 목록으로 이동합니다.
- 선택
MSKAdminInstance
EC2 인스턴스를 선택하고 연결하기. - 에 세션 관리자 탭에서 연결하기.
- 브라우저에서 열리는 새 탭에서 다음 명령을 실행하십시오.
- MSK 클러스터 브로커 IAM 엔드포인트를 가리키도록 환경 변수를 설정합니다.
- 의 가치에 주목하세요.
BOOTSTRAP_BROKERS_IAM
. - 다음 Kafka CLI 명령을 실행하여 생성합니다.
Topic-B
MSK 클러스터에서:
MSK 클러스터는 IAM 액세스 제어로 프로비저닝되므로 옵션은 --command-config
포인트 config_iam.properties
에는 IAM 액세스 제어에 필요한 속성이 포함되어 있습니다. MSKStack
CloudFormation 스택.
Kafka CLI 명령을 실행할 때 다음 경고가 나타날 수 있지만 무시해도 됩니다.
- 확인하려면
Topic-B
생성되었으면 모든 주제를 나열하십시오.
클라이언트 애플리케이션이 주제 B에 액세스할 수 있도록 IAM 역할 생성
이 단계에는 생성이 포함됩니다. Topic-B-Write-Role
및 Topic-B-Read-Role
아키텍처 다이어그램에 표시된 대로 Topic-B-Write-Role
쓰기 작업을 활성화합니다. Topic-B
, 그리고 다음과 같이 가정할 수 있습니다. ProducerApp-1
. 비슷한 방식으로, ConsumerApp-1
및 ConsumerApp-2
짐작할 수 있다 Topic-B-Read-Role
읽기 작업을 수행하려면 Topic-B
. 읽기 작업을 수행하려면 Topic-B
, ConsumerApp-1
및 ConsumerApp-2
또한 기간 동안 지정된 소비자 그룹에 속해야 합니다. MSKStack
후속 단계에서 스택 업데이트.
다음 단계에 따라 역할을 만듭니다.
- AWS CloudFormation 콘솔에서 스택 탐색 창에서
- 선택
MSKStack
선택하고 업데이트. - 럭셔리 템플릿 준비에서 현재 템플릿 바꾸기를 선택합니다.
- 럭셔리 템플릿 소스, 고르다 템플릿 파일 업로드.
- 업로드
cfn-msk-stack-2.yaml
에서 파일amazon-msk-kafka-quotas/cfn-templates
디렉터리를 선택한 다음 다음 보기. - 다음 추가 스택 매개변수를 제공합니다.
-
- 럭셔리 주제 B ARN, 들어가다
Topic-B
RNA.
- 럭셔리 주제 B ARN, 들어가다
ARN은 다음과 같은 형식이어야 합니다. arn:aws:kafka:region:account-id:topic/msk-cluster-name/msk-cluster-uuid/Topic-B
. 앞서 기록한 MSK 클러스터 ARN의 클러스터 이름과 클러스터 UUID를 사용하고 AWS 리전을 제공합니다. 자세한 내용은 다음을 참조하세요. Amazon MSK에 대한 IAM 액세스 제어.
-
- 럭셔리 ConsumerApp-1 소비자 그룹 이름, 입력
ConsumerApp-1
소비자 그룹 ARN.
- 럭셔리 ConsumerApp-1 소비자 그룹 이름, 입력
다음과 같은 형식이어야 합니다. arn:aws:kafka:region:account-id:group/msk-cluster-name/msk-cluster-uuid/consumer-group-name
-
- 럭셔리 ConsumerApp-2 소비자 그룹 이름, 입력
ConsumerApp-2
소비자 그룹 ARN.
- 럭셔리 ConsumerApp-2 소비자 그룹 이름, 입력
이전 ARN과 유사한 형식을 사용합니다.
- 왼쪽 메뉴에서 다음 보기 계속합니다.
- 하단으로 스크롤하세요. 스택 구성 옵션 페이지를 선택하고 다음 보기 계속합니다.
- 하단으로 스크롤하세요. 검토 페이지에서 확인란을 선택하세요. CloudFormation이 IAM 리소스를 생성할 수 있음을 인정합니다., 선택 스택 업데이트.
스택이 업데이트되는 데 약 3분 정도 걸립니다. 스택이 성공적으로 업데이트되면 다음 리소스가 생성됩니다.
- 주제 B-쓰기-역할 – 쓰기 작업을 수행할 권한이 있는 IAM 역할
Topic-B
. 신뢰 정책은 다음을 허용합니다.ProducerApp-1-Role
IAM 역할을 맡습니다. - 주제 B-읽기-역할 – 읽기 작업을 수행할 권한이 있는 IAM 역할
Topic-B
. 신뢰 정책은 다음을 허용합니다.ConsumerApp-1-Role
및ConsumerApp-2-Role
IAM 역할이 이를 가정합니다. 뿐만 아니라,ConsumerApp-1
및ConsumerApp-2
읽기 작업을 수행하기 위해 스택을 업데이트할 때 지정한 소비자 그룹에도 속해야 합니다.Topic-B
.
- 스택에서 출력 탭, 참고하세요
TopicBReadRoleARN
및TopicBWriteRoleARN
values.
할당량을 설정하지 않고 생산자 및 소비자 애플리케이션 실행
여기, 우리는 달린다 ProducerApp-1
, ConsumerApp-1
및 ConsumerApp-2
할당량을 설정하지 않고. 이전 단계에서 다음이 필요합니다. BOOTSTRAP_BROKERS_IAM
가치 Topic-B-Write-Role
ARN 및 Topic-B-Read-Role
ARN. 클라이언트 애플리케이션의 소스 코드와 해당 패키지 버전은 다음에서 사용할 수 있습니다. GitHub 저장소.
ConsumerApp-1 애플리케이션 실행
를 실행하려면 ConsumerApp-1
신청하려면 다음 단계를 완료하세요.
- Amazon EC2 콘솔에서 다음을 선택합니다.
ConsumerApp-1
EC2 인스턴스를 선택하고 연결하기. - 에 세션 관리자 탭에서 연결하기.
- 브라우저에서 열리는 새 탭에서 다음 명령을 실행하십시오.
- 실행
ConsumerApp-1
메시지 소비를 시작하는 애플리케이션Topic-B
:
당신을 찾을 수 있습니다 소스 코드 참고용으로 GitHub를 참조하세요. 명령줄 매개변수 세부정보는 다음과 같습니다.
- –부트스트랩 서버 – MSK 클러스터 부트스트랩 브로커 IAM 엔드포인트.
- – 역할 가정 -
Topic-B-Read-Role
IAM 역할 ARN. 이 역할을 맡는다면,ConsumerApp-1
주제의 메시지를 읽습니다. - -지역 – 사용 중인 지역.
- –주제 이름 – 주제 이름
ConsumerApp-1
메시지를 읽습니다. 기본값은Topic-B
. - –소비자 그룹 – 소비자 그룹 이름
ConsumerApp-1
, 스택 업데이트 중에 지정된 대로. - –역할 세션 이름 -
ConsumerApp-1
가정한다Topic-B-Read-Role
를 사용하여 AWS 보안 토큰 서비스 (AWS STS) SDK.ConsumerApp-1
호출할 때 이 역할 세션 이름을 사용합니다.assumeRole
기능. - –클라이언트 ID – 클라이언트 ID
ConsumerApp-1
. - –인쇄-소비자-할당량-메트릭 – 클라이언트 메트릭을 터미널에 인쇄해야 하는지 여부를 나타내는 플래그
ConsumerApp-1
. - –cw-차원-이름 - 아마존 클라우드 워치 클라이언트 제한 측정항목을 게시하는 데 사용되는 차원 이름
ConsumerApp-1
. - –cw-차원-값 – 클라이언트 조절 지표를 게시하는 데 사용되는 CloudWatch 차원 값
ConsumerApp-1
. - –cw-네임스페이스 – 네임스페이스
ConsumerApp-1
조절을 모니터링하기 위해 CloudWatch 지표를 게시합니다.
- 나머지 매개변수가 만족스러우면 다음 명령을 사용하여 변경하세요.
--assume-role-arn
및--region
귀하의 환경에 따라:
XNUMXD덴탈의 fetch-throttle-time-avg
및 fetch-throttle-time-max
클라이언트 메트릭은 0.0으로 표시되어야 합니다. 이는 제한이 발생하지 않았음을 나타냅니다. ConsumerApp-1
. 다음에 대한 소비 할당량을 설정하지 않았다는 점을 기억하세요. ConsumerApp-1
아직. 잠시 동안 실행해 보세요.
ConsumerApp-2 애플리케이션 실행
를 실행하려면 ConsumerApp-2
신청하려면 다음 단계를 완료하세요.
- Amazon EC2 콘솔에서 다음을 선택합니다.
ConsumerApp-2
EC2 인스턴스를 선택하고 연결하기. - 에 세션 관리자 탭에서 연결하기.
- 브라우저에서 열리는 새 탭에서 다음 명령을 실행하십시오.
- 실행
ConsumerApp-2
메시지 소비를 시작하는 애플리케이션Topic-B
:
코드에는 다음과 유사한 명령줄 매개변수 세부정보가 있습니다. ConsumerApp-1
다음을 제외하고 이전에 논의한 내용은 다음과 같습니다.
- –소비자 그룹 – 소비자 그룹 이름
ConsumerApp-2
, 스택 업데이트 중에 지정된 대로. - –역할 세션 이름 -
ConsumerApp-2
가정한다Topic-B-Read-Role
AWS STS SDK를 사용합니다.ConsumerApp-2
호출할 때 이 역할 세션 이름을 사용합니다.assumeRole
기능. - –클라이언트 ID – 클라이언트 ID
ConsumerApp-2
.
- 나머지 매개변수가 만족스러우면 다음 명령을 사용하여 변경하세요.
--assume-role-arn
및--region
귀하의 환경에 따라:
XNUMXD덴탈의 fetch-throttle-time-avg
및 fetch-throttle-time-max
클라이언트 메트릭은 0.0으로 표시되어야 합니다. 이는 제한이 발생하지 않았음을 나타냅니다. ConsumerApp-2
. 다음에 대한 소비 할당량을 설정하지 않았다는 점을 기억하세요. ConsumerApp-2
아직. 잠시 동안 실행해 보세요.
ProducerApp-1 애플리케이션 실행
를 실행하려면 ProducerApp-1
신청하려면 다음 단계를 완료하세요.
- Amazon EC2 콘솔에서 다음을 선택합니다.
ProducerApp-1
EC2 인스턴스를 선택하고 연결하기. - 에 세션 관리자 탭에서 연결하기.
- 브라우저에서 열리는 새 탭에서 다음 명령을 실행하십시오.
- 실행
ProducerApp-1
메시지 보내기를 시작하는 응용 프로그램Topic-B
:
당신을 찾을 수 있습니다 소스 코드 참고용으로 GitHub를 참조하세요. 명령줄 매개변수 세부정보는 다음과 같습니다.
- –부트스트랩 서버 – MSK 클러스터 부트스트랩 브로커 IAM 엔드포인트.
- – 역할 가정 -
Topic-B-Write-Role
IAM 역할 ARN. 이 역할을 맡는다면,ProducerApp-1
주제에 메시지를 작성합니다. - –주제 이름 -
ProducerApp-1
이 주제로 메시지를 보냅니다. 기본값은Topic-B
. - -지역 – 사용 중인 AWS 리전.
- –번호-메시지 – 메시지 수
ProducerApp-1
응용 프로그램이 주제로 전송됩니다. - –역할 세션 이름 -
ProducerApp-1
가정한다Topic-B-Write-Role
AWS STS SDK를 사용합니다.ProducerApp-1
호출할 때 이 역할 세션 이름을 사용합니다.assumeRole
기능. - –클라이언트 ID – 클라이언트 ID
ProducerApp-1
. - – 생산자 유형 -
ProducerApp-1
다음 중 하나를 실행할 수 있습니다. 동 기적으로 or 비동기 적으로. 옵션은 동기화 or 비동기. - –인쇄물 생산자-할당량 측정항목 – 클라이언트 메트릭을 터미널에 인쇄해야 하는지 여부를 나타내는 플래그 ProducerApp-1.
- –cw-차원-이름 – 클라이언트 조절 지표를 게시하는 데 사용되는 CloudWatch 차원 이름 ProducerApp-1.
- –cw-차원-값 – 클라이언트 조절 지표를 게시하는 데 사용되는 CloudWatch 차원 값 ProducerApp-1.
- –cw-네임스페이스 – 네임스페이스 ProducerApp-1 조절을 모니터링하기 위해 CloudWatch 지표를 게시합니다.
- 나머지 매개변수가 만족스러우면 다음 명령을 사용하여 변경하세요.
--assume-role-arn
및--region
귀하의 환경에 따라. 동기식 Kafka 생산자를 실행하려면 다음 옵션을 사용합니다.--producer-type sync
:
또는 --producer-type async
비동기 생산자를 실행합니다. 자세한 내용은 다음을 참조하세요. 비동기 전송.
XNUMXD덴탈의 produce-throttle-time-avg
및 produce-throttle-time-max
클라이언트 메트릭은 0.0으로 표시되어야 합니다. 이는 제한이 발생하지 않았음을 나타냅니다. ProducerApp-1
. 우리는 생산 할당량을 설정하지 않았습니다. ProducerApp-1
아직. 확인해보세요 ConsumerApp-1
및 ConsumerApp-2
메시지를 소비하고 제한되지 않았음을 확인할 수 있습니다. 다음을 눌러 소비자 및 생산자 클라이언트 애플리케이션을 중지합니다. Ctrl + C 해당 브라우저 탭에서.
클라이언트 애플리케이션에 대한 생산 및 소비 할당량 설정
이제 할당량 없이 생산자 및 소비자 애플리케이션을 실행했으므로 할당량을 설정하고 다시 실행합니다.
열기 세션 관리자 터미널 MSKAdminInstance
앞서 설명한 대로 EC2 인스턴스를 실행하고 다음 명령을 실행하여 MSK 클러스터에 있는 브로커 중 하나의 기본 구성을 찾습니다. MSK 클러스터는 기본 Kafka 할당량 구성으로 프로비저닝됩니다.
다음 스크린 샷은 Broker-1
기본값 quota.consumer.default
및 quota.producer.default
.
ProducerApp-1 할당량 구성
이 섹션의 모든 명령에 있는 자리 표시자를 계정에 해당하는 값으로 바꿉니다.
앞에서 설명한 아키텍처 다이어그램에 따라 다음을 설정합니다. ProducerApp-1
할당량을 1024바이트/초로 생성합니다. 을 위한 <ProducerApp-1 Client Id>
및 <ProducerApp-1 Role Session>
, 실행하는 동안 사용한 것과 동일한 값을 사용하는지 확인하십시오. ProducerApp-1
더 일찍 (producerapp-1-client-id
및 producerapp-1-role-session
, 각각):
다음을 확인하십시오. ProducerApp-1
다음 명령을 사용하여 할당량을 생성합니다.
당신은 제거 할 수 있습니다 ProducerApp-1
다음 명령을 사용하여 할당량을 생성하지만 명령을 실행하지 마십시오 다음에는 할당량을 테스트하겠습니다.
ConsumerApp-1 할당량 구성
이 섹션의 모든 명령에 있는 자리 표시자를 계정에 해당하는 값으로 바꿉니다.
에 대해 소비 할당량을 5120바이트/초로 설정해 보겠습니다. ConsumerApp-1
. 용 <ConsumerApp-1 Client Id>
및 <ConsumerApp-1 Role Session>
, 실행하는 동안 사용한 것과 동일한 값을 사용하는지 확인하십시오. ConsumerApp-1
더 일찍 (consumerapp-1-client-id
및 consumerapp-1-role-session
, 각각):
kafka-configs.sh --bootstrap-server $BOOTSTRAP_BROKERS_IAM --command-config config_iam.properties --alter --add-config 'consumer_byte_rate=5120' --entity-type clients --entity-name <ConsumerApp-1 Client Id> --entity-type users --entity-name arn:aws:sts::<AWS Account Id>:assumed-role/MSKStack-TopicBReadRole-xxxxxxxxxxx/<ConsumerApp-1 Role Session>
다음을 확인하십시오. ConsumerApp-1
다음 명령을 사용하여 할당량을 소비합니다.
당신은 제거 할 수 있습니다 ConsumerApp-1
다음 명령을 사용하여 할당량을 소비하지만 명령을 실행하지 마십시오 다음에는 할당량을 테스트하겠습니다.
ConsumerApp-2 할당량 구성
이 섹션의 모든 명령에 있는 자리 표시자를 계정에 해당하는 값으로 바꿉니다.
에 대해 소비 할당량을 1024바이트/초로 설정해 보겠습니다. ConsumerApp-2
. 용 <ConsumerApp-2 Client Id>
및 <ConsumerApp-2 Role Session>
, 실행하는 동안 사용한 것과 동일한 값을 사용하는지 확인하십시오. ConsumerApp-2
더 일찍 (consumerapp-2-client-id
및 consumerapp-2-role-session
, 각각):
다음을 확인하십시오. ConsumerApp-2
다음 명령을 사용하여 할당량을 소비합니다.
와 같은 ConsumerApp-1
, 당신은 제거 할 수 있습니다 ConsumerApp-2
동일한 명령을 사용하여 할당량을 소비합니다. ConsumerApp-2
클라이언트 및 사용자 세부 정보.
할당량을 설정한 후 생산자 및 소비자 애플리케이션을 다시 실행합니다.
할당량의 효과를 확인하기 위해 애플리케이션을 다시 실행해 보겠습니다.
ProducerApp-1 다시 실행
재실행 ProducerApp-1
in 동기 이전에 사용한 것과 동일한 명령을 사용하여 모드를 실행합니다. 다음 스크린샷은 다음과 같은 경우를 보여줍니다. ProducerApp-1
브로커 중 하나에 대한 할당량에 도달하면 produce-throttle-time-avg
및 produce-throttle-time-max client
측정항목 값은 0.0보다 높습니다. 0.0보다 큰 값은 다음을 나타냅니다. ProducerApp-1
제한됩니다. 허용하다 ProducerApp-1
몇 초 동안 실행한 다음 다음을 사용하여 중지합니다. Ctrl + C.
또한 다음을 다시 실행하여 생산 할당량의 효과를 테스트할 수도 있습니다. ProducerApp-1
다시 안으로 비 동시성의 모드 (--producer-type async
). 동기 실행과 유사하게 다음 스크린샷은 다음과 같은 경우를 보여줍니다. ProducerApp-1
브로커 중 하나에 대한 할당량에 도달하면 produce-throttle-time-avg
및 produce-throttle-time-max
클라이언트 측정항목 값은 0.0보다 높습니다. 0.0보다 큰 값은 다음을 나타냅니다. ProducerApp-1
제한됩니다. 비동기 허용 ProducerApp-1
잠시 달리려고.
당신은 결국 TimeoutException
진술 org.apache.kafka.common.errors.TimeoutException: Expiring xxxxx record(s) for Topic-B-2:xxxxxxx ms has passed since batch creation
사용할 때 비 동시성의 생성자와 할당량으로 인해 브로커가 허용할 수 있는 것보다 더 큰 속도로 메시지를 보내는 경우 메시지는 먼저 클라이언트 응용 프로그램 메모리의 대기열에 추가됩니다. 메시지 전송 속도가 메시지 수락 속도를 계속 초과하면 클라이언트는 결국 버퍼 공간이 부족해지며 다음 오류가 발생합니다. Producer.send()
차단할 전화. Producer.send()
결국 던진다 TimeoutException
브로커가 생산자 애플리케이션을 따라잡을 수 있을 만큼 시간 초과 지연이 충분하지 않은 경우. 멈추다 ProducerApp-1
사용하여 Ctrl + C.
ConsumerApp-1 다시 실행
재실행 ConsumerApp-1
이전에 사용한 것과 동일한 명령을 사용합니다. 다음 스크린샷은 다음과 같은 경우를 보여줍니다. ConsumerApp-1
할당량에 도달하면 fetch-throttle-time-avg
및 fetch-throttle-time-max client
측정항목 값은 0.0보다 높습니다. 0.0보다 큰 값은 다음을 나타냅니다. ConsumerApp-1
제한됩니다.
허용 ConsumerApp-1
몇 초 동안 실행한 다음 다음을 사용하여 중지합니다. Ctrl + C.
ConsumerApp-2 다시 실행
재실행 ConsumerApp-2
이전에 사용한 것과 동일한 명령을 사용합니다. 마찬가지로, ConsumerApp-2
할당량에 도달하면 fetch-throttle-time-avg
및 fetch-throttle-time-max client
측정항목 값은 다음보다 높을 것입니다. 0.0. 위의 값 0.0 표시 ConsumerApp-2
제한됩니다. 허용하다 ConsumerApp-2
몇 초 동안 실행한 후 를 눌러 중지하려면 Ctrl + C.
Amazon CloudWatch의 클라이언트 할당량 지표
In 파트 1에서 클라이언트 메트릭은 Kafka 클러스터에 연결하는 클라이언트가 노출하는 메트릭이라고 설명했습니다. CloudWatch에서 클라이언트 지표를 살펴보겠습니다.
- CloudWatch 콘솔에서 다음을 선택합니다. 모든 측정 항목.
- $XNUMX Million 미만 사용자 정의 네임스페이스에서 클라이언트 애플리케이션을 실행하는 동안 제공한 네임스페이스를 선택합니다.
- 차원 이름을 선택하고
produce-throttle-time-max
,produce-throttle-time-avg
,fetch-throttle-time-max
및fetch-throttle-time-avg metrics
모든 응용 프로그램에 대해.
이러한 측정항목은 다음에 대한 제한 동작을 나타냅니다. ProducerApp-1
, ConsumerApp-1
및 ConsumerApp-2
이전 섹션의 할당량 구성으로 테스트된 애플리케이션입니다. 다음 스크린샷은 제한을 나타냅니다. ProducerApp-1
, ConsumerApp-1
및 ConsumerApp-2
네트워크 대역폭 할당량을 기반으로 합니다. ProducerApp-1
, ConsumerApp-1
및 ConsumerApp-2
애플리케이션은 해당 클라이언트 지표를 CloudWatch에 제공합니다. 당신은 찾을 수 있습니다 소스 코드 참고용으로 GitHub를 참조하세요.
보안 클라이언트 ID 및 역할 세션 이름
애플리케이션의 할당량을 사용하여 Kafka 할당량을 구성하는 방법에 대해 논의했습니다. 클라이언트 ID 그리고 인증 사용자 주요한. 클라이언트 애플리케이션이 IAM 인증이 활성화된 MSK 클러스터의 Kafka 주제에 액세스하기 위해 IAM 역할을 맡으면 인증됩니다. 사용자 주체는 다음 형식으로 표시됩니다. 자세한 내용은 다음을 참조하세요. IAM 식별자):
arn:aws:sts::111111111111:assumed-role/Topic-B-Write-Role/producerapp-1-role-session
그것은 포함 역할 세션 이름 (이 경우 producerapp-1-role-session
)는 AWS STS SDK를 통해 IAM 역할을 맡는 동안 클라이언트 애플리케이션에서 사용됩니다. 클라이언트 애플리케이션 소스 코드 참고하실 수 있습니다. 그만큼 클라이언트 ID 논리적 이름 문자열입니다(예: producerapp-1-client-id
) 애플리케이션 팀이 애플리케이션 코드에 구성한 것입니다. 따라서 응용 프로그램이 다음을 획득하면 다른 응용 프로그램을 가장할 수 있습니다. 클라이언트 ID 및 역할 세션 이름 다른 애플리케이션의 동일한 IAM 역할을 맡을 권한이 있는지 여부.
아키텍처 다이어그램에 표시된 것처럼, ConsumerApp-1
및 ConsumerApp-2
각각의 할당량이 할당된 두 개의 별도 클라이언트 응용 프로그램입니다. 둘 다 동일한 IAM 역할을 맡을 권한이 있기 때문에(Topic-B-Read-Role
) 데모 계정에서는 다음의 메시지를 소비할 수 있습니다. Topic-B
. 따라서 MSK 클러스터 브로커는 이를 기반으로 구별합니다. 클라이언트 ID 및 사용자 (각각의 내용을 포함 역할 세션 이름 값). 만약에 ConsumerApp-2
어떻게든 얻습니다 ConsumerApp-1
역할 세션 이름 및 클라이언트 ID, 가장할 수 있습니다. ConsumerApp-1
를 지정하여 ConsumerApp-1
역할 세션 이름 및 클라이언트 ID 애플리케이션 코드에서.
가정하자 ConsumerApp-1
사용 consumerapp-1-client-id
및 consumerapp-1-role-session
그것으로서 클라이언트 ID 및 역할 세션 이름, 각각. 따라서, ConsumerApp-1's
인증 된 사용자 교장은 다음과 같이 가정할 때 다음과 같이 나타납니다. Topic-B-Read-Role
IAM 역할:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
마찬가지로, ConsumerApp-2
사용 consumerapp-2-client-id
및 consumerapp-2-role-session
그것으로서 클라이언트 ID 및 역할 세션 이름, 각각. 따라서, ConsumerApp-2's
인증 된 사용자 교장은 다음과 같이 가정할 때 다음과 같이 나타납니다. Topic-B-Read-Role
IAM 역할:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-2-role-session
If ConsumerApp-2
얻다 ConsumerApp-1's
클라이언트 ID 및 역할 세션 이름 애플리케이션 코드에 이를 지정하면 MSK 클러스터 브로커는 이를 다음과 같이 처리합니다. ConsumerApp-1
그리고 그것의 보기 클라이언트 ID as consumerapp-1-client-id
, 그리고 인증된 사용자 다음과 같이 교장:
arn:aws:sts::<AWS Account Id>:assumed-role/Topic-B-Read-Role/consumerapp-1-role-session
이것은 허용 ConsumerApp-2
원래 할당량 할당에 따라 초당 5120바이트가 아닌 초당 최대 1024바이트의 속도로 MSK 클러스터의 데이터를 소비합니다. 따라서, ConsumerApp-1's
다음과 같은 경우 처리량이 부정적인 영향을 받습니다. ConsumerApp-2
동시에 실행됩니다.
향상된 아키텍처
소개하시면 됩니다 AWS 비밀 관리자 및 AWS 키 관리 서비스 (AWS KMS) 애플리케이션 보안을 위한 아키텍처' 클라이언트 ID 및 역할 세션 이름. 더 강력한 거버넌스를 제공하려면 애플리케이션의 클라이언트 ID와 역할 세션 이름을 Secrets Manager에 암호화된 비밀로 저장해야 합니다. 암호화된 비밀 및 KMS 고객 관리형 키(CMK)와 연결된 IAM 리소스 정책을 통해 애플리케이션은 해당 클라이언트 ID 및 역할 세션 이름에만 액세스하고 암호를 해독할 수 있습니다. 이러한 방식으로 애플리케이션은 서로의 클라이언트 ID 및 역할 세션 이름에 액세스하고 서로를 가장할 수 없습니다. 다음 이미지는 향상된 아키텍처를 보여줍니다.
업데이트된 흐름에는 다음 단계가 있습니다.
- P1 -
ProducerApp-1
그것의 검색client-id
및role-session-name
Secrets Manager의 비밀 - P2 -
ProducerApp-1
비밀을 구성합니다client-id
asCLIENT_ID_CONFIG
응용 프로그램 코드에서 가정합니다.Topic-B-Write-Role
(그것을 통해ProducerApp-1-Role
IAM 역할) 비밀을 전달하여role-session-name
AWS STS SDK에assumeRole
함수 호출 - P3 -와
Topic-B-Write-Role
IAM 역할 가정,ProducerApp-1
메시지를 보내기 시작합니다Topic-B
- C1 -
ConsumerApp-1
및ConsumerApp-2
각각의 검색client-id
및role-session-name
Secrets Manager의 비밀 - C2 -
ConsumerApp-1
및ConsumerApp-2
각자의 비밀을 구성하세요client-id
asCLIENT_ID_CONFIG
애플리케이션 코드에서Topic-B-Write-Role
(를 통해ConsumerApp-1-Role
및ConsumerApp-2-Role
IAM 역할 각각) 비밀을 전달하여role-session-name
AWS STS SDK에서assumeRole
함수 호출 - C3 -와
Topic-B-Read-Role
IAM 역할 가정,ConsumerApp-1
및ConsumerApp-2
에서 메시지 소비 시작Topic-B
에 대한 설명서를 참조하세요. AWS 비밀 관리자 및 AWS KMS 아키텍처에 어떻게 적용되는지 더 잘 이해합니다.
자원 정리
CloudFormation 콘솔로 이동하여 삭제합니다. MSKStack
스택. 이 게시물 중에 생성된 모든 리소스가 삭제됩니다.
결론
이 게시물에서는 Amazon MSK 할당량을 구성하는 자세한 단계를 다루고 샘플 클라이언트 애플리케이션을 통해 그 효과를 시연했습니다. 또한 클라이언트 메트릭을 사용하여 클라이언트 애플리케이션이 제한되었는지 확인하는 방법에 대해서도 논의했습니다. 또한 일반 텍스트 클라이언트 ID 및 역할 세션 이름과 관련된 잠재적인 문제를 강조했습니다. 제로 트러스트 아키텍처를 보장하려면 수정된 아키텍처 다이어그램에 따라 Secrets Manager 및 AWS KMS를 사용하여 Amazon MSK로 Kafka 할당량을 구현하는 것이 좋습니다.
수정된 아키텍처를 포함하여 이 게시물에 대한 피드백이나 질문이 있는 경우 언제든지 알려주세요. 이 게시물을 재미있게 읽으셨기를 바랍니다.
저자에 관하여
비카스 바자이 Amazon Web Services의 금융 서비스 솔루션 설계자 수석 관리자입니다. 금융 서비스 분야에서 XNUMX년 넘게 경험을 쌓고 디지털 기반 비즈니스와 협력한 그는 고객에게 제품 디자인, 기술 로드맵 및 애플리케이션 아키텍처에 대해 조언합니다.
- SEO 기반 콘텐츠 및 PR 배포. 오늘 증폭하십시오.
- EVM 금융. 탈중앙화 금융을 위한 통합 인터페이스. 여기에서 액세스하십시오.
- 퀀텀미디어그룹. IR/PR 증폭. 여기에서 액세스하십시오.
- PlatoAiStream. Web3 데이터 인텔리전스. 지식 증폭. 여기에서 액세스하십시오.
- 출처: https://aws.amazon.com/blogs/big-data/multi-tenancy-apache-kafka-clusters-in-amazon-msk-with-iam-access-control-and-kafka-quotas-part-2/
- :있다
- :이다
- :아니
- :어디
- $UP
- 1
- 10
- 11
- 30
- 7
- 70
- 8
- 9
- a
- 할 수 있는
- 소개
- 위의
- 수락
- 수락
- ACCESS
- 계정
- 인정
- 가로질러
- 더하다
- 또한
- 추가
- 또한
- 후
- 다시
- All
- 배당
- 할당
- 수
- 수
- 또한
- 아마존
- Amazon EC2
- Amazon Web Services
- an
- 및
- 다른
- 어떤
- 아파치
- 아파치 카프카
- 표시
- 어플리케이션
- 어플리케이션
- 대략
- 아키텍처
- 있군요
- AS
- 관련
- 꾸민
- At
- 인증 된
- 인증
- 가능
- AWS
- AWS 클라우드 포메이션
- 대역폭
- 기반으로
- BE
- 때문에
- 된
- 전에
- 존재
- 더 나은
- 차단
- 부트 스트랩
- 두
- 바닥
- 보물상자
- 브로커
- 브로커
- 브라우저
- 버퍼
- 사업
- 사업
- 비자 면제 프로그램에 해당하는 국가의 시민권을 가지고 있지만
- by
- 전화
- 라는
- 부름
- CAN
- 케이스
- CAT
- 잡아라
- 일으키는
- CD
- 중심적인
- 이전 단계로 돌아가기
- 변경
- 검사
- 왼쪽 메뉴에서
- 수업
- 클라이언트
- 클라이언트
- 클러스터
- 암호
- 공통의
- 완전한
- 계산
- 개념
- 구성
- 구성
- 연결
- 따라서
- 콘솔에서
- 소비
- 소비자
- 이 포함되어 있습니다
- 계속
- 계속
- 지속
- 제어
- 적용
- 만들
- 만든
- 만들기
- Current
- 고객
- 고객
- 데이터
- 데이터 플랫폼
- 수십 년
- 해독
- 태만
- 지연
- Rescale과 함께 비즈니스를 가속화하는 방법에 대해 알아보세요.
- 시연
- 의존
- 설명
- 기술 된
- 디자인
- 상세한
- 세부설명
- 결정
- 결정하다
- 외형 치수
- 논의 된
- 디스플레이
- 드러내다
- 선적 서류 비치
- 다운로드
- 두
- ...동안
- 마다
- 이전
- 에코
- 효과
- 중
- 가능
- 사용 가능
- 수
- 암호화
- 종점
- 억지로 시키다
- 강화
- 확인
- 엔터 버튼
- 환경
- 오류
- 에테르 (ETH)
- 있을뿐만 아니라
- 검토하다
- 예
- 넘다
- 외
- 경험
- 설명
- 설명
- 수출
- 드러난
- 피드백
- 를
- 그림
- 입양 부모로서의 귀하의 적합성을 결정하기 위해 미국 이민국에
- 파일
- 금융
- 금융 서비스
- Find
- 먼저,
- 맞게
- 흐름
- 수행원
- 다음
- 럭셔리
- 체재
- 사
- 에
- 기능
- 게다가
- 얻을
- 힘내
- GitHub의
- 통치
- 큰
- 그룹
- 여러 떼
- 행복한
- 있다
- he
- 듣다
- 고수준
- 강조
- 기대
- 주인
- 호스트
- 방법
- How To
- HTML
- HTTP
- HTTPS
- IAM
- ID
- 통합 인증
- 식별자
- if
- 설명하다
- 영상
- 영향
- 이행
- 구현
- in
- 포함
- 표시
- 표시
- 표시
- 개인
- 정보
- 예
- 완전한
- 으로
- 소개
- 소개
- Isn
- 발행물
- IT
- 그
- 자바
- JPG
- 카프카
- 키
- 알려진
- 제한
- 라인
- 라인
- 명부
- 논리
- 확인
- 관리
- 구축
- 매니저
- 최고
- XNUMX월..
- 측정
- 메모리
- 메시지
- 통계
- 분
- 모드
- 수정
- 모니터
- 배우기
- MS
- 많은
- 여러
- 절대로 필요한 것
- name
- 이름
- 이동
- 카테고리
- 필요
- 부정적으로
- 네트워크
- 신제품
- 다음 것
- 아니
- 유명한
- 알아채다..
- 번호
- 얻다
- 발생하는
- of
- on
- ONE
- 만
- 열립니다
- 운영
- 행정부
- 선택권
- 옵션
- or
- 주문
- 실물
- 기타
- 아웃
- 위에
- 포장하는
- 페이지
- 빵
- 매개 변수
- 매개 변수
- 부품
- 합격
- 통과
- 통로
- tỷ lệ phần trăm
- 수행
- 성능
- 허가
- 평문
- 플랫폼
- 플라톤
- 플라톤 데이터 인텔리전스
- 플라토데이터
- 포인트 적립
- 전철기
- 정책
- 정책
- 게시하다
- 가능성
- 키를 눌러
- 예방
- 너무 이른
- 이전에
- 교장
- 사설
- 처리
- 생산
- 제작자
- 프로덕트
- 제품 디자인
- 속성
- 제공
- 제공
- 공개
- 게시
- 문의
- 율
- 차라리
- 도달하다
- 읽기
- 읽기
- 권하다
- 추천
- 참조
- 지방
- 기억
- 제거
- 교체
- 저장소
- 대표되는
- 의뢰
- 요청
- 필수
- 의지
- 제품 자료
- 그
- 각기
- REST
- 로드맵
- 직위별
- 역할
- 달리기
- 달리는
- s
- 같은
- 만족
- 만족하다
- 스크린 샷
- SDK
- 둘째
- 초
- 비밀
- 섹션
- 안전해야합니다.
- 보안
- 보안 토큰
- 참조
- 보내다
- 전송
- 연장자
- 별도의
- 연속
- 서비스
- 세션
- 세트
- 설정
- 설정
- 영상을
- 표시
- 쇼
- 비슷한
- 비슷하게
- 이후
- 솔루션
- 출처
- 소스 코드
- 스페이스 버튼
- 구체적인
- 지정
- 스택
- 단계
- 스타트
- 시작
- 단계
- 단계
- 중지
- 저장
- 스트리밍
- 끈
- 강한
- 서브넷
- 후속의
- 성공적으로
- 이러한
- 충분한
- 공급
- 지원
- 받아
- 팀
- Technology
- 이 템플릿
- 템플릿
- 단말기
- test
- 테스트
- 지원
- 보다
- 그
- XNUMXD덴탈의
- 소스
- 그들의
- 그들
- 그때
- 따라서
- 그들
- 이
- 세
- 을 통하여
- 처리량
- 시간
- 에
- 토큰
- 화제
- 이상의 주제
- 치료
- 믿어
- 두
- 유형
- 유형
- 이해
- 업데이트
- 업데이트
- 업데이트
- 사용
- 익숙한
- 사용자
- 사용자
- 사용
- 사용
- 가치
- 마케팅은:
- 확인
- 를 통해
- 관측
- 였다
- 방법..
- we
- 웹
- 웹 서비스
- 잘
- 언제
- 여부
- 어느
- 동안
- 의지
- 과
- 없이
- 일하는
- 쓰다
- 아직
- 당신
- 너의
- 제퍼 넷