Kafka Consumer - 2

kkmdevel·2024년 10월 24일
0

kafka

목록 보기
6/10

Kafka Consumer Rebalancing

Kafka Consumer Rebalancing은 Kafka의 Consumer 그룹에서 새로운 Consumer가 추가되거나 기존 Consumer가 종료될 때, 또는 토픽에 새로운 파티션이 추가될 때 발생하는 중요한 과정이에요. Rebalancing은 Broker의 Group Coordinator가 Consumer 그룹 내의 Consumer들에게 파티션을 재할당하여 데이터 처리가 효율적으로 이루어지도록 보장하는 역할을 해요. 이번 글에서는 Kafka Consumer Rebalancing이 어떻게 동작하는지, 그리고 그 과정에서의 주요 개념을 설명할게요.


1. Consumer Group과 Group Coordinator

Kafka에서는 Consumer Group이 여러 개의 Consumer로 이루어져 있으며, 각 Consumer는 특정 파티션을 담당해요. Group Coordinator는 각 Consumer가 처리할 파티션을 관리하고, 그룹 내에 새로운 Consumer가 추가되거나 제거될 때 Rebalancing을 수행해 파티션을 재할당해요.

  • Consumer Group: 동일한 데이터를 처리하는 Consumer들의 집합이에요. Consumer들은 그룹 내에서 파티션을 나누어 처리하며, 중복 없이 데이터를 처리해요.

  • Group Coordinator: 각 Consumer Group 내에서 파티션을 관리하고, Rebalancing을 통해 Consumer들에게 파티션을 할당하는 역할을 해요.


2. Consumer Rebalancing의 동작 방식

Consumer Group 내에서 새로운 Consumer가 추가되거나, 기존 Consumer가 종료될 때, 또는 새로운 파티션이 토픽에 추가되면 Group Coordinator는 Consumer Group 내의 파티션 할당을 Rebalancing해요.

  • 새로운 Consumer 추가: Consumer Group에 새로운 Consumer가 추가되면, Group Coordinator는 기존 Consumer들에게 할당된 파티션을 다시 분배해 새로운 Consumer에게도 파티션을 할당해요.

  • 기존 Consumer 종료: 기존 Consumer가 종료되면 Group Coordinator는 해당 Consumer에게 할당된 파티션을 다른 Consumer에게 재분배해요.

  • 새로운 파티션 추가: 토픽에 새로운 파티션이 추가되면, Group Coordinator는 모든 Consumer에게 파티션을 재분배해 균등하게 처리할 수 있도록 해요.


3. Consumer Rebalancing 프로토콜

Kafka는 Eager와 Cooperative 두 가지 Rebalancing 프로토콜을 제공해요.

  • Eager Rebalancing:
    Rebalancing 시 기존 Consumer들의 모든 파티션 할당을 취소하고, 새로운 파티션 할당을 진행해요.
    이 과정에서 모든 Consumer가 잠시 메시지를 읽지 않게 되며, Lag가 발생할 가능성이 있어요.

  • Cooperative Rebalancing:
    Rebalancing 시 기존 Consumer들의 모든 파티션 할당을 취소하지 않고, 필요한 Consumer들만 순차적으로 Rebalancing을 진행해요.
    모든 Consumer가 동시에 메시지 처리를 중단하지 않으며, Rebalancing 시간이 짧아져요.


4. Rebalancing과 파티션 할당 전략

1. Range 할당 전략

Range 할당 전략에서는 각 Consumer가 연속된 파티션을 그룹으로 할당받는 방식입니다. 이 방식에서는 동일한 Consumer가 연속된 파티션을 처리하게 됩니다.

예를 들어, 2개의 토픽(Topic A, Topic B)에 각각 3개의 파티션이 있고, 3명의 Consumer가 있을 때, 파티션이 다음과 같이 할당됩니다.

Rebalancing 전

  • Consumer 1: Topic A - Partition 1, Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2, Topic B - Partition 2
  • Consumer 3: Topic A - Partition 3, Topic B - Partition 3

Rebalancing 후

  • Consumer 1: Topic A - Partition 1, Partition 2 / Topic B - Partition 1, Partition 2
  • Consumer 2: Topic A - Partition 3 / Topic B - Partition 3

Range 할당 전략의 특징

  • 데이터 일관성: 각 Consumer가 연속된 파티션을 담당하므로, 동일한 키 값을 가진 데이터가 일관되게 처리됩니다. 이로 인해 데이터 일관성을 쉽게 유지할 수 있습니다.

  • 부하 불균형 가능성: 파티션 수가 Consumer 수로 정확히 나누어지지 않으면, 일부 Consumer에게 더 많은 파티션이 할당될 수 있습니다. Rebalancing 후 Consumer 1이 더 많은 파티션을 처리하게 되어 부하가 집중될 수 있습니다.


2. Round Robin 할당 전략

Round Robin 할당 전략은 파티션을 순차적으로 Consumer에게 할당하여, 부하를 균등하게 분산하는 방식입니다.

Rebalancing 전

  • Consumer 1: Topic A - Partition 1, Topic B - Partition 2
  • Consumer 2: Topic A - Partition 2, Topic B - Partition 3
  • Consumer 3: Topic A - Partition 3, Topic B - Partition 1

Rebalancing 후

  • Consumer 1: Topic A - Partition 1, Partition 2 / Topic B - Partition 1, Partition 2
  • Consumer 2: Topic A - Partition 3 / Topic B - Partition 3

