Wie viele Produzenten zu schaffen, in der kafka?
In einem high-volume real-time java web app ich bin das senden von Nachrichten an apache kafka.
Derzeit ich ' m senden an ein einzelnes Thema, aber in Zukunft brauche ich zum senden von Nachrichten an mehrere Themen.
In diesem Fall bin ich nicht sicher, Wetter zu erstellen, die ein Hersteller pro Thema oder sollte ich einen einzigen Hersteller für alle meine Themen?
Hier ist mein code:
props = new Properties();
props.put("zk.connect", <zk-ip1>:<2181>,<zk-ip3>:<2181>,<zk-ip3>:<2181>);
props.put("zk.connectiontimeout.ms", "1000000");
props.put("producer.type", "async");
Producer<String, Message> producer = new kafka.javaapi.producer.Producer<String, Message>(new ProducerConfig(props));
ProducerData<String, Message> producerData1 = new ProducerData<String, Message>("someTopic1", messageTosend);
ProducerData<String, Message> producerData2 = new ProducerData<String, Message>("someTopic2", messageTosend);
producer.send(producerData1);
producer.send(producerData2);
Wie Sie sehen können, nachdem der producer erstellt wurde, kann ich es verwenden, um Daten senden zu verschiedenen Themen.
Ich Frage mich, was ist die beste Praxis? Wenn meine app sendet, um mehrere Themen (jedes Thema wird von verschiedenen Daten) kann/sollte ich verwenden eines einzelnen Produzenten oder sollte ich mehrere Produzenten? Wenn (generell) sollte ich mehr als einen einzigen Hersteller?
Du musst angemeldet sein, um einen Kommentar abzugeben.
In der Regel ein einziger Hersteller für alle Themen werden eher Netzwerk effizient.
Wenn die kafka-client sieht mehr als ein Thema+partition auf der gleichen Kafka Knoten, es kann Nachrichten senden, die sowohl für Thema+ - Partitionen in einer einzelnen Nachricht. Kafka-optimiert für Nachrichten-batches, so ist dies effizient.
Neben Ihr web-Server müssen nur halten an-die meisten eine tcp-Verbindung zu jedem Kafka-Knoten, statt eine Verbindung pro Hersteller, pro Knoten.
Weitere Infos auf Kafkas design:
https://kafka.apache.org/documentation.html#design
Als Sie erwähnen, in den Kommentaren, sperren Streit kann zu einem limitierenden Faktor, YMMV.
Vom Kafka: The Definitive Guide, in die Kafka-Kapitel Produzenten, der Autor sagt:
Also es könnte tatsächlich Vorteile haben mehrere Produzenten.
Haben wir überprüft, in der Praxis, dass nur ein Hersteller ist optimal pro Thema. Allerdings haben mehrere Produzenten ist nützlich, wenn Sie bei der lang -, Fett-Netzwerk-problem, in dem Fall müssen wir mehrere verbindungen haben, in vollem Umfang nutzen das Netzwerk.
Dosierungs-und pipelining in einer einzigen TCP-Verbindung (wie Kafka) von selbst nicht zu skalieren, um große Chargen, wenn Sie senden müssen, um eine host-weit entfernt, es sei denn, Sie tun, TCP-Tuning-großen-Fenster-Größen. Dies ist der Fall, wenn Sie können Experimentieren mit mehr Produzenten.
In 0.8.2.0 und oben, wenn Sie mit gleichen kafka Produzent für mehrere Themen, dann die Standard-Partitionierungs-Logik für das round-robin-Zuweisung schlägt fehl.