Ich bin neu in kafka. Meine Anforderung ist, ich habe zwei Partitionen zum Beispiel Partition-0 und Partition-1 und ich habe eine Liste von Werten, die auch KEY-Wert enthält. Ich möchte Daten nach meinem Schlüssel wie Schlüssel speichern-1 wird zu Partition-0 gehen, Schlüssel-2 wird zu Partition-1 gehen. Mit der alten API gibt es eine Möglichkeit zu erreichen, dass wir die Partitionsschnittstelle implementieren müssen, aber wie ich das mit der neuen API machen kann. DankeKafka: Wie erreichen Round Robin Partition in Kafka
Antwort
Mit dem neuen Hersteller können Sie auch Partitioner
Schnittstelle implementieren (https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/Partitioner.java), um Round-Robin-Verteilung zu erreichen.
Sie können DefaultPartitioner
als Referenz verwenden - https://github.com/apache/kafka/blob/trunk/clients/src/main/java/org/apache/kafka/clients/producer/internals/DefaultPartitioner.java
Sie können durch Überschreiben des default partitioner des kafkas Produzenten zu kafka in Round-Robin-produzieren.
Eine Pseudo Implementierung
class RRPartitioner():
def __init__():
# Using topic metadata get total number of partitions
self.total_partitions = client[topic].get_number_partitions()
self.part_offset = 0
def partitioner(self, key, msg):
if self.part_offset > self.total_partitions:
self.part_offset = 0
return self.part_offset
else:
self.part_offset += 1
return self.part_offset
Vor Implementierung ist es reine Round-Robin, wenn Sie die Nachrichten wollen nach Schlüssel und haben Sie Round-Robin bestellt werden mehr in der benutzerdefinierten Partitionierer zu tun haben.
Wenn Sie Round-Robin-Verhalten wollen, übergeben Sie einfach nicht die Taste beim Schreiben an Producer und DefaultPartitioner
wird die Arbeit für Sie erledigen. Sie müssen keine benutzerdefinierte Implementierung schreiben. Aus dem javadocs:
/**
* The default partitioning strategy:
* <ul>
* <li>If a partition is specified in the record, use it
* <li>If no partition is specified but a key is present choose a partition based on a hash of the key
* <li>If no partition or key is present choose a partition in a round-robin fashion
*/
- 1. Kafka Topic Partition
- 2. PartitionId in kafka repliziert Partition
- 3. Abbrechen kafka Partition Aktion zuweisen
- 4. Kafka Thema vs Partition Thema
- 5. kafka NoClassDefFoundError kafka/Kafka
- 6. Round Robin in C#
- 7. Apache Kafka - KafkaStream auf Thema/partition
- 8. kafka Get Partition Anzahl für ein Thema
- 9. Kafka Topic Partition und Spark Executor Mapping
- 10. Kafka: Partition von ungültigem Broker verschieben
- 11. Kafka mehrere Verbraucher für eine Partition
- 12. Python "Round Robin"
- 13. Round-Robin-Zuweisung
- 14. Round Robin Scheduling
- 15. Round-Robin-Array in C#
- 16. Wie kafka Produzent Thema mit mehr als einer Partition mit Spring Integration kafka konfigurieren
- 17. LINQ Auftrag von "Round Robin"
- 18. Kafka gibt NoSuchElementException
- 19. Generische C# Round Robin (partitioniert/sortiert) Warteschlange
- 20. Kafka Broker vs Thema
- 21. Round Robin Scheduling und IO
- 22. kafka-python - Wie stelle ich eine Partition fest?
- 23. Kafka-Verbraucherliste
- 24. Spring Kafka, Testen mit Embedded Kafka
- 25. Kafka: Unterstützt Kafka den Statusübergang auf Anwendungsebene?
- 26. Convert CSV-Datei in Round Robin-Datenbank
- 27. Kafka Storm Integration mit Kafka Spout
- 28. Frühling Kafka-Integration für Kafka 0.9
- 29. Apache Kafka Mehrere Verbraucherinstanzen
- 30. Kafka Partition Rebalancing (Zuordnung) dauert zu viel Zeit
Dies ist die einfachste Lösung, aber es funktioniert nicht, wenn Sie eine Partition zur Laufzeit hinzufügen, die ein vollständig gültig Fall ist – serejja
True..you muß Hersteller oder Umfrage in regelmäßigen Abständen für Metadaten neu starten Änderungen. Bust die meisten bestehenden Keyed Producer haben das gleiche Problem IIRC. –