2017-12-28 33 views
0

특정 주제를 수신하는 동일한 group.id를 가진 여러 소비자가 모두 있습니다. 주제에는 하나의 파티션이 있습니다.단일 파티션이있는 항목에 대해 동일한 group.id를 가진 여러 소비자의 예상 동작

동일한 소비자 그룹의 소비자 (동일한 group.id로 식별 됨)는 단일 소비자 만 메시지를 처리 ​​할 수 ​​있도록 라운드 로빈 방식으로 메시지를 받게된다는 것을 알고 있습니다. 소비자가 서로 다른 컴퓨터에서 서로 다른 Windows 서비스로 실행됩니다.

소비자는 C#으로 작성되었으며 Confluent's Apache Kafka .NET client을 기반으로합니다.

 var config = new Dictionary<string, object> 
     { 
      {"group.id", "MyConsumerGroupId"}, 
      {"enable.auto.commit", true}, 
      {"auto.commit.interval.ms", 5000}, 
      {"log.connection.close", false}, 
      {"session.timeout.ms", 30000}, 
      {"heartbeat.interval.ms", 5000}, 
      {"queued.min.messages", 1000}, 
      {"partition.assignment.strategy", "roundrobin"}, 
      {"bootstrap.servers", _kafkaCluster}, 
      { 
       "default.topic.config", new Dictionary<string, object> 
       { 
        {"auto.offset.reset", "largest"} 
       } 
      } 
     }; 

그러나 나는 모든 소비자가 같은 메시지를 얻을 수 있음을 경험을 할 : 같은

구성이 보인다. 소비자로부터받은 메시지에 대한 정보를 기록하고 여기에 동일한 메시지, 주제, 오프셋 및 파티션이있는 여러 로그 항목이 표시됩니다.

이것은 예상되는 동작입니까?

+0

실제로 모든 소비자가 동일한 groupid에 속하는 경우 동일한 메시지가 표시되는 것은 이상합니다. 그러나 소비자가 서로 다른 컴퓨터에서 다른 Windows 서비스를 실행하고 있다고 말하면 정확히 무슨 뜻입니까? – dbustosp

답변

0

그룹에서 한 파티션에 할당 된 소비자는 1 명 (메시지 수신)입니다.

소비자 (동일한 그룹의 모든 사용자)가 단일 파티션이있는 주제에만 가입하는 경우, 그 중 하나만 해당 그룹의 메시지를 수신합니다. 할당 된 사용자가 종료되거나 충돌이 발생하거나 더 많은 파티션이 생성 될 경우를 대비하여 다른 모든 소비자는 유휴 상태가되어 인계받을 수 있습니다.

roundrobin 구성은 메시지가 아닌 파티션 할당을위한 것입니다.

본인이 묘사 한 내용은 옳지 않습니다.

소비자가 모두 같은 그룹에 속해 있습니까? 당신은 실행하여 상태가 카프카에 따라 어떤 확인할 수 있습니다

/bin/kafka-consumer-groups.sh --zookeeper ZOOKEEPER --describe --group MyConsumerGroupId 
+0

감사합니다. 내가 카프카에 따라 상태를 점검 할 수 있으면 나는 돌아올 것이다. – carstenj

0

난 당신이 파티션과 소비자 사이의 관계를 오해 생각합니다. 본질적으로 1 명의 소비자는 단 하나의 파티션에서 데이터를 읽습니다.

내가 카프카에서 추출 된 이미지의 소비자와 파티션 사이의 관계를 보여 아래 : 내가보기 엔 당신이 읽을 것을 권장 확실한 가이드, 특별히 제 4 장 : 카프카 소비자합니다. 여러 파티션에서 공연 한 소비자 읽기 아래

Exactly one-one relationship between consumers and partitions

이미지. 하나의 새로운 소비자가 시스템에 등록 된 경우 두 부하가 두 개의 다른 파티션에서 데이터를 읽도록 부하가 균형을 이룰 것입니다.

enter image description here

소비자의 수는 파티션 수보다 클 때 발생하는 것을 보여 아래의 마지막 이미지. 본질적으로 1 명의 소비자가 유휴 상태가됩니다.

enter image description here

> partition.assignment.strategy 

우리가 소비자 그룹에 속한 소비자가 기억하십시오. 이 특정 플래그는 Consumers를 Topic 파티션에 할당하는 데 사용할 전략을 결정합니다. 기본적으로 2 가지 전략이 있습니다 : 범위RoundRobin.

+0

나는 소비자와 파티션 간의 관계를 이해한다고 생각한다. 그러나 실제로는 위의 시나리오를 보거나 경험하지만 문서에 맞지 않습니다. 그래서 나는 내가 잘못한 것을 이해하려고 노력하고 있습니다. 감사. – carstenj

+0

그런데 나는 당신의 질문 중 한 부분이 분명하지 않다고 생각합니다. "나는 이것이 약간 명확하지 않다고 생각합니다."동일한 소비자 그룹의 소비자 (동일한 group.id로 식별 됨)가 라운드 로빈 하나의 소비자 만이 메시지를 처리 ​​할 수 ​​있도록해야한다. " – dbustosp