본문 바로가기

Web/Kafka

[Kafka] 카프카 기초 - 2

1.1. Consumer과 Partition

예시 1) 파티션 4개, 컨슈머 2개

  • 위의 그림처럼 적절한 비율로 나눠서 Consume하게 됩니다.

예시 2) 파티션 4개, 컨슈머 1개

  • 컨슈머가 하나밖에 없으므로 하나의 Consumer가 파티션을 순차적으로 Consume 하게 됩니다.

예시 3) 파티션 4개, 컨슈머 5개

  • 파티션보다 Consumer 개수가 많으면 남은 Consumer는 일을 하지 못합니다.
  • 즉, Consumer 개수는 파티션보다 많으면 안된다.

1.2. Consumer 장애 상황

  • 장애 시 리밸런싱 발생
  • 리밸런싱 : 컨슈머의 장애 혹은 session_timeout_ms가 지나면 할당된 컨슈머 재조정

1.3. Consumer Group

  • 컨슈머는 그룹을 지정해서 사용할 수 있다
  • 컨슈머 그룹 단위로 offset을 관리한다. 따라서 Topic의 데이터를 컨슈머 그룹 둘다 따로 컨슘할 수 있다.
  • 그룹 내 한 컨슈머가 장애가 발생하면 그룹 내 다른 컨슈머로 리밸런싱 된다

2. Broker Partition Replication 

2.1. Partition Replication 설정

  • 위의 그림에서 브로커 내부의 Topic-1,2,3은 Replication으로 간주
  • Replication 개수 : Topic-1은 1개, Topic-2은 2개, Topic-3은 3개
  • 예시) kafka-topics.sh --bootstrap-server ... --create --topic topic_name --partitions 3 --replication-factor 3

Broker 1에 문제가 있는 경우

  • Topic-1은 복제된 데이터가 없으므로 컨슘을 지속할 수 없고 경우에 따라서는 데이터가 유실 될 수 있다
  • Topic-2,3은 다른 Broker에 복제된 데이터를 사용한다

  • Topic-3가 파티션이 Replication 3개로 나누어진 토픽이 브로커에 할당되어 있다
  • 파티션의 리더, 팔로워가 레코드가 모두 복제되어 Sync가 맞는 상태 => ISR(In-Sync Replica)
  • ISR이 아닌 상태에서 장애가 나면 unclean.leader.election.enable 설정을 활용한다
    • unclean.leader.election.enable = false : 마지막 리더를 기다린다.
    • unclean.leader.election.enable = true : 메시지 손실을 감소하고 살아난 브로커를 리더로 승격한다.
  • Broker 1에서 장애가 난다면 Broker 2,3에서 리더를 새로 선정하고 그 리더와 다시 연동하여 팔로우한다
  • 운영중 Kafka cluster 장애가 났는데 consumer, producer가 정상적으로 작동하지 않으면 옵션 확인 필요

 

반응형