Programming/Kafka

[kafka] Consumer 주요 기능

bisi 2020. 4. 21. 11:57

Consumer 주요기능

  • 특정 파티션을 관리하고 있는 파티션 리더에게 메세지 가져오기를 요청하는 것
  • 각 요청은 로그의 오프셋을 명시하고 그 위치로 부터 로그메시지 수신
  • 그래서 Consumer는 가져온 메세지의 위치를 조정할 수 있고, 필요하다면 이미 가져온 데이터도 다시 가져오기 가능.
  • 가져온 메시지를 다시 가져올 수 있는기능은 RabbitMQ와 같은 일반적인 메세지큐 솔루션에서는 제공하지 않음. (기존 다른 메세징큐 솔루션에선는 Consumer 가 메세지를 가져가면 큐에서 삭제되어 다른 Consumer 가 가져갈 수 없는 것과는 다른 방식임.)

 

Consumer History

  • Consumer 의 offset의 저장 위치에 따라 Old Consumer , New Consumer 로 나뉘어짐
  • Old Consumer : Zookeeper  노드에 저장
  • New Consumer : 카프카 토픽에 저장 (현재 적용버전)

 

Consumer 순서보장

  • 토픽의 partition이 여러개인 경우 메세지 순서 보장 안됨. (파티션과 파티션 사이의 순서보장 X.)
  • 파티션내에세는 순서보장 됨.
  • 하나의 토픽에 여러 컨슈머 그룹 동시접속하여 메세지를 가져올 수 있음

 

 

Consumer Group

  • Consumer 를 실행할때는 항상 Consumer  그룹이라는것이 필요
  • Consumer 실행시 추가적인 옵션을 적용하지 않으면 자동으로 console-consumer-xxxx(숫자)로 생성됨
  • Consumer 는 파티션의 오프셋 기준으로만 메세지를 가져옴
  • Consumer 그룹은 운영 중에도 확장 가능 
  • 장애 대처도 용이
  • Consumer 그룹 아이디 지정 : group.id
  • Consumer 그룹안에서 Consumer 들은 메세지를 가져오고 있는 토픽의 파티션에 대해 소유권 공유
  • 리밸러스 (Rebalance) : 소유권 이동 
    • 장점 : Consumer 쉽고 안전하게제거 높은 가용성, 확장성 확보

    • 단점 : 리밸런스 동안 일시적으로 컨슈머 메세지를 가져올수 없음.

  • 토픽의 파티션 만큼 최대 Consumer 수 연결 가능. (그 이상은 Consumer 연결 안됨)

  • 여러 Consumer 그룹들이 하나의 토픽에서 메세지를 가져갈 수 있음 (why? 각각의 Consumer 가 오프셋 관리하기 때문)

 

 

Consumer Commit

  • 정의 : 각 파티션에 대해 현재 위치를 업데이트 하는 동작, 카프카내에 별도로 내부에서 사용하는 토픽
  • 형식 : __consumer_offet
  • 커밋 설정
    • 자동 : enable.auto.commit = true

    • 수동 : enable.auto.commit = false

 

 

 

 

참고 문헌 : 카프카, 데이터 플랫폼의 최강자 실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지