본문 바로가기

빅데이터/Kafka

아파치 Kafka Consumer의 데이터 처리 내부 architecture 설명 및 튜닝포인트

지난 포스트에서 Kafka producer의 데이터 처리 내부 architecture에 대해서 알아보았다.


아파치 Kafka Producer architecture 설명 포스팅


이번 포스트에서는 kafka architecture의 Consumer 내부 데이터 흐름에 대해 알아보려고 한다.


Kafka Consumer 데이터 내부 처리 순서


#1 : poll(record 취득 api) 호출

#2 : 가져오고자 하는 record가 Fetcher queue에 없는 경우, Fetch request를 발동하여 broker에서부터 record를 가져온다.

#3 : record batch를 Fetcher queue에 저장

#4 : 어디까지 읽었는지에 대한 offset을 consumer측에서 보관

#5 : record batch의 압축을 풀고, record를 user application thread에 반환 


Kafka Consumer 튜닝 파라미터


#A : Fetch Request

   - fetch.min.bytes=1byte

   - max.partition.fetch.bytes=1MB

   - fetch.max.bytes=50MB

   - fetch.wait.max.ms=500ms

   - receive.buffer.bytes=64KB

#B : Offset auto commit

   - enable.auto.commit=true

   - auto.commit.interval.ms=5seconds

#C : Consumer group의 consumer 수 조정(application scale up)



첨부파일 :  apache kafka consumer architecture.key

  • 종박 2019.12.29 10:16 댓글주소 수정/삭제 댓글쓰기

    안녕하세요, 데이터 엔지니어링 관련하여 글과 유투브 잘 보고 있습니다~
    글 읽다가 궁금한 점이 있어서 댓글 남깁니다.

    [Kafka Consumer 튜닝 파라미터]의 #C에서 “#C : Consumer group의 consumer 수 조정(application scale up)” 라고 적혀있는데요, 컨슈머의 수를 늘려서 처리량을 확보하는 것은 스케일 아웃으로 이해하고 있는데, 스케일 업이라고 잘못 적으신건지 아니면 다른 이유가 있는지 궁금합니다.

    • 안녕하세요 종박님, 말씀하신 부분에 대해 설명드리자면 Consumer group의 consumer 수 조정은 상황에 따라 scale out일수도 혹은 scale up일수도 있습니다.
      --
      - Scale out : 서버의 대수를 늘려 처리능력을 향상
      - Scale up : 서버 그 자체를 증강하여 처리능력을 향상
      --
      예를 들자면 1대의 machine에서 돌아가는 consumer application이 존재한다고 하면 해당 application에 동일 consumer group으로 consumer thread를 여러개 생성해서 돌리는(scale up)방식도 있을수 있습니다.
      또는 댓글에 쓰신대로 동일 consumer group으로 consumer application(1 thread)를 여러 machine에 띄우는(scale out) 방식도 존재한다고 말씀드릴 수 있습니다.