카프카(AWS MSK)를 트리거로 돌리는 람다가 있다. 작년 8월부터 9개월을 운영했다.
이벤트 처리 누락으로 CS가 들어왔던 건 한 두건 있었던 것 같다.
(다른 팀에서 운영하는 람다에서도 종종 이벤트 누락이 발생한다고 하고,, 대응할 수 있는 방안이 있어서 람다 버그구나 생각하고 넘어갔다,,,)
내용 요약
- 람다 이벤트 처리 누락 발생 -> records 첫번째 것만 처리함 -> records for문 돌려 해결
- 그랬더니 중복 컨슘 발생 -> lambda timeout 발생 -> timeout 설정 변경하여 해결
이벤트 처리 누락 발견
다른 팀에서 며칠 전부터 위 카프카로 배치성으로 이벤트를 보내기 시작했다고 하는데 90프로 처리가 누락되었다.
kafka partition, offset 로그를 찍어뒀는데 중간중간 막 100개쯤 빵꾸가 나있었다.
원인
그제서야 람다 코드를 다시 봤다 너무나도 불길한... [0] 이거 뭐지 진짜
def lambda_handler(event, context):
process(event['records'][0])
사실 처음 알았다... msk 트리거로 걸려있는 batch size는 기본 설정이 100이고 그래서 람다 event['records']에 100개가 들어올 수 있는 것도 몰랐다...
( 카프카로 요청이 몰리는 상황이 없어서 누락이 많이 발생하지 않았던 것 같다 ,,, )
해결
def lambda_handler(event, context):
print(f"event['records'] count : {len(event['records'])}")
for record in event['records']:
process(record)
for문 돌리면 된다.
중복 컨슘 발견
며칠 동안 처리 누락된 애들을 다시 처리하기 위해 이벤트를 다시 보냈다.
처리량을 보니 분명 800건 보냈는데 막 3만 건이 넘어가있다.
분명 로그상으로 에러 찍힌 것도 없는데 에러로 인해서 중복 컨슘이 발생하는 것 같았다..
원인
에러 로그도 없어서 지피티에게 문의해보니 아래와 같은 람다 결과를 좀 보내달라고 해서 보내줬다.
REPORT RequestId: eff798b7-d11e-4863-90a0-0e6a87d1a88f Duration: 3010.68 ms Billed Duration: 59 ms Memory Size: 512 MB Max Memory Used: 79 MB
람다 기본 타임아웃 설정이 3초인데 3초 넘어서 그런 것 같다고 했다!
=> timeout으로 일부만 처리되다가 끊기고 계속 재시도 계속 반복
해결
lambda timeout 설정 바꿔주고 혹시 몰라서 memory 설정도 늘려주니 이슈 해결.
'DevOps > AWS' 카테고리의 다른 글
[AWS] AWS CLI로 보안그룹 연결된 리소스 확인 (0) | 2023.02.18 |
---|---|
[AWS/ECS] ECS 서비스 검색 통합 활성화 (0) | 2022.10.28 |
[AWS/ECS] ECS Fargate(2) - 서비스 운영을 위한 각종 설정 기록(outbound 고정 IP, Route53 적용) (0) | 2022.10.28 |
[AWS/ECS] ECS Fargate(1) - 서비스 시작을 위한 각종 설정 기록(eureka client 등록, health check) (0) | 2022.10.28 |
[AWS/CodeDeploy] CodePipeline 배포 실패 (0) | 2022.08.12 |