728x90
반응형
목차
- [Kafka 1편] Kafka 는 무엇인가?
Kafka 개념
- 카프카는 분산 스트리밍, 실시간 스트리밍 데이터를 처리하기 위한 목적으로 설계된 오픈 소스 입니다.
- 분산 처리 시스템이며, publish, subscribe message 플랫폼입니다.
- producer 는 하나의 토픽이 데이터를 넣고, 토픽은 여러 개의 partition 으로 이루어집니다.
- partition 은 consumer group 으로 매핑되며, consumer group 과 partition 이 늘어날수록 처리량이 늘어납니다.
카프카 사용 시 주의사항
중복 메시지
- 다음과 같은 상황이 있을 수 있습니다.
- partition 에서 consumer group 이 데이터를 가져가서 처리합니다.
- consumer group 에서 정상적으로 메시지를 처리한 후, kafka 에게 처리 잘됐다고 응답을 줍니다.
- 응답을 주는 순간 네트워크 장애가 발생해 kafka 는 이를 인지하지 못합니다.
- 이를 해결하기 위해 consumer 에 중복 로직 방어 로직을 넣어서 처리합니다.
- 중복 메시지라면 Exception 을 낼 수 있습니다. 즉, 어플리케이션 에러를 만들어내서 중지를 시키는 것입니다.
- 중복 메시지라면 일단 response 를 200으로 던지지만 error message 에 중복이라고 응답할 수 있습니다. (어짾든 정상 처리됐으니 중지는 되지 않습니다.)
- 테이블에 message id (unique key) 를 넣어서 메시지가 들어올 때마다 저장한 후, 처리하게 함. 이렇게 하면 중복 메시지면 Exception 발생
- 이건 카프카 뿐만이 아니라 Queue 기반 오픈소스에도 비슷하게 나올 수 있는 문제입니다.
- ex) AWS SQS
순서 보장
- topic 에는 여러 partition 이 있고, partition 내부에서는 순서 보장이 됩니다.
- 즉, 순서 보장을 하고 싶다면 같은 partition 에 데이터를 넣어서 순서 보장 하면 됩니다.
- 특정 partition 에만 데이터를 넣어놓고 하나의 스레드로 처리한다면 순서 보장이 가능합니다.
리밸런싱
- consumer group 에서 consumer 가 빠지거나 추가될 때, 기존 버전에서는 kafka 가 멈춰버립니다.
- 이를 해결하기 위해 kafka 의 특정 버전을 사용하여 방지할 수 있습니다.
댓글