Amazon MSK에서 Lambda 사용 - AWS Lambda

Amazon MSK에서 Lambda 사용

참고

Lambda 함수 이외의 대상으로 데이터를 전송하거나 데이터를 전송하기 전에 데이터를 보강하려는 경우 Amazon EventBridge 파이프를 참조하세요.

Amazon Managed Streaming for Apache Kafka(Amazon MSK)는 Apache Kafka를 사용하여 스트리밍 데이터를 처리하는 애플리케이션의 구축 및 실행을 위해 사용할 수 있는 완전관리형 서비스입니다. Amazon MSK는 Kafka를 실행하는 클러스터의 설정, 크기 조정, 관리를 간소화합니다. 또한 Amazon MSK는 여러 Availability Zones에 맞게, 그리고 AWS Identity and Access Management(IAM)를 통한 보안을 위해 애플리케이션을 쉽게 구성할 수 있도록 도와줍니다. Amazon MSK는 Kafka의 여러 오픈 소스 버전을 지원합니다.

이벤트 소스로서 Amazon MSK는 Amazon Simple Queue Service(Amazon SQS) 또는 Amazon Kinesis를 사용하는 것과 유사하게 작동합니다. Lambda는 이벤트 소스의 새 메시지를 내부적으로 폴링한 다음 대상 Lambda 함수를 동기적으로 간접 호출합니다. Lambda는 메시지를 배치 단위로 읽고 이를 함수에 이벤트 페이로드로 제공합니다. 최대 배치 크기를 구성할 수 있습니다. 기본값은 메시지 100건입니다. 자세한 내용은 일괄 처리 동작 단원을 참조하십시오.

기본적으로 Lambda는 Amazon MSK 이벤트 소스 매핑에 대해 이벤트 폴러 수를 자동으로 조정합니다. Amazon MSK 이벤트 소스 매핑의 처리량을 최적화하려면 프로비저닝된 모드를 구성합니다. 프로비저닝된 모드에서는 이벤트 소스 매핑에 할당된 최소 및 최대 이벤트 폴러 수를 정의할 수 있습니다. 그러면 예기치 않은 메시지 급증을 처리하는 이벤트 소스 매핑의 역량이 향상될 수 있습니다. 자세한 내용은 프로비저닝된 모드를 참조하세요.

주의

Lambda 이벤트 소스 매핑은 각 이벤트를 한 번 이상 처리하므로 레코드가 중복될 수 있습니다. 중복 이벤트와 관련된 잠재적 문제를 방지하려면 함수 코드를 멱등성으로 만드는 것이 좋습니다. 자세한 내용은 AWS 지식 센터의 멱등성 Lambda 함수를 만들려면 어떻게 해야 합니까?를 참조하세요.

Amazon MSK를 이벤트 소스로 구성하는 방법의 예는 AWS 컴퓨팅 블로그에서 Using Amazon MSK as an event source for AWS Lambda를 참조하세요. 전체 자습서는 Amazon MSK Labs에서 Amazon MSK Lambda 통합을 참조하세요.

예제 이벤트

Lambda는 함수를 간접 호출할 때 이벤트 파라미터의 메시지 배치를 보냅니다. 이벤트 페이로드에는 메시지 배열이 포함됩니다. 각 배열 항목에는 Amazon MSK 주제 및 파티션 식별자에 대한 세부 정보와 함께 타임스탬프 및 base64로 인코딩된 메시지가 포함됩니다.

{ "eventSource":"aws:kafka", "eventSourceArn":"arn:aws:kafka:us-east-1:123456789012:cluster/vpc-2priv-2pub/751d2973-a626-431c-9d4e-d7975eb44dd7-2", "bootstrapServers":"b-2.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092,b-1.demo-cluster-1.a1bcde.c1.kafka.us-east-1.amazonaws.com:9092", "records":{ "mytopic-0":[ { "topic":"mytopic", "partition":0, "offset":15, "timestamp":1545084650987, "timestampType":"CREATE_TIME", "key":"abcDEFghiJKLmnoPQRstuVWXyz1234==", "value":"SGVsbG8sIHRoaXMgaXMgYSB0ZXN0Lg==", "headers":[ { "headerKey":[ 104, 101, 97, 100, 101, 114, 86, 97, 108, 117, 101 ] } ] } ] } }