inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Kafka thực chiến: Nắm trọn cốt lõi một cách nhanh chóng

Thực hành 4) Commit offset thủ công

DLQ의 수동 커밋에 대해서 질문있습니다.

Đã giải quyết

28

clw86799822

20 câu hỏi đã được viết

0

처리에 실패한 메시지를 DLQ로 재발행해서 별도로 재처리하는 구조를 설계한다면 굳이 수동 커밋을 유지하지 않고 enable.auto.commit=true로 바꿔도 무방한지 궁금합니다!

spring-boot kafka msa spring-kafka

Câu trả lời 2

1

bradkim

안녕하세요 찬원님. 먼저, 좋은 질문 해주신점 감사드립니다.


말씀해주신 부분이 상당히 일리가 있고, auto commit을 해도 어차피 따로 dlq로 떼내어 별도로 다시 처리 하기 때문에 상관이 없을것 같긴합니다.


그러나, 제 경험과 레퍼런스를 찾아보면 dlq를 쓰더라도 일반적으로 auto commit은 false로 두고 진행을 했던것 같습니다.


이유를 생각해보면, 다소 예외적이긴 하지만 dlq로 메시지를 발행하기 직전에 서버가 다운되는 문제가 발생하면 auto commit으로 커밋은 처리되었지만 dlq로 메시지를 발행하지 못하는 상황이 발생할수도 있을것 같습니다. 서버를 재시작한 이후에는 그 어디에도 이전 메시지가 남아있지 않게 되겠죠.


그래서 좀 더 안전하고 확실하게 dlq로 메시지 발행이 완료 되면 직접 수동으로 commit을 수행하는 방법이 더 좋아 보이고 일반적으로 이렇게 처리하는것같습니다.


충분한 답변이 됐을지 모르겠습니다. 언제든 질문해주시면 최대한 좋은 설계에 대해 저도 같이 고민해보겠습니다. 감사합니다.

0

clw86799822

답변감사합니다!

0

communityai8509

안녕하세요, 인프런 AI 인턴입니다. 이찬원님.

Apache Kafka에서 메시지를 처리하다가 실패하여 Dead Letter Queue (DLQ)로 메시지를 보내는 구조에 대해 질문 주셨네요. Kafka의 자동 커밋과 수동 커밋을 고려할 때 중요한 점들을 살펴보겠습니다:

  1. 자동 커밋 (enable.auto.commit=true): 이 설정을 사용하면 Kafka Consumer는 주기적으로 오프셋을 자동으로 커밋합니다. 이 방식은 구현이 간단하고 보통 메시지를 잃어버릴 위험이 낮은 경우에 유용합니다. 그러나 메시지 처리 실패 상황에서는 메시지가 처리되지 않았는데도 커밋될 수 있는 문제가 있습니다.

  2. 수동 커밋: 수동 커밋을 사용하는 경우, 메시지가 정상적으로 처리되었을 때만 오프셋을 커밋하기 때문에 보다 안전한 메시지 처리 보장을 제공합니다. 따라서 메시지 처리의 신뢰성을 확보할 수 있습니다.

DLQ로 메시지를 재발행하여 별도로 처리하는 구조라면, 자동 커밋을 사용하더라도 큰 문제는 없겠지만 아래 사항을 고려해야 합니다:

  • 메시지 재처리 요구: 만약 처음 메시지 처리 시도를 더 한 번 복구하려는 경우라면, 수동 커밋이 더 적절할 수 있습니다. 그 이유는 수동 커밋을 통해 실패한 메시지에 대해 다시 시도할 수 있기 때문입니다.

  • 에러 핸들링 및 로깅: 자동 커밋을 사용할 경우, 에러 발생 시 별도로 처리 로직을 구현해 놓는 것이 중요하며, 각 경우의 로깅도 잘 관리해야 합니다.

보다 심층적인 내용이 담긴 유사한 주제의 질문과 답변을 확인해 보시길 추천드립니다:

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

코드 자료는 없는걸까요?

0

23

2

헥사고날 아키텍처와 DDD를 적용할 때, 화면에 강하게 연관된 조회 데이터를 어떻게 다루는 게 좋은지 궁금합니다.

0

24

2

노션링크가 접근되지 않습니다.

0

19

1

h2 database

0

17

1

실무에서 동의어 정의 관련

0

25

2

Request DTO에서 Entity를 생성할 때 의존성 방향을 반대로 하면 어떨까요?

0

43

2

소스 코드 좀 올려주세요.

0

33

1

스프링 부트 버전 질문

0

60

2

혹시 다음 강의는 언제쯤 나올까요?

0

28

1

개념과 격벽에 대한 이해를 팀과 공유하고 합의하는 방법

1

57

2

접근 가능한 카트 목록을 조회하는 API는 없는걸까요?

1

58

2

new 패키지명.Dto명 생략가능

0

51

2

JWT토큰 발급 시, subject 값을 다양하게 넣어서 여러 개의 토큰을 만드는 이유

0

44

2

수업 자료 사이트가 또 바뀌었을까요?

0

35

1

ansible playbook 오류

0

52

2

테스트 코드 작성 시 DTO 새로 작성하는 이유가 궁금합니다.

0

46

1

leaveGroupChatRoom 문의

0

65

3

SpringBoot4 버전 Hibernate5JakartaModule 라이브러리 오류

0

46

1

aws 관련 질문드립니다.

1

56

3

spring ai에서 RAG ETL 파이프라인 성능 최적화에 대해 질문이 있습니다!

2

61

1

kubectl exec 에러가 발생해서 문의드립니다.

0

75

3

강사님 질문 있어요.

0

51

2

실습 환경 : 파이썬 3.10 관련 문의

0

53

2

혹시 수업자료는 다운받을 수 있는 곳이 없나요?

1

87

2