레인지 방식
306
작성한 질문수 5
서로 다른 토픽에 같은 컨슈머로 받을 때,
토픽 A에 orderId가 들어오고, 토픽 B에 orderId를 키로 가진 orderItem이 들어왔을 때, 어그리게이트를 하려면 같은 시점에 들어와야하지 않나요? 이해가 잘 안가서 질문드립니다.
답변 1
1
안녕하십니까,
지금 파티션 할당 전략에 대해서 질문을 하신 건지요?
질문 자체로만 보면 파티션 할당 전략이 아닌, 데이터의 입력 시점만 질문하신걸로 보입니다만, 일단 데이터의 입력 시점을 질문하신걸로 판단하고 답변드리면,
카프카는 기본적으로 비동기 데이터 처리입니다. 질문하신 '같은 시점'이라는 의미가 동일한 order_id 키값은 밀리세컨드 단위로 완전히 같아야 된다는 의미 이신지 모르겠지만, 비동기 데이터 처리이므로 보내는 producer에서 그렇게 보내도 topic에 그렇게 저장되지 않을 수 있습니다. 또한 consumer는 topic에 저장된 offset 순으로 읽어 들이지만 네트웍이나 여러 요소들로 인해서 완벽하게 동일한 시점에 토픽에 저장된 메시지라도 동일하지 않은 시점에 읽어 들일 수 있습니다.
카프카가 비동기 데이터 처리를 하고 있지만, order_id가 order 생성 순으로 만들어지면 거의 대부분 순차적으로 product에서 topic으로 보내지고 순차적으로 consumer에서 읽히게 됩니다. 시점이 다른 데이터를 consumer에서 함께 처리하는 경우는 많지 않지만 순차적이지 않은 일부 데이터 역시 consumer에서 메모리로 과거 데이터를 유지 하고 있기 때문에 뒤 늦게 오는 데이터를 함께 aggregation 처리를 적용할 수 있습니다.
들어오는 시점이 다르더라도 동일한 key값을 가지는 파티션들을 하나의 consumer에서 처리하면 좋은 이유는, consumer에서 주로 Spark과 같은 빅데이터 솔루션등에 적재하는 경우가 많은데, 이때 spark 역시 동일한 key값을 가지는 파티션을 기반으로 데이터 처리를 하고 있기 때문에 consumer에서 파일 처리 성능이 좋아집니다. consumer들끼리 키 값이 혼재 되어 있으면 consumer에서 키값 별로 다시 재 작업을 해서 빅데이터 솔루션에 데이터를 적재해야 하므로 시간이 더 소모 됩니다.
때문에 카프카와 같은 분산 시스템은 동일한 key값을 가지는 데이터를 하나의 프로세스(여기서는 consumer)로 처리하는 메커니즘을 중요하게 생각합니다.
감사합니다.
virtual box 설치 문제
0
59
2
카프카 서버 구축 관련 문의
0
62
2
카프카 토픽 Key 타입 변경에 관한 질문
0
65
2
Zookeeper에서 KRaft
0
75
1
카프카 학습과 관련하여 질문 드립니다
0
95
2
파티션 증가시 비용 증가 고려
0
66
2
Kafka 초기 Partition 개수 설정 관련 질문
0
80
2
VM 과 도커의 차이
0
135
2
vm 어댑터설정 문의
0
73
2
Cooperative Sticky Rebalancing 질문
0
55
2
consumer 설정 질문
0
65
2
consumer.poll 질문입니다.
1
66
2
mainThread.join() 관련 질문
0
54
2
문의
0
149
2
멀티 브로커 설정 중 포트 충돌 발생
0
118
2
Consumer Group 강의 Lag 질문있습니다!
0
104
2
강의 설명 및 코드 정리
0
171
2
실습 코드는 어디서 받나요.. 아무리 찾아도 엄네요..
0
148
1
java.nio.BufferUnderflowException 에러 발생합니다..
0
153
3
KafkaTimeoutError:
0
155
2
acks 1 이면 비동기가 아니지 않나요?!
0
182
2
Producer의 메시지 비동기화 전송 구현 강좌 내용 중 질문
0
105
2
자문자답: 데이터 누락된다고 하시는 분 참고하세요.
0
214
2
자문자답: kafka Error connecting to node utuntu-20.myguest.virtualbox.org:9092
0
197
2





