Kafka ist ein verteiltes Publish-Subscribe-Messagingsystem, mit dem Sie Daten zuverlässig zwischen Produzenten und Konsumenten übermitteln können. Es verfügt über einen hohen Durchsatz, geringe Latenz und Fehlertoleranz.
Kafka besteht aus den folgenden Komponenten:
Wenn ein Produzent Daten an den Kafka-Cluster sendet, werden die Daten in eine oder mehrere Partitionen geschrieben. Jede Partition verfügt über mehrere Kopien, um sicherzustellen, dass keine Daten verloren gehen. Verbraucher können Daten von jedem Replikat lesen.
Kafka verwendet einen Mechanismus namens „Offsets“, um zu verfolgen, wo Verbraucher Daten lesen. Der Offset ist eine Ganzzahl, die angibt, wie viele Daten in der Partition der Verbraucher gelesen hat. Wenn ein Verbraucher Daten liest, speichert er den Offset in ZooKeeper.
Wenn der Verbraucher ausfällt, kann er ab dem zuletzt aufgezeichneten Offset neu starten. Dadurch wird sichergestellt, dass Verbraucher keine Daten verlieren.
Kafkas Systemarchitektur ist ein verteiltes System, das aus mehreren Knoten besteht. Jeder Knoten ist ein unabhängiger Prozess, der auf verschiedenen Maschinen ausgeführt werden kann.
Kafka-Knoten kommunizieren über das TCP-Protokoll. Jeder Knoten verwaltet eine Kopie der Metadaten, die Metadateninformationen für alle Themen und Partitionen enthält.
Wenn ein Produzent Daten an den Kafka-Cluster sendet, sendet er zunächst eine Anfrage an den Metadatenknoten, um Informationen über die zu schreibende Partition zu erhalten. Der Produzent schreibt die Daten dann direkt auf diese Partition.
Wenn ein Verbraucher Daten aus einem Kafka-Cluster liest, sendet er zunächst eine Anfrage an den Metadatenknoten, um Informationen über die zu lesende Partition zu erhalten. Der Verbraucher liest dann Daten direkt von dieser Partition.
Hier ist ein einfacher Beispielcode mit Kafka:
// 创建一个生产者 Producer producer = new KafkaProducer(properties); // 创建一个主题 String topic = "my-topic"; // 创建一个消息 ProducerRecord<String, String> record = new ProducerRecord<>(topic, "hello, world"); // 发送消息 producer.send(record); // 创建一个消费者 Consumer consumer = new KafkaConsumer(properties); // 订阅主题 consumer.subscribe(Arrays.asList(topic)); // 轮询消息 while (true) { ConsumerRecords<String, String> records = consumer.poll(100); for (ConsumerRecord<String, String> record : records) { System.out.println(record.value()); } }
Dieser Beispielcode zeigt, wie man mit Kafka Nachrichten sendet und empfängt. Sie können diesen Beispielcode als Grundlage für die Erstellung Ihrer eigenen Kafka-Anwendungen verwenden.
Das obige ist der detaillierte Inhalt vonAnalyse des Arbeitsprinzips und Systemrahmens von Kafka. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!