2017-08-07 2 views
0

Wir verwenden derzeit einen Hersteller pro Thema. Wir überlegen, aus offensichtlichen Gründen zu einem Hersteller für mehrere Themen zu wechseln.KafkaProducer (0.9): Single Producer mehrere Themen. Potenzielle Probleme?

Nun, gibt es einen Fall, in dem ein Thema aus irgendeinem Grund langsamer sein könnte und nicht die anderen? Und wenn es einen solchen Fall gibt, wie würde es mit einem einzelnen Produzenten laufen, der zu mehreren Themen produziert? Würde es den Durchsatz anderer Themen beeinflussen?

Gibt es noch andere Fälle, in denen die Verwendung eines einzelnen Herstellers für mehrere Themen nicht sinnvoll ist?

Danke!

Update: Hier ist, was wir bisher versucht haben:

wir kurz auf den Code gesucht und hier ist, was wir verstehen: Kafka-Server eine einen Stapel von Nachrichten für jedes Thema Partition akzeptiert. Map [TopicAndPartition, MessageSet]

Es versucht, den gesamten Stapel innerhalb des konfigurierten Zeitlimits zu verarbeiten, und sendet eine Antwort mit erfolgreichen und fehlgeschlagenen Datensätzen zurück.

Nun wollen wir sehen, was zu einem Thema Ebene schief gehen kann, und wie diese die gesamte Partie beeinflussen würde:

1) Nicht alle Repliken für ein Thema: Lasst uns sagen, eine Chargendaten für drei Themen enthält : test1, test2, test3. Für test3 sind nicht alle Replikate verfügbar. Dieser Fall wird vom Anführer sofort erkannt, und die Aufzeichnungen werden fehlschlagen. In diesem Fall wird der Batch nicht verzögert und der Durchsatz für test1 und test2 wird nicht beeinflusst.

2) Replikate für ein Thema sind langsam. Nehmen wir an, dass die Replikate nur für test3 langsam sind. In diesem Fall dauert das Replizieren von Nachrichten für test3 Zeit, was wiederum den gesamten Batch verzögert, was sich auf den Durchsatz der Themen test1 und test2 auswirkt.

Was kann noch schiefgehen?

Danke!

Antwort

0

Ich nehme an, Sie meinen von mehreren Produzenten zu einem einzigen Hersteller in der gleichen Anwendung?

einen einzelnen Hersteller sollte sich nicht auf Nachteil haben

  • Sie haben eine einzige Verbindung zu jedem Broker (wo Sie n * für n Hersteller haben)
  • Sie werden Batch-Nachrichten effizienter

Es kann einige Nachteile, die durch conf auflösbar sind:

  • wenn Sie Kontingent auf Broker-Seite, die zur Steuerung des Broker-Durchsatzes konfiguriert wurde, da Sie mit einem einzelnen Hersteller mehr Daten produzieren, können Sie das Kontingent erreichen.
  • Sie müssen möglicherweise Ihr Conf ein bisschen ändern (das hängt davon ab, welchen Client Sie verwenden), wie Sie mehr Daten produzieren - buffer.memory auf Java-Produzent zum Beispiel, und wenn Sie zu den besten, max.request.size und batch.size.Dies hängt von Ihren Daten ab
+0

Danke für die Antwort @Treziac. Könntest du dazu sagen: "Gibt es einen Fall, in dem ein Thema aus irgendeinem Grund langsamer sein könnte und nicht die anderen?" Wird das den Durchsatz für andere Themen beeinflussen? – Ninad

+0

Ich bin mir nicht sicher, was du meinst. (Edit, frühe post) Sie meinen, wenn Sie 'producer1 hatte -> topic1' ' Producer2 -> topic2' ... und übergeben zu 'Hersteller -> topic1, Thema2, topic3'? dann alle Durchsatz zu Themen sind mindestens gleich? Wenn alle Producer im selben Prozess sind, sollte es keinen langsameren Durchsatz geben, außer den Situationen, die ich bereits erwähnt habe (wenn Sie die Quote erreicht haben). – Treziac

+0

Wenn Sie die Batchverarbeitung verbessern, um den Durchsatz zu verbessern, erhöhen Sie möglicherweise auch die Latenz (höherer Durchsatz, aber höhere Latenz). Wenn es wichtig ist, dass Sie Ihre Daten in etwa 5 ms anstelle von 100 ms erhalten, müssen Sie die Dosierung ein wenig opfern (aber Sie haben keine Latenz erwähnt, also nehme ich an, dass es in Ordnung ist) Beachten Sie, dass Hersteller für die Produktion threadsicher ist. Nutze es zum Besten. In Ihrem Fall sollte einfach die alten mehrere Instanzen durch eine einzige ersetzen – Treziac

Verwandte Themen