[Kafka 이론] 12. 마무리 및 정리

  • 카프카 클러스터가 다수의 브로커로 구성될 수 있다.
  • 클러스터 안에서
    • 토픽, 파티션, 레플리카, 파티션 리더, ISR이 있다.
  • Kafka 내부 오프셋 토픽
  • 프로듀서는 소스 시스템에서 원하는 데이터를 받고 아파치 카프카로 전송한다.
    • 라운드 로빈 개념이 있다.
    • 데이터가 토픽 안의 모든 파티션을 걸쳐 분산된다는 의미다.
  • 키 기준 정렬은 사용자가 키를 지정하면 동일한 키가 결국 동일한 파티션으로 간다는 것이다.
  • ACKS 전략
    • ACKS = 0, 1, ALL 이 있다.
    • 카프카 클러스터를 쓸 때 원하는 확인을 할 때 사용한다.
  • 컨슈머란?
    • 컨슈머 오프셋 토픽에 오프셋을 어떻게 저장하는지에 대한 모드
      • 최소한 한 번
      • 최대한 한 번
      • 정확히 한 번
  • 카프카 클러스터를 주키퍼로 관리하는 방법
    • 주키퍼는 리더와 팔로워 개념이 있고 브로커 관리, 메타데이터 관리가 있다.
  • 커뮤니티가 주키퍼에서 KRaft 모드로 카프카 클러스만 사용하는 방향으로 전환하고 있다.
    • 주키퍼에 대한 의존성을 완전히 버리고 Kfaka 독립 체계로 간다.

기타 내용

  • 카프카 토픽은 원하는 만큼 파티션을 만들 수 있다.
  • 오프셋은 다음 수준에서만 관련이 있다
    • 토픽 – 파티션
  • 토픽이 전송되면 데이터는 immutable 이며, 메시지를 수정할 수 없다.
  • 브로커는 ID(숫자)로 식별한다.
  • 모든 브로커에는 토픽과 파티션의 하위집합만 포함된다.
  • 토픽에 복제 계수가 3인 경우 각 파티션은 3개의 서로 다른 브로커에 남는다.
    • 복제를 3개에 각기 다르게 분배해야 브로커가 죽었을경우 데이터 손실없이 복구가 가능하다.
  • 토픽의 복제 계수가 N일 때 토픽의 가용성에 영향을 주지 않고도 중지할 수 있는 브로커는 N-1이다.
  • 각 파티션에는 1개만의 리더와 다수의 레플리카가 있을 수 있다
  • 토픽에 데이터를 생성하기 위해 프로듀서가 카프카 클라이언트에 제공해야 하는 것은 클러스터의 브로커, 토픽 이름이다.
    • 매우 중요
      • 브로커 하나에만(어떤 브로커든) 연결하고, 쓰고 싶은 토픽 이름만 제공하면 됩니다. 카프카 클라이언트가 데이터를 적당한 브로커와 파티션으로 라우팅해 줍니다!
  • 토픽에서 데이터를 읽기 위해 컨슈머가 필요한 구성은 연결할 브로커, 토픽 이름
    • 매우 중요
      • 브로커 하나에만(어떤 브로커든) 연결하고, 읽어 오고 싶은 토픽 이름만 제공하면 됩니다. 카프카가 호출을 적당한 브로커와 파티션으로 라우팅해 줍니다!
  • 같은 group.id(컨슈머 그룹 id)을 보유한 두 컨슈머는 상호 배타적인 파티션에서 읽을 수 있다.
  • 카프카 컨슈머 오프셋이 저장되는 곳은 주키퍼가 아닌 카프카이다.
    • 카프카 0.9부터 토픽 __consumer_offsets에 저장되고 있습니다.