본문 바로가기

빅데이터/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) 방식도 존재한다고 말씀드릴 수 있습니다.

  • 오삼오삼 2020.10.06 14:34 댓글주소 수정/삭제 댓글쓰기

    안녕하세요. 글 잘 보았습니다. 글을 읽고 댓글을 읽다가 궁금증이 생겨서 질문드립니다.

    Consumer group 의 consumer 수 조정은 상황따라 달라진다고 말씀해주셨는데, 동일 consumer group id 를 갖는 consumer 를 하나의 서버머신에 두 개 띄어서 프로세스로 돌린다면 이 부분은 scale out 이라고 봐도 무방할까요?

    스레드 개수를 늘린다면 consumer 내에 여러 스레드로 동작한다고 생각되서, 그렇게 하지 않고 컨슈머 프로그램을 두 개 돌리는 생각을 해봤거든요.

    • 안녕하세요 오삼오삼님, 일반적으로 서버 기준으로 설명할때는 서버를 여러대 horizontal로 늘리는 경우에 스케일 아웃한다고 합니다. 그러나 이번 경우에는 컨슈머 스레드 개수를 늘려서 horizontal(병렬)로 늘리는 것이므로 컨슈머를 스케일 아웃 한다고 말 할 수도 있을것 같습니다. 말씀대로 스레드개수를 여러개 할 필요 없이 프로세스를 여러개 실행(서버도 여러대)하는 방식도 좋은 방식입니다.