자체 관리형 Apache Kafka와 Lambda 사용하기

자체 관리형 Apache Kafka와 Lambda 사용하기

이 주제에서는 자체 관리형(self-managed) Kafka 클러스터와 함께 Lambda를 사용하는 방법을 설명해요. AWS 용어에서 자체 관리형 클러스터에는 AWS 외부에 호스팅된 Kafka 클러스터가 포함돼요. 예를 들어 Confluent Cloud나 Redpanda 같은 클라우드 공급자와 함께 Kafka 클러스터를 호스팅할 수 있어요.

이 장에서는 Lambda 함수의 이벤트 소스로 자체 관리형 Apache Kafka 클러스터를 사용하는 방법을 설명해요. 자체 관리형 Apache Kafka를 Lambda와 통합하는 일반적인 프로세스는 다음 단계를 포함해요.

  1. 클러스터 및 네트워크 설정 – 먼저 Lambda가 클러스터에 접근할 수 있도록 올바른 네트워킹 구성으로 자체 관리형 Apache Kafka 클러스터를 설정해요.

  2. 이벤트 소스 매핑 설정 – 그런 다음 Apache Kafka 클러스터를 함수에 안전하게 연결하는 데 Lambda가 필요한 이벤트 소스 매핑 리소스를 만들어요.

  3. 함수 및 권한 설정 – 마지막으로 함수가 올바르게 설정되었고 실행 역할에 필요한 권한이 있는지 확인해요.

Apache Kafka를 이벤트 소스로 사용하는 것은 Amazon Simple Queue Service(SQS)나 Amazon Kinesis를 사용하는 것과 유사하게 작동해요. Lambda는 이벤트 소스에서 새 메시지를 내부적으로 폴링한 다음 대상 Lambda 함수를 동기적으로 호출해요. Lambda는 메시지를 배치로 읽어 이벤트 페이로드로 함수에 제공해요. 최대 배치 크기는 구성 가능하며(기본값 100개 메시지), 자세한 내용은 배치 동작을 참고하세요.

자체 관리형 Apache Kafka 이벤트 소스 매핑의 처리량을 최적화하려면 프로비저닝 모드(provisioned mode)를 구성하세요. 프로비저닝 모드에서는 이벤트 소스 매핑에 할당된 이벤트 폴러(event poller)의 최소·최대 수를 정의할 수 있어요. 이렇게 하면 이벤트 소스 매핑이 예기치 않은 메시지 급증을 처리하는 능력이 향상될 수 있어요. 자세한 내용은 프로비저닝 모드를 참고하세요.

경고(Warning) Lambda 이벤트 소스 매핑은 각 이벤트를 최소 한 번 처리하며, 레코드의 중복 처리가 발생할 수 있어요. 중복 이벤트와 관련된 잠재적 문제를 피하려면 함수 코드를 멱등(idempotent)하게 만들 것을 강력히 권장해요. 자세한 내용은 AWS Knowledge Center의 내 Lambda 함수를 멱등하게 만드는 방법을 참고하세요.

Kafka 기반 이벤트 소스의 경우 Lambda는 배치 창(batching window)과 배치 크기 같은 처리 제어 파라미터를 지원해요. 자세한 내용은 배치 동작을 참고하세요.

자체 관리형 Kafka를 이벤트 소스로 사용하는 예시는 AWS Compute Blog의 Using self-hosted Apache Kafka as an event source for AWS Lambda를 참고하세요.

출처: AWS Lambda 개발자 안내서

본문

주제(Topics)

예시 이벤트

Lambda가 함수를 호출할 때 event 파라미터에서 메시지 배치를 보내요. 이벤트 페이로드는 메시지 배열을 포함해요. 각 배열 항목에는 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
                  ]
               }
            ]
         }
      ]
   }
}

더 알아보기 (Learn more)

자체 관리형 Kafka 클러스터를 Lambda 함수와 연결하는 방법은 Lambda용 자체 관리형 Apache Kafka 클러스터 및 네트워크 구성을 참고하세요.