ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [Kafka] 메시지 값 순서가 메시지를 넣은 순서와 다른 이유
    공부/Kafka 2022. 5. 26. 01:54
    반응형

     

    1. 결론


    카프카에 메시지를 저장할 때는 라운드 로빈 알고리즘을 사용한다고 합니다. 그래서 파티션을 나눌 경우에는 중요도 값이 따로 설정되어 있지 않으면 처리했을 때마다 라운드 로빈 알고리즘에 의해 데이터가 들어오면 시간 단위로 특정 파티션에 저장하는 것입니다.

    카프카에 적용되는 라운드 로빈 알고리즘은 데이터가 최대한 공평하게 저장될 수 있도록 특정 시간마다 저장할 파티션의 위치를 다르게 적용하는 것입니다.

    만약 데이터를 순서대로 보내는 활동이 필요하다면 파티션을 1개로 설정하면 됩니다. 하지만 1개로 설정하면 당연하겠지만 좋은 성능이 나오지 않습니다.

    위 그림을 보면 좀 더 쉽게 이해할 수 있습니다.




    2. 예제 - 토픽에 메시지 값 넣어서 출력해보기


    카프카에 토픽을 하나 만들어봅시다. 이때 파티션을 4개로 설정합니다.

    $ bin/kafka-topics.sh \
    --create \
    --bootstrap-server my-kafka:9092 \
    --partitions 4 \
    --topic practice.kafka


    이제 데이터를 여러개 넣어봅시다.
    여기서는 값이 순서대로 나오지 않음을 확연하게 보여주기 위해 producer를 통해 메시지 키 없이 메시지 값만 보낼 것입니다.

    $ bin/kafka-console-producer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka
    > 1
    > 2
    > 3
    > 4
    > 5
    > 6
    > 7
    > 8
    > 9
    > 10
    > 11
    > 12
    > 13
    > 14
    > 15
    > 16
    > 17
    > 18
    > 19
    > 20

    이제 메시지를 consumer에서 가져옵시다.

    $ bin/kafka-console-consumer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka \
    --from-beginning

    이렇게 순서없이 메시지가 출력됩니다.




    3. 예제 - 파티션별로 메시지 값 출력해보기


    $ bin/kafka-console-consumer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka \
    --partition 0 \
    --from-beginning

    파티션 0에 저장된 메시지를 가져옵니다.

    파티션 0에는 15만 저장되었습니다.


    $ bin/kafka-console-consumer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka \
    --partition 1 \
    --from-beginning

    파티션 1에 저장된 메시지를 가져옵니다.

    파티션 1에는 1, 2, 3, 4, 10, 11, 12, 18, 19로 총 9개의 메시지가 저장되어 있습니다.


    $ bin/kafka-console-consumer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka \
    --partition 2 \
    --from-beginning

    파티션 2에 저장된 메시지를 가져옵니다.

    파티션 2에는 5, 6, 16, 17, 20으로 총 5개의 메시지가 저장되어 있습니다.


    $ bin/kafka-console-consumer.sh \
    --bootstrap-server my-kafka:9092 \
    --topic practice.kafka \
    --partition 3 \
    --from-beginning

    파티션 3에 저장된 메시지를 가져옵니다.

    파티션 3에는 7, 8, 9, 13, 14로 총 5개의 메시지가 저장되어 있습니다.


    이것을 통해 확인해보니 카프카에 메시지를 보낼 때, 어떤 기준에 의해 파티션에 들어가는 것인지 공부해보는 것도 좋아보입니다. 저는 메시지 5개씩 각 파티션에 들어갈 줄 알았는데, 생각한 것과 결과가 다르네요


     

    반응형

    댓글

Designed by Tistory.