본문 바로가기
인프라/kafka

kafka consumer 성능 올리기

by 낭만프로그래머. 2021. 9. 11.

Log system 을 운영할때는 그다지 고민을 하지 않았던 주제였다. 왜냐면 필요하면 scale-out 을 시키고 topic 의 파티션을 늘리고 하는 행위로 충분히 커버가 되었고 lag 이 쌓이면 consumer 를 늘리면 되었다. 같은 group id 를 가지게 되면 consumer 끼리의 중복데이터는 없을꺼라는 생각을 했었기 때문에.

 

하지만 이제 order 가 중요하게 되는 트랜잭션을 고민하게 되면서 고민이 살살 되기 시작한다.

order 가 유지되기 위해서는 지금까지 내가 아는 방법은 partition 을 "1" 로 설정하는것.

그렇게 되면 내가 지금까지 했던 설정을 사용할수 없게 된다.

몇가지 방법을 찾아봤다. (실제 테스트는 안해봤. 곧 해봐야지.)

compression.type = lz4
batch.size = 131072
linger.ms = 10

cpu power 를 사용함으로써 속도를 올리기 위해서 압축하는 방법. 

fetch.max.wait.ms및 fetch.min.bytes구성 속성을 사용 하여 소비자의 요청 수를 제어하는 임계값을 설정합니다.

fetch.max.wait.ms 시간 기반 일괄 처리에 대한 최대 임계값을 설정합니다.

fetch.min.bytes 크기 기반 일괄 처리에 대한 최소 임계값을 설정합니다.

producer 쪽 설정을 바꾸면서 성능향상?

 

 

단일 파티션이 아니지만 순서보장이 가능한 방법은 없을까?

Kafka 는 단일 파티션의 메시지에 대한 순서 보장 만 제공합니다. 
하나의 주제에서 메시지의 엄격한 순서를 원할 경우 유일한 옵션은 주제당 하나의 파티션을 사용하는 것입니다. 
그런 다음 소비자는 브로커에 커밋된 것과 동일한 순서로 메시지를 관찰할 수 있습니다.

잠재적으로 소비자가 여러 파티션의 메시지를 사용하는 경우 상황이 덜 정확해집니다. 
각 파티션의 순서는 유지되지만 모든 파티션 에서 가져온 메시지 의 순서는 전송된 순서를 반드시 반영하지 않기 때문에
보장되지 않습니다. 
그러나 실제로는 순서가 중요한 메시지를 동일한 파티션으로 보낼 수 있기 때문에
(동일한 키를 사용하거나 사용자 지정 파티셔너를 사용하여) 일반적으로 여러 파티션에서 사용할 때 
각 파티션의 메시지 순서를 유지하는 것으로 충분합니다.

 

'인프라 > kafka' 카테고리의 다른 글

kafka 성능 향상관련  (0) 2021.09.11
kafka advertised listener 설정  (0) 2021.06.14
[KSQL]  (0) 2021.05.26