Round Robin 할당 전략의 특징

  • 균등한 부하 분배: 파티션이 순차적으로 할당되므로, Consumer 간 부하가 고르게 분배됩니다. Rebalancing 후에도 가능한 균등하게 할당됩니다.
  • 데이터 일관성 문제: 동일한 키 값을 가진 데이터가 여러 Consumer에 분산될 수 있어, 데이터의 일관성을 유지하기 어려울 수 있습니다. 예를 들어, 같은 키 값이 다른 파티션에 분산될 수 있습니다.

3. Sticky 할당 전략

Sticky 할당 전략은 기존 파티션 할당을 최대한 유지하려는 방식입니다. Rebalancing이 발생해도 Consumer가 이전에 처리하던 파티션을 최대한 유지하려고 합니다. 하지만 Eager Rebalancing 프로토콜을 사용하여 모든 Consumer의 파티션 할당이 일시적으로 취소된 후, 새롭게 할당됩니다.

Rebalancing 전

  • Consumer 1: Topic A - Partition 1 / Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2 / Topic B - Partition 2
  • Consumer 3: Topic A - Partition 3 / Topic B - Partition 3

Rebalancing 중

모든 Consumer의 파티션 할당 취소 → 파티션 비활성 상태

  • Consumer 1: Rebalancing
  • Consumer 2: Rebalancing
  • Consumer 3: DELET

Rebalancing 후

  • Consumer 1: Topic A - Partition 1, Partition 3 / Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2 / Topic B - Partition 2, Partition 3

Sticky 할당 전략의 특징:

  • 데이터 일관성 유지: 파티션 할당을 최대한 유지하므로, 데이터 일관성을 유지할 수 있습니다. 각 Consumer는 Rebalancing 후에도 최대한 이전에 처리하던 파티션을 유지하려고 합니다.

  • Rebalancing 동안의 Lag: 모든 파티션 할당이 일시적으로 취소되고 재할당되므로, 잠시 동안 메시지 처리가 중단될 수 있습니다. 이로 인해 데이터 처리 지연(Lag)이 발생할 가능성이 있습니다.


4. Cooperative Sticky 할당 전략

Cooperative Sticky 할당 전략은 Sticky 할당 전략과 유사하지만, 일부 Consumer만 순차적으로 Rebalancing을 수행하여 처리 중단 시간을 최소화하는 방식입니다. 모든 Consumer의 파티션 할당을 한꺼번에 취소하지 않고, 필요한 Consumer만 순차적으로 Rebalancing이 이루어집니다.

Rebalancing 전

  • Consumer 1: Topic A - Partition 1 / Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2 / Topic B - Partition 2
  • Consumer 3: Topic A - Partition 3 / Topic B - Partition 3

Rebalancing 중

Consumer 3이 Rebalancing 수행 중 → Consumer 1, 2는 계속 메시지 처리
Consumer 3: 파티션 할당 재조정 중
Consumer 1, 2: 기존 파티션 유지

  • Consumer 1: Topic A - Partition 1 / Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2 / Topic B - Partition 2
  • Consumer 3: DELET

Rebalancing 후

  • Consumer 1: Topic A - Partition 1, 3 / Topic B - Partition 1
  • Consumer 2: Topic A - Partition 2 / Topic B - Partition 2,3

Cooperative Sticky 할당 전략의 특징

  • Rebalancing 시간 최소화: 일부 Consumer만 순차적으로 Rebalancing을 수행하므로, 전체 Consumer가 파티션을 잃는 일이 없으며 처리 중단 시간을 줄일 수 있습니다.

  • 데이터 일관성 보장: 가능한 한 파티션 할당을 유지하려 하므로, 데이터의 일관성이 보장됩니다. 이전 할당된 파티션이 크게 변하지 않도록 노력합니다.

  • 복잡도 증가: 일부 Consumer만 Rebalancing을 수행하기 때문에, Rebalancing 과정이 더 복잡해질 수 있습니다. Rebalancing이 순차적으로 발생하여 처리 과정이 여러 번 나눠질 수 있습니다.


5. Heartbeat와 Rebalancing

Kafka에서는 Consumer의 정상적인 동작을 감시하기 위해 Heartbeat 메커니즘을 사용해요. Consumer는 주기적으로 Heartbeat를 전송해 자신의 상태를 Group Coordinator에 보고하며, 문제가 발생하면 Coordinator는 해당 Consumer를 Group에서 제외하고 Rebalancing을 지시해요.

  • Heartbeat Interval: Consumer가 Heartbeat을 전송하는 간격을 설정해요.

  • Session Timeout: Group Coordinator가 Heartbeat 신호를 기다리는 최대 시간이에요. 이 시간이 지나면 Consumer는 그룹에서 제외돼요.

  • Max Poll Interval: Consumer가 poll()을 호출하지 않는 최대 시간으로, 이 시간이 지나면 Rebalancing이 발생해요.


마무리

Kafka의 Rebalancing은 Consumer 그룹 내에서 데이터 처리의 효율성을 보장하고, Consumer들이 적절하게 파티션을 처리할 수 있도록 도와주는 중요한 과정이에요. Eager와 Cooperative Rebalancing 방식에 따라 성능과 안정성이 달라지기 때문에, 적절한 설정을 통해 효율적인 데이터 처리가 가능해요.

profile
25/08/12

0개의 댓글