Develop/DevCourseTIL

07.13 데이터 엔지니어링 69일차 - KafkaConsumer

향식이 2023. 7. 13. 11:59

KafkaConsumer 파라미터

  • Topic 이름을 KafkaConsumer의 첫번째 인자로 지정 혹은 나중에 별도로 subscribe를 호출해서 지정
파라미터 의미 기본 값 설명
bootstrap_servers 메세지를 보낼 때 사용할 브로커 리스트 (host:port) localhost:9092  
client_id Kafka Consumer 이름 'kafka-python-{version}' 지정 안 하면, 알아서 지정됨
group_id Kafka Consumer Group 이름   consumer 수 상관없이 꼭 설정해줘야 함
key_deserializer, value_deserializer 메세지의 키와 값의 deserialize 방법 지정 (함수)   serialize 했더 것을 다시 deserialize 해줌
auto_offset_reset earliest, latest latest 기본값 설정에서 consumer을 실행했는데 아무것도 없다면 현재 들어오고 있는 것이 없는 것
enable_auto_commit True이면 소비자의 오프셋이 백그라운드에서 주기적으로 커밋됨, False이면 명시적으로 커밋을 해줘야 함.
오프셋은 별도로 리셋 가능하며 Conductor Web UI에서도 가능
True  

 

Consumer가 다수의 Partitions들로부터 어떻게 읽나?

  • Consumer가 하나이고 다수의 Partitions들로 구성된 Topic으로부터 읽어야 한다면?
    • Consumer는 각 Partition들로부터 라운드 로빈 형태로 하나씩 읽게 됨
    • 이 경우 병렬성이 떨어지고 생산 속도에 따라 Backpressure가 심해질 수 있음
    • 이를 해결하기 위한 것이 Consumer Group
  • 한 프로세스에서 다수의 Topic을 읽는 것이 가능
    • Topic 수만큼 KafkaConsumer 인스턴스 생성하고 별도의 Group ID와 Client ID를 지정해야 함

 

Consumer Group

  • Consumer Topic을 읽기 시작하면 해당 Topic 내 일부 Partition들이 자동으로 할당됨
  • Consumer의 수보다 Partition의 수가 더 많은 경우, Partition은 라운드 로빈 방식으로 Consumer들에게 할당됨 
    • 한 Partition은 한 Consumer에게만 할당
    • 이를 통해 데이터 소비 병렬성을 늘리고 Backpressure 경감
    • 그리고 Consumer가 일부 중단되더라도 계속해서 데이터 처리 가능
  • Consumer Group Rebalancing
    • 기존 Consumer가 무슨 이유로 사라지거나 새로운 Consumer가 Group에 참여하는 경우 Partition들이 다시 지정되어야 함
    • 이를 Consumer Group Rebalancing이라고 부르며 이는 Kafka에서 알아서 수행해줌

 

 

반응형