GPT Archiving

kafka - ProducerRecord

99duuk 2025. 1. 6. 20:07

Kafka에서 ProducerRecord는 프로듀서가 Kafka로 데이터를 보낼 때 사용하는 데이터 구조입니다. 간단히 말하면, Kafka 토픽에 메시지를 보낼 때 필요한 정보를 담고 있는 객체입니다.


ProducerRecord란?

  • 정의:
    ProducerRecord는 Kafka의 프로듀서 API에서 사용되며, 메시지를 Kafka 브로커로 전송할 때 메시지의 토픽, 키, 값, 헤더 등의 정보를 포함합니다.
  • 역할:
    Kafka 토픽에 메시지를 보낼 때 메시지의 메타데이터를 정의하고, 이를 기반으로 Kafka 브로커가 데이터를 처리할 수 있도록 합니다.

ProducerRecord의 주요 필드

  1. Topic:

    • 메시지가 전송될 Kafka 토픽의 이름입니다.
    • 필수적으로 지정해야 합니다.
  2. Key (선택 사항):

    • 메시지의 키입니다.
    • 키는 메시지를 특정 파티션에 고정되도록 하기 위해 사용됩니다.
    • 동일한 키를 가진 메시지는 항상 같은 파티션으로 전송됩니다(파티셔너가 기본적으로 해시를 사용).
  3. Value:

    • 메시지의 실제 데이터입니다.
    • 메시지 값은 직렬화되어 Kafka 브로커로 전송됩니다.
  4. Partition (선택 사항):

    • 메시지가 명시적으로 특정 파티션으로 전송되도록 지정할 수 있습니다.
    • 지정하지 않을 경우 Kafka는 키 기반 파티셔닝 또는 라운드로빈 방식으로 파티션을 결정합니다.
  5. Headers (선택 사항):

    • 메시지에 추가적인 메타데이터를 포함하기 위한 헤더입니다.
    • Key-Value 형식의 데이터를 추가할 수 있습니다.
  6. Timestamp (선택 사항):

    • 메시지에 대한 타임스탬프입니다.
    • 기본적으로 Kafka는 메시지를 전송한 시간을 타임스탬프로 사용합니다.

ProducerRecord 생성 예시

Java에서 ProducerRecord를 생성하는 기본적인 예는 아래와 같습니다:

import org.apache.kafka.clients.producer.ProducerRecord;

public class ProducerRecordExample {
    public static void main(String[] args) {
        // 토픽 이름, 키, 값으로 ProducerRecord 생성
        ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key1", "Hello, Kafka!");

        // 프로듀서가 record를 Kafka로 전송
        // producer.send(record);
    }
}

생성자 옵션

  1. 토픽과 값만 지정:

    new ProducerRecord<>("my-topic", "Hello, Kafka!");
    • 키가 없으면 Kafka가 파티션을 자동으로 결정.
  2. 토픽, 키, 값 지정:

    new ProducerRecord<>("my-topic", "key1", "Hello, Kafka!");
    • 키를 지정하면 동일 키의 메시지가 항상 같은 파티션에 저장.
  3. 토픽, 파티션, 키, 값 지정:

    new ProducerRecord<>("my-topic", 2, "key1", "Hello, Kafka!");
    • 특정 파티션(여기서는 2번)에 메시지를 직접 보냄.
  4. 헤더 포함:

    ProducerRecord<String, String> record = new ProducerRecord<>("my-topic", "key1", "Hello, Kafka!");
    record.headers().add("header-key", "header-value".getBytes());

ProducerRecord의 동작 방식

  1. 프로듀서가 ProducerRecord 객체를 생성합니다.
  2. 이 객체는 직렬화 과정을 거쳐 Kafka 브로커로 전송됩니다.
  3. Kafka 브로커는 메시지를 수신한 뒤, 지정된 토픽과 파티션에 메시지를 저장합니다.

ProducerRecord를 사용하는 이유

  • 구조적 전송: 메시지에 필요한 모든 정보를 구조적으로 포함할 수 있음.
  • 유연성: 키, 값, 헤더 등을 포함하여 세밀하게 메시지를 제어 가능.
  • 파티셔닝 지원: 키를 활용한 파티션 고정 또는 직접 파티션 지정이 가능.

요약

ProducerRecord는 Kafka로 메시지를 전송하기 위해 프로듀서가 사용하는 객체로, 메시지에 대한 모든 메타데이터를 포함합니다. 이를 통해 메시지가 올바른 토픽과 파티션에 저장되도록 보장합니다.

더 궁금한 점이나 추가적인 예제가 필요하면 말씀해주세요! 😊

'GPT Archiving' 카테고리의 다른 글

Java - CompletableFuture & addCallBack  (0) 2025.01.06
kafka Sticky  (0) 2025.01.06
dockerfile - 의존성 캐싱  (1) 2025.01.06
dockerfile - booJar, plain Jar  (1) 2025.01.06