Kafka/Producer 6

Kafka Producer 성능 테스트, 튜닝

목차 [개요] 카프카에서는 프로듀서 튜닝이 가장 핵심적인 요소이다. Throughput, latency는 프로듀서가 얼마나 효율적인 작업을 하는가에 따라 달라진다. Biz 요구사항을 가장 먼저 파악하고 그에 맞는 성능튜닝을 진행한다. Durability, Availability, Throughput, Latency 의 우선순위를 정해본다. 작은 변화를 위해 설정값을 변경하는 건 권고하지 않는다. 큰 변화일 때만 설정값을 변경한다. : https://www.confluent.co.uk/blog/configure-kafka-to-minimize-latency/ Tail Latency at Scale with Apache Kafka | UK Apache Kafka allows you to achieve bot..

Kafka/Producer 2023.04.22

Log Compaction

목차 [Topic - cleanup.policy] Kafka는 데이터 리텐션 정책이 2가지 있다. Delete: retention.ms를 지나거나 retention.bytes를 초과하는 경우 오래된 세그먼트를 삭제한다. Compact: Key별로 가장 최근의 value값만 남겨두고 저장한다. [Log Compaction?] Log compaction ensures that Kafka will always retain at least the last known value for each message key within the log of data for a single topic partition.It addresses use cases and scenarios such as restoring state..

Kafka/Producer 2023.03.05

BuiltIn Partitioner

HTML 삽입 미리보기할 수 없는 소스 [BuiltIn Partitioner?] 문제 제기 : https://issues.apache.org/jira/browse/KAFKA-10888?focusedCommentId=17285383&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#comment-17285383 업데이트 patch : https://cwiki.apache.org/confluence/display/KAFKA/KIP-794%3A+Strictly+Uniform+Sticky+Partitioner Apache Kafka 3.3 버전에 추가된 것으로 기존 StickyPartitioner를 사용할 때 Broker Networ..

Kafka/Producer 2023.03.05

Kafka Producer Basic Architecture

목차 [기본 동작 방식] [Producer 컴포넌트] PDF파일 (출처: 본인) Overview Record Accumulator Sender Thread [컴포넌트별 상세설명] Serializer 레코드로부터 전달된 Key, Value가 지정된 serializer에 의해 변환된다. Partitoner partitioner에 의해 어떤 파티션으로 보내질 지 결정된다. Key값이 있는 경우 Key의 Hash 값을 이용해서 파티션을 할당한다. Key값이 없는 경우 Stickey 방식으로 할당된다. Compression 전송하려는 레코드를 압축할 수 있다. 레코드는 배치에 채워진 후 그 배치가 압축되어 RecordAccumulator에 저장된다고 한다. Compression.type gzip snappy lz..

Kafka/Producer 2023.03.03

Apache Kafka Client 2.4 이상 버전의 RoundRobin Partitioner에서 메시지가 골고루 분배되지 못하는 현상

[문제점] Apache Kafka Client 2.4 버전이상에서 RoundRobin Partitioner를 사용할 경우 partition 메소드가 두 번 호출되면서 메시지가 파티션에 골고루 분배되지 못하는 현상이 있다. [버그 재현: 메시지 4개를 생성하기] //RR 파티셔너 사용 props.put(ProducerConfig.PARTITIONER_CLASS_CONFIG, RoundRobinPartitioner.class); ... KafkaTemplate kafkaTemplate = new KafkaTemplate(new DefaultKafkaProducerFactory(props)); ObjectMapper obj = new ObjectMapper(); //forloop를 통해 메시지 4개를 생성 f..

Kafka/Producer 2022.12.03

Sticky Partitioner

[개요] Apache Kafka 2.4 버전 이후부터 사용가능한 파티셔너이다. 기존에는 RR방식으로 동작했는데, 이 방식에 대한 단점이 있어 이를 보완한 방법 [파티셔닝?] Kafka의 메시지는 key/value 의 형태로 구성된다. 이 때 key값이 있을 수도 있고, null값으로 존재할 수도 있다. 그리고 producer는 batch.size, linger.ms 옵션을 통해 메시지를 바로 보내지 않고 배치에 일정기간 저장했다가 보내는 특성을 가진다. Key값이 있는 경우 modular 연산을 통해 어떤 파티션에 메시지가 적재될지 결정한다. Key값이 없는 경우 기존에는 RR 방식을 사용하여 메시지를 파티션에 배분했다. 아래 그림은 1~9 까지의 메시지를 생성했을 때 RR정책에 의해 파티셔닝 된 모습 ..

Kafka/Producer 2022.12.03