자체 관리형 Apache Kafka에서 Lambda 사용 - AWS Lambda

자체 관리형 Apache Kafka에서 Lambda 사용

참고

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

Lambda는 이벤트 소스Apache Kafka를 지원합니다. Apache Kafka는 데이터 파이프라인 및 스트리밍 분석과 같은 워크로드를 지원하는 오픈 소스 이벤트 스트리밍 플랫폼입니다.

AWS 관리형 Kafka 서비스인 Amazon Managed Streaming for Apache Kafka(Amazon MSK) 또는 자체 관리형 Kafka 클러스터를 사용할 수 있습니다. 자세한 내용은 Amazon MSK에서 Lambda 사용에 대한 자세한 내용은 Amazon MSK에서 Lambda 사용을 참조하세요.

이 주제에서는 자체 관리형 Kafka 클러스터에서 Lambda를 사용하는 방법을 설명합니다. AWS 용어에서 자체 관리형 클러스터는 AWS가 아닌 다른 서비스에 호스팅된 Kafka 클러스터를 포함합니다. 예를 들어, Confluent Cloud와 같은 클라우드 공급업체를 통해 Kafka 클러스터를 호스팅할 수 있습니다.

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

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

주의

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

Kafka 기반 이벤트 소스의 경우 Lambda는 일괄 처리 기간 및 배치 크기와 같은 처리 제어 파라미터를 지원합니다. 자세한 정보는 일괄 처리 동작 섹션을 참조하세요.

자체 관리형 Kafka를 이벤트 소스로 사용하는 방법의 예는 AWS 컴퓨팅 블로그에서 Using self-hosted Apache Kafka as an event source for AWS Lambda를 참조하세요.

예제 이벤트

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

{ "eventSource": "SelfManagedKafka", "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 ] } ] } ] } }