2016-07-13 12 views
2

ich etwas über kafka verstehen müssen:kafka Themen und Partitionen Entscheidungen

  1. Wenn ich einen einzelnen kafka Broker auf einem einzigen Host haben - ist es Sinn es für die Themen mehr als eine Partition haben müssen? Ich meine, auch wenn meine Daten mit einem Schlüssel (zB Mieter-ID) unterschieden werden können - was bringt es, dies auf einem einzigen Kafka-Broker zu tun? Gibt es Parallelismus, wenn ja wie?
  2. Wenn ein Schlüssel verwendet wird, bedeutet dies, dass jeder Schlüssel einer bestimmten Partition zugeordnet ist? Muss die Anzahl der Partitionen für ein Thema der Anzahl der möglichen Werte für den angegebenen Schlüssel entsprechen? ODER ist dies nur ein Hash und so muss die Anzahl der Partitionen nicht gleich sein?
  3. Von dem, was ich lese, werden Themen aufgrund von Arten von Nachrichten in Kafka platziert werden. Aber in meinem Fall habe ich zwei Themen, die ich erstellt habe, seit ich zwei Arten von Verbrauch habe: eine für das Lesen einer einzelnen Nachricht. die zweite im Falle eines Großteils von Nachrichten kommt in die Warteschlange (Anwendungsgründe) und dann wird sie in das zweite Thema eingegeben. Ist das ein gutes Design, obwohl der Nachrichtentyp derselbe ist? irgendeine andere Praxis für eine solche Skandierung?

Antwort

3
  1. Ja, es macht durchaus Sinn, für ein Thema mehr als eine Partition zu haben, selbst wenn Sie einen einzelnen Kafka-Broker haben. Ein Szenario, wenn Sie davon profitieren können, ist ziemlich einfach:
    • Sie durch Mieter id in-Auftragsabwicklung zu gewährleisten, müssen
    • Verarbeitungslogik für jede Nachricht ist ziemlich komplex und dauert einige Zeit. Vor allem der Fall, wenn die Kafka-Nachricht selbst ist einfach, aber die Logik hinter der Verarbeitung dieser Nachricht braucht Zeit (einfaches Beispiel - Nachricht ist eine URL, und die Verarbeitungslogik lädt die Datei von dort und einige Verarbeitung)

Angesichts dieser zwei Bedingungen können Sie in eine Situation kommen, in der ein Verbraucher nicht in der Lage ist, alle Nachrichten weiter zu verarbeiten, wenn alle Daten auf eine einzige Partition gehen. Denken Sie daran, dass Sie eine Partition mit genau einem Consumer bearbeiten können (Sie können also zwei Consumer verwenden, wenn Sie unterschiedliche Consumer-Gruppen verwenden, aber das ist nicht Ihr Fall), so dass Sie mit der Zeit hinterherhinken. Wenn Sie jedoch mehr als eine Partition haben, können Sie entweder einen Verbraucher verwenden und Daten parallel verarbeiten (dies könnte in manchen Fällen helfen, die Vorgänge zu beschleunigen) oder einfach weitere Verbraucher hinzufügen.

  1. Standardmäßig verwendet Kafka Hash-basierte Partitionierung. Dies ist konfigurierbar durch ein benutzerdefiniertes Partitionierungsprogramm bietet, zum Beispiel können Sie zufällige Partitionierung verwenden, wenn Sie nicht egal, was Ihre Botschaft.

  2. Es ist völlig bis zu Ihnen welche Zwecken Sie Themen haben für

endet partitionieren

UPD, Antworten auf Fragen im Kommentar:

  1. mehr Verbraucher Hinzufügen der Regel wird für das Hinzufügen von mehr Rechenleistung getan, nicht für die gewünschte Parallelität zu erzielen. Um eine Parallelität hinzuzufügen, fügen Sie Partitionen hinzu. Die meisten Consumer-Implementierungen verarbeiten unterschiedliche Partitionen auf verschiedenen Threads. Wenn Sie also über genügend Rechenleistung verfügen, können Sie möglicherweise nur einen einzelnen Benutzer mehrere Partitionen parallel verarbeiten lassen. Wenn Sie dann in Situationen stoßen, in denen ein Verbraucher nicht genug ist, fügen Sie einfach mehr Verbraucher hinzu.

  2. Wenn Sie ein Thema erstellen Sie die Anzahl der Partitionen angeben, nur (und Replikationsfaktor für dieses Thema, aber das ist eine andere Sache). Der Schlüssel und die Partition, die gesendet werden, sind vollständig dem Produzenten überlassen. In der Tat können Sie Ihren Producer so konfigurieren, dass er einen zufälligen Partitionierer verwendet und es wird sich nicht einmal um Schlüssel kümmern, wählen Sie einfach die Partition zufällig aus. Es gibt keine direkte Beziehung zwischen Schlüssel -> Partition, es ist einfach praktisch, davon zu profitieren, dass Dinge so eingerichtet werden.

  3. Können Sie auf diese näher erläutern? Ich bin mir nicht sicher, ob ich das verstehe, aber ich schätze deine Frage ist, ob du nur einen Wert senden kannst und Kafka wird irgendwie auf einen Schlüssel schließen. Wenn ja, dann ist die Antwort nein - Kafka gelten keine Transformation von Nachrichten und speichert sie wie es ist, also, wenn Sie Ihre Nachricht einen Schlüssel enthalten soll, muss der Hersteller ausdrücklich den Schlüssel senden.

+0

Zunächst einmal vielen Dank für die ausführliche Antwort. Noch einige Fragen zur Klärung: 1. In der Probe, die Sie in Ihrer ersten Antwort gegeben haben. Wenn ich viele Partitionen für Parallelitätszwecke habe, habe ich also viele Verbraucher in derselben Gruppe, die von diesen Partitionen liest? ist das, was du meinst oder der gleiche Verbraucher kann multi-threaded sein und somit mehr lesen? 2. Wenn ich ein Thema erstelle, konfiguriere ich es sowohl mit der Partitionsnummer als auch mit dem Schlüssel? oder der Schlüssel liegt beim Produzenten zu senden? 3. Kann die Nachricht selbst den Schlüssel enthalten und kafka weiß, dass sie aus dem JSON extrahiert werden soll? – Pinidbest

+0

Ich habe gerade aktualisiert meine Antwort – serejja

+1

Hallo paar Fragen: 1. Wie sagt man dem Produzenten, dass er einen zufälligen Schlüssel hat, der zu einer der Partitionen passt? 2. Wenn Sie die Anzahl der Partitionen in einem bestehenden Thema erhöhen möchten, ist dies möglich? – Pinidbest