2017-12-28 13 views
0

Ich habe mehrere Verbraucher alle mit der gleichen group.id für ein bestimmtes Thema zuhören. Das Thema hat eine Partition.Erwartetes Verhalten für mehrere Consumer mit derselben group.id für ein Thema mit einer einzelnen Partition

Es ist mein Verständnis, dass Verbraucher aus der gleichen Verbrauchergruppe (identifiziert durch identische group.id) Nachrichten in einer Round-Robin-Art erhalten würden, so dass eine Nachricht nur von einem einzelnen Verbraucher behandelt wird. Die Benutzer werden auf verschiedenen Computern in verschiedenen Windows-Diensten ausgeführt.

Der Verbraucher wird in C# geschrieben und basiert auf Confluent's Apache Kafka .NET client.

Die Konfiguration sieht so aus:

 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"} 
       } 
      } 
     }; 

Jedoch habe ich Erfahrung machen, dass alle Verbraucher die gleichen Nachrichten bekommt. Vom Verbraucher protokolliere ich Informationen über die empfangene Nachricht und hier sehe ich mehrere Protokolleinträge mit derselben Nachricht, Thema, Offset und Partition.

Ist dies das erwartete Verhalten?

+0

Eigentlich ist es komisch, dass Sie die gleiche Nachricht erhalten, da alle Konsumenten derselben Groupid angehören. Wenn Sie jedoch sagen: "Die Verbraucher werden auf verschiedenen Computern in verschiedenen Windows-Diensten ausgeführt." Was genau bedeutet das? – dbustosp

Antwort

0

In einer Gruppe kann nur 1 Benutzer einer Partition zugewiesen werden (und Nachrichten empfangen).

Wenn Ihre Consumer (alle in derselben Gruppe) nur ein Thema mit einer einzelnen Partition abonniert haben, empfängt nur einer von ihnen Nachrichten von ihm. Alle anderen Verbraucher sind im Leerlauf und bereit, zu übernehmen, falls der zugewiesene Verbraucher beendet wird oder abstürzt oder mehr Partitionen erstellt werden.

Die Konfiguration ist für die Partitionszuweisung, nicht für Nachrichten.

Was Sie beschrieben haben, klingt nicht richtig.

Sind Sie sicher, dass die Verbraucher alle in derselben Gruppe sind? Können Sie überprüfen, was der Staat zu Kafka nach durch Ausführen von:

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

Danke. Ich werde zurückkommen, sobald ich den Zustand nach Kafka überprüfen kann. – carstenj

0

Ich glaube, Sie die Beziehung zwischen Partitionen und Verbraucher Missverständnis. Im Wesentlichen 1 Verbraucher liest Daten von nur 1 Partition.

Im Folgenden zeige ich die Beziehung zwischen Verbraucher und Partitionen in Bildern aus Kafka extrahiert: The Definitive Guide, die empfehle ich Ihnen zu lesen, speziell Kapitel 4: Kafka Verbraucher.

Exactly one-one relationship between consumers and partitions

Bild unten zeigen 1 Verbraucher Lesen von mehreren Partitionen. Wenn ein neuer Kunde beim System angemeldet ist, wird die Last ausgeglichen, so dass beide Verbraucher Daten von 2 verschiedenen Partitionen lesen.

enter image description here

Das letzte Bild unten zeigen, was passiert, wenn die Zahl der Verbraucher größer ist als die Anzahl der Partitionen ist. Im Wesentlichen wird 1 Verbraucher im Leerlauf sein.

enter image description here

> partition.assignment.strategy 

Denken Sie daran, dass wir Verbraucher haben, die zu einer Verbrauchergruppe gehören. Dieses spezielle Flag wird die Strategie festlegen, die verwendet werden soll, um die Themengruppe "Consumers to Topic" zuzuweisen. Es gibt standardmäßig 2 Strategien: Bereich und RoundRobin.

+0

Ich denke, dass ich die Beziehung zwischen Konsumenten und Partitionen verstehe. In der Praxis sehe/erfahre ich das obige Szenario und es passt nicht zur Dokumentation. Ich versuche einfach zu verstehen, was ich falsch gemacht habe. Vielen Dank. – carstenj

+0

Dann denke ich, ein Teil Ihrer Frage ist ein wenig unklar: "Ich denke, das ist ein wenig unklar:" Es ist mein Verständnis, dass Verbraucher aus der gleichen Verbrauchergruppe (identifiziert durch identische group.id) Nachrichten in einem Round-Robin bekommen Mode, so dass eine Nachricht nur von einem einzelnen Verbraucher bearbeitet wird. " – dbustosp

Verwandte Themen