ABOUT ME

Data Engineer를 꿈꾸는 개발자입니다.

Today
Yesterday
Total
  • [Kafka] - 4. Producer
    개발/Kafka 2022. 8. 4. 16:10

    Producer


    Producer는 Kafka에 Data를 넘겨주는 역할을 한다. ( Message = Data = Record = Event )

    1. Header(metadata)

    Topic, Partition, timestamp.. etc

     

    2. Body

    Key-value

    Producer Record

    • Kafka는 Data를 Byte Array로 저장한다.
    • Byte Array로 저장하기 위하여 Produce는 Data를 Serialize하며, Consumer는 Data를 확인 하기 위해 deserialze해야 한다.
    • Key-value용 Serializer를 설정하기 위해서 아래 코드와 같이 사용한다고 한다.

     

     Properties props = new Properties();
     props.put("bootstrap.servers", "localhost:4242");
     props.put("acks", "all");
     props.put("retries", 0);
     props.put("batch.size", 16384);
     props.put("linger.ms", 1);
     props.put("buffer.memory", 33554432);
     props.put("key.serializer", "org.apache.kafka.common.serialization.StringSerializer");
     props.put("value.serializer", "org.apache.kafka.common.serialization.arovSerializer");

    Kafka Serialize and Deserialize

     

    High-level Architecture with Producer


    실제 구현으로는 Record를 생성 후 Send() 함수를 호출하면 되지만, 라이브러리가 동작하는 원리를 나타낸 것
    • Data를 Serialize한 다음에 Partitioner(어떤 파티션에 할당할 것인지) 확인 한 후 Compress(압출할 것인지)를 통해 Topic내 Partition에 저장한다.
    • Kafka는 Data를 제대로 저장한지 여부를 알려주며 성공한다면 metedata를 return하여 준다. 실패 시에는 retry를 시도한 다음에, 특정 갯수만큼 이후에는  Exception처리한다.

    High-level Architecture

    Partitioner의 역할

    Message(data)를 Topic의 어떤 Partition에 보낼지를 선택하여 준다.

    Algorithm

    • Key가 존재하는 지 여부에 따라 달라진다.
    Hash(key)%(number of partition)

     

    Default Partitioner

    Key가 없는 경우, 버전에 따라 처리하는 방법이 다르다.
    • Kafka 2.4 버전 아래인 경우에는 각 Data에 대해 Round Robin으로 처리하게 된다.
    • 이 때 Batch 형태로 Message를 보내게 되면 Message가 덜 처리되었음에도 불구하고 전송하는 문제가 발생한다.

    Round-Robin

    • 이에 따라 2.4 버전 이후에는 Sticky 라는 정책을 펼친다.
    • 하나의 Batch가 닫힐 때 까지 Partition에게 Record를 전송 및 Random Partition을 선택하여 처리한다.
    • 결국 Data가 1,2,3,4,5,6으로 나누어져 있고 Partition이 6개 있고 하나의 Batch에 3개를 처리한다고 가정해보면
    • 한번의 Send에 Partition1은 1,2,3을 받아 처리하고 Partition5는 4,5,6을 받아 처리한다.
    • 이렇게 하면 결국 Send는 2번으로 Broker는 2번의 작업만 처리해주면 된다.

    Sticky

     

    '개발 > Kafka' 카테고리의 다른 글

    [Kafka] - 6. Replication  (0) 2022.08.04
    [Kafka] - 5. Consumer  (0) 2022.08.04
    [Kafka] - 3. Broker&Zookeeper  (0) 2022.08.03
    [Kafka] - 2. Topic&Partition&Segment  (0) 2022.08.03
    [Kafka] - 1. What is Apache Kafka  (0) 2022.08.03

    댓글

Designed by Tistory.