일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- Scala
- slack
- Kafka
- python
- docker
- HIVE
- Example DAG
- 람다 아키텍처
- airflow
- re
- HBase
- Windows
- SlackWebhookOperator
- HDP
- 빅데이터
- Namenode
- yarn
- LDAP
- HDFS
- NoSQL
- ambari
- MapReduce
- Service
- hadoop
- slack app
- jupyter
- Lambda architecture
- 정규표현식
- execution_date
- Today
- Total
IT 삽질기
Kafka 멱등성 producer 본문
이번 글에서는 kafka에서 멱등성을 적용한 producer를 사용하기 위해서 어떻게 해야 하는지 알아보도록 하자.
멱등성이란?
멱등성이란 여러 번 연산을 수행하더라도 동일한 결과를 나타내는 것
https://ko.wikipedia.org/wiki/%EB%A9%B1%EB%93%B1%EB%B2%95%EC%B9%99
멱등성 producer
멱등성 producer는 동일한 데이터를 여러번 전송해도 단 한 번만 저장되는 것을 의미한다. 이렇게 멱등성 producer를 적용하게 되면 동일한 데이터를 중복 처리하는 것을 방지할 수 있는데 그 방식에 대해서 알아보도록 하자.
멱등성 적용하기
멱등성 producer를 사용하기 위해서는 enable.idempotence의 옵션 값을 true로 설정하면 되는데, 해당 옵션에 대한 설명은 아래와 같다.
https://kafka.apache.org/documentation/#producerconfigs
enable.idempotence를 true로 설정하여 멱등성을 보장하기 위해서는 아래의 설정도 추가적으로 필요하다.
- max.in.flight.requests.per.connection를 5보다 작거나 같은 값으로 설정
- retries을 0보다 큰 값으로 설정
- acks를 all로 설정
위의 값을 설정하지 않으면 ConfigException이 발생하므로 모두 적용이 필요하다.
멱등성 producer 동작 방식
이렇게 설정된 producer은 어떻게 동작하게 될까?
기본 producer은 데이터만 전달하는거에 비해 멱등성 producer은 데이터를 전달할 때 producer PID와 시퀀스 넘버를 함께 전달하여 중복 데이터 적재를 방지한다. 시퀀스 넘버는 데이터를 전달할 때마다 시퀀스 넘버를 1씩 증가하여 보내며, broker는 데이터를 전달받을 때 PID와 시퀀스 넘버를 이용해 같은 데이터인지를 확인하고 같은 데이터인 경우 데이터를 저장하지 않는다. 이는 producer가 재시작되는 경우 초기화되는데, producer의 PID와 시퀀스 넘버를 함께 고려하기 때문이다.
'BigData > Kafka' 카테고리의 다른 글
Kafka consumer와 commit (0) | 2021.06.28 |
---|---|
Kafka Acks (0) | 2021.06.08 |
Kafka-manager을 이용한 Partition reassign (0) | 2021.06.05 |
Kafka scale out (0) | 2021.06.01 |
Kafka ISR(In-Sync-Replicas) (0) | 2021.05.29 